AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 286110
Accepted
L M
L M
Asked: 2021-02-27 15:34:37 +0800 CST2021-02-27 15:34:37 +0800 CST 2021-02-27 15:34:37 +0800 CST

如何规范化具有多个值的多个单元格的表格?

  • 772

所以我正在做一个任务,我在维基百科上获取一个包含多个列(例如电影名称、类型、演员、情节等)的大量电影列表(30,000 多部)并将其上传到 Elasticsearch。但是,在这样做之后,我现在想使表格至少处于 1NF 中。我在数据库设计方面并没有真正的经验,我最后一次用 Normal Form 做任何事情是在几年前。所以我看着这张表并在想,我怎么能把它放到 1NF 中。例如,如果只有 1 列具有多个值,这很容易,但是当有多个具有多个值的列时,您会怎么做,如下所示。

电影名称 导向器 投掷 类型 维基页面 阴谋
Chimmie Fadden Out West 塞西尔·B·德米尔 维克多·摩尔 喜剧、西部 https://en.wikipedia.org/wiki/Chimme_Fadden_​​Out_West Chimmie被派往西部...
海底两万里 斯图尔特·佩顿 路易斯·亚历山大、柯蒂斯·本顿、华莱士·克拉克、艾伦·霍鲁巴 动作、冒险 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...
猫和金丝雀 保罗·莱尼 劳拉·拉普兰特、福雷斯特·斯坦利、克赖顿·黑尔 喜剧,恐怖,悬疑 https://en.wikipedia.org/wiki/The_Cat_and_the_Canary_(1927_film)| 在一个...

难道你只需要做这样的事情......

电影名称 导向器 投掷 类型 维基页面 阴谋
Chimmie Fadden Out West 塞西尔·B·德米尔 维克多·摩尔 喜剧 https://en.wikipedia.org/wiki/Chimme_Fadden_​​Out_West Chimmie被派往西部...
Chimmie Fadden Out West 塞西尔·B·德米尔 维克多·摩尔 西 https://en.wikipedia.org/wiki/Chimme_Fadden_​​Out_West Chimmie被派往西部...
海底两万里 斯图尔特·佩顿 路易斯·亚历山大 行动 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...
海底两万里 斯图尔特·佩顿 路易斯·亚历山大 冒险 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...
海底两万里 斯图尔特·佩顿 柯蒂斯·本顿 行动 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...
海底两万里 斯图尔特·佩顿 柯蒂斯·本顿 冒险 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...
海底两万里 斯图尔特·佩顿 华莱士克拉克 冒险 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...
海底两万里 斯图尔特·佩顿 华莱士克拉克 行动 https://en.wikipedia.org/wiki/20,000_Leagues_Under_the_Sea_(1916_film) 一个奇怪的...

ETC?在将具有多个具有多个值的单元格的表格转换为 1NF 时,我肯定会遗漏一些非常简单的东西,但我不确定是什么。

谢谢。

database-design normalization
  • 2 2 个回答
  • 1386 Views

2 个回答

  • Voted
  1. nbk
    2021-02-27T16:07:05+08:002021-02-27T16:07:05+08:00

    规范化是从表中删除信息,这些信息被多次重复,并且作为 int 的 id 比任何文本都小。

    您需要的桥梁表,因为您在电影和用户(演员、导演、音乐家......)之间有一个:n 关系

    职业在我看来是电影与用户关系的一种属性

    Film (idfilm,Titel, plot,Wiki_Page, year,... )
    
    Film2user (idfilm,iduser,idtype)
    
    type  (idtype,occupation)
    
    user (iduser, Name, Birth,...)
    
    genre (idgenre,name)
    
    Film2genre(idfilm, idgenre)
    

    随着您进一步开发,如果您发现更多此类冗余信息,您可以添加更多属性或表格

    • 2
  2. Best Answer
    J.D.
    2021-02-27T20:37:56+08:002021-02-27T20:37:56+08:00

    因此,当有多个字段时,实际上很容易标准化,其中一些字段在同一行的单个字段中具有不同数量的数据点。只需遵循此规则:在同一行的列中具有多个数据点的任何列都应该成为它自己的表。因此,在您的示例中,可能是Castand Genre。很明显,这两列表示多对多关系,因为在同一行的单个列中存储了多个值。

    正如 nbk 提到的,您需要一个链接/桥接表来存储该多对多关系。因此,虽然您的新Cast表可能有CastId(primary key)、FirstName和等列LastName,但您在and之间的链接表将被命名为类似并且具有带有外键引用的字段(来自您的表),并且它也将具有带有表的外键引用。然后,该链接表中的每一行都将代表一个特定的个人。CastFilmFilmCastFilmIdFilmCastIdCastFilmCast CastFilm

    您将为Films表中的每一列重复相同的意识形态,每行有多个数据点。一旦您为每个规范化列提供了适当的表,您就无需再将这些数据存储在主Film表中,并且可以从中删除这些列。

    • 2

相关问题

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

  • 高级规范化形式是否总是符合低级规范化形式的标准?

  • 标准化练习资源

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve