【问题标题】:Relational Database and Normalization for Relational Tables关系数据库和关系表的规范化
【发布时间】:2013-09-01 06:10:36
【问题描述】:

我试图弄清楚在这种情况下设置数据库的适当方法是什么:

我正在创建一个电影/电视数据库。一部电影可能有多种类型,而电视节目可能有多种类型。

基本上我想知道的是,如果您有电影桌、电视桌……您应该:

  1. 有一个 MovieHasGenre 表,由 Movie 表的外键和流派值的常规字段组成

  2. 有一个 MovieHasGenre 表和一个流派表,其中 MovieHasGenre 有两个外键,一个指向 Movie 表中的电影,另一个指向流派表中的流派

我真的不确定这是标准化的东西还是只是涉及偏好。我们是否担心速度,因为删除 Genre 表似乎是少了一个连接。

【问题讨论】:

    标签: sql relational-database normalization


    【解决方案1】:

    选择选项 2。

    将每个流派存储一次,并通过 MoveHasGenre 表引用它是很有用的。这样,如果您有一个流派的其他属性列,您不必在提到给定流派的每一行中冗余地存储这些属性。\

    你的评论:

    另一种情况是,如果您想更改流派的拼写,并将其应用于引用它的所有行,而不会忘记一些。

    【讨论】:

    • 我可以看到像演员这样的东西,你可能想知道演员的信息(比如年龄等),但我仍在试图弄清楚我为什么要这样做就像流派一样,在流派表中确实没有任何其他内容要添加(至少没有什么明显的)——当然,我给出的是电影数据库的具体示例,但总体上应用了这种理性
    【解决方案2】:

    选项 2 是您将如何规范化数据。

    选项 1 的问题是数据冗余。与使用几个字节的数据来存储和 INT 相反,您正在使用一个潜在的大值来存储流派的名称。像比尔所说的另一个问题是,您可能会出现数据不一致,因为如果类型发生变化,您将不得不更新多个字段,而不仅仅是一列。

    但是,您在选项 1 中拥有的是选项 2 的非规范化版本,它比选项 2 具有性能优势,但我想,鉴于此数据库的规模看似很小,不会有显着的性能变化.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多