数据库设计:与汽车模型或装饰有关?

时间:2011-07-11 22:00:41

标签: mysql database data-modeling database-design

我正在重新询问之前在SO中删除的问题,因为它不是“编程问题”。希望这比上一篇文章更“编程”。

首先,一些定义:

  • 模型 - 2011 Nissan Sentra
  • 修剪 - 2011 Nissan Sentra LX

通常,特定车辆会有一个列表,例如,可用的颜色设备选项。因此2011 Nissan Sentra可能有以下颜色:

  • 黑色
  • 红色

然后,制造商可能已经制作了一种仅适用于2011 Nissan Sentra LX装饰的特殊颜色:

  • 带黄色波尔卡圆点的粉红色

如果我正在建立一个我希望捕获此信息的汽车网站,我应该做以下哪些事情:

  • 将颜色与模型相关联?
  • 将颜色与修剪相关联?
  • 将颜色与模型相关联并修剪?

我的直觉是将它与模型相关联就足够了。与修剪相关联意味着重复(例如2011 Nissan Sentra LX2011 Nissan Sentre SE都将“黑色”作为颜色)。试图将颜色与模型和修剪相关联可能会有点过分。

建议?

5 个答案:

答案 0 :(得分:2)

如果同一型号的不同裁剪可能有不同的颜色选项(如您暗示的那样),那么您应该将颜色与裁剪相关联,否则您将获得不正确/不兼容的信息。 aka如果“粉红色与黄色波尔卡圆点”与“2011 Nissan Sentra”模型相关联,那么您将错误地将其显示为除LX之外的修剪选项。

答案 1 :(得分:2)

如果有特殊情况,正如您所说,制造商已经制作了特殊颜色的特殊颜色,例如 “Pink with Yellow Polka Dots” “2011日产Sentra LX装饰”

您希望存储这些特殊情况,您应该选择第二个选项。

所以,你的关系将是:

1制造商生产许多型号

1个模型有很多修剪

1个装饰可以有很多颜色,对于1种颜色,许多装饰都有它 (所以你需要一个这种关系的关联表)

Manufacturer
    1\
      \
       \N
     Model
       1\
         \
          \N
         Trim          Colour
           1\           1/
             \          /
              \N       /M
              TrimColour

有关颜色的其他信息:

一个GeneralColour可以被不同的制造商命名为多种颜色 一个制造商可以用各种颜色(名称)“给”一个GeneralColour“施洗”

        Manufacturer         
         1/      1\           
         /         \         
        /N          \        
     Model           \     GeneralColour
       1\             \       1/
         \             \      /
          \N            \N   /M
         Trim           Colour
           1\           1/
             \          /
              \N       /M
              TrimColour

更清楚地思考,不需要额外的Manufacturer-Colour关系:

Manufacturer
    1\
      \
       \N               
     Model                 GeneralColour
       1\                     1/
         \                    /
          \N                 /M
         Trim           Colour
           1\           1/
             \          /
              \N       /M
              TrimColour

答案 2 :(得分:1)

你错过了修剪与模型的关联;没有它,我不知道你能真正完成你的协会。

答案 3 :(得分:1)

根据我的评论要求......

我只是让'color'成为一个自由格式的文本字段,可能还有预先填充的下拉菜单,显示数据库中当前流行的颜色。它的主要优点是它使您的数据库架构更加简单,并使您的汽车模型/颜色研究人员不会疯狂。但它也允许制造商根本无法提供的定制油漆作业。

manufacturers
-------------
id

models
------
id
manufacturer (FK to manufacturers.id)
model_name   (VARCHAR)

trims
-----
id
model  (FK to models.id)

cars
-------
id
trim   (FK to trims.id)
year   INT
color  VARCHAR

答案 4 :(得分:1)

  

如果我正在建立一个汽车网站,我想抓住这个   信息

然后你必须建立一个捕获该信息的逻辑模型。 (这有多难?)这意味着你必须对这些事实进行建模。

  • 某些颜色适用于模型。
  • 某些颜色适用于装饰包。
  • (我敢打赌,我可以找到适合某些颜色的制造商 制作。)
  • 我敢打赌,所有这些颜色也与今年有关。)

捕获所有已知要求是一回事。实施它们是另一回事。一旦你理解了颜色的实际效果,

  • 你可以随意忽略你想要的任何现实行为。

但是,正如Dr. Phil经常说的那样,

  • “当你选择行为时,你会选择后果。”

简化已知要求 - 忽略某些颜色仅适用于一个或两个修剪包的事实 - 意味着您将数据库设计为故意允许无效数据。你的数据库最终可能会得到关于“Pink with Yellow Polka Dots”Nissan Altima或“Copper”2002 Nissan Sentra的信息。 (我认为日产在2004年推出了铜。)

所以这是真正的问题。

  • 您能容忍多少糟糕的数据?

这总是取决于应用程序。收集有关汽车颜色的信息的社交媒体网站将比出售补漆的公司更容忍不可能的颜色选择。