【问题标题】:Database design for lots of possible attributes针对许多可能属性的数据库设计
【发布时间】:2011-01-14 21:26:04
【问题描述】:

我正在构建一个 MySQL 车辆数据库。我希望通过数据库、颜色、传输、燃料等填充许多不同的可能车辆属性。

为每组属性创建一个表是否有意义,或者我应该将它们全部放在一个表中,然后将每一列命名为属性是什么。然后我将可能的选择列为行。

对数据库设计有点陌生,想听听一些意见。提前谢谢你!

【问题讨论】:

    标签: mysql database database-design


    【解决方案1】:

    您的问题的答案取决于每辆车是否可以附有多个“颜色”或“燃料”。

    如果是我,我会让基表看起来像这样:

    表格:车辆 - 列:车辆 ID、名称等。

    表格:颜色 - 列:colorID、名称、rgbValue

    表:燃料 - 列:fuelID、名称等

    如果每辆车只能有一种颜色和一种燃料,则将 Vehicle 表更改为:

    表格:车辆 - 列:车辆 ID、名称、颜色 ID、燃料 ID 等。

    如果每辆车可以有 4 种颜色和 3 种燃料等。然后不理会 Vehicle 表,并创建类似于这些的“关系”表:

    表格:vehicle_has_color - 列:车辆ID,颜色ID

    表格:vehicle_has_fuel - 列:车辆ID、燃料ID

    希望这能让您了解理想的数据库设计,并为您提供一个良好的起点。请记住,如果您只有 3 种不同的颜色并且它们不会改变,那么直接在 Vehicle 表中插入颜色名称并在 PHP 或 HTML 代码中处理颜色的选择可能会更简单.

    【讨论】:

    • 是的,每辆车只能选择一个属性。
    • 好的,我将为每个属性制作一个非常小的表格。我应该为每个选项包含一个主键和外键吗?例如:Table -> att_color: index, fkey, colorname 谢谢!
    • 我会将外键放在车辆表中。将属性表视为可供选择的列表,然后在主车辆表上使用外键指向列表并说“我想要那个”。
    • 关于关系的最简洁的解释。在阅读了多年关于表格和关系设计的令人困惑的文章之后,我需要一个像你这样的抽象解释。非常感谢@GarrettGriffin
    【解决方案2】:

    如果每个实体都有一组固定的属性,请将其放在一个表中。 当您有不同的属性时,将它们放在具有此结构的单独表中:

    TABLE (
      Primary Key ID
      Foreign Key Ref
      AttributeName
      AttributeValue
    )
    

    【讨论】:

    • 嗯,以后属性可能会改变,但是会很少。
    【解决方案3】:

    如果您的数据库需要显示历史变化,那么我会采用建议 2(将它们全部放在一张表中),但如果您只想通过颜色、传输、燃料等来表示车辆,那么将属性在单独的表中。因为那时您与 ID 号有关系,如果某个值需要更改,您可以在属性表中进行更改,并且它会随处更新。一致性也更好,例如“29 mpg Hwy”与“29mpg Hwy”。

    【讨论】:

    • 不,选项的历史更改并不重要。我同意一致性,这就是我从数据库中进行操作的原因。
    【解决方案4】:

    看看这些 SO 示例:onetwothree

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2022-08-03
      • 2020-01-27
      • 2015-06-26
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多