Mysql 数据库设计:与汽车相关';是模型还是装饰?
我在问一个以前在这里被删除的问题,因为它不是一个“编程问题”。希望这篇文章比上一篇文章更“编程” 首先,有几个定义:Mysql 数据库设计:与汽车相关';是模型还是装饰?,mysql,database,data-modeling,database-design,Mysql,Database,Data Modeling,Database Design,我在问一个以前在这里被删除的问题,因为它不是一个“编程问题”。希望这篇文章比上一篇文章更“编程” 首先,有几个定义: 车型-2011日产Sentra 内饰-2011日产Sentra LX 通常,一辆特定的汽车会有一个列表,比如说,可用的颜色或设备选项。因此,2011日产Sentra可能提供以下颜色: 黑色的 白色的 红色的 然后,制造商可能只为2011日产Sentra LX饰件提供了一种特殊颜色: 粉红色带黄色圆点 如果我正在建立一个汽车网站,我想在其中获取这些信息,我应该做以下哪项
- 车型-
2011日产Sentra
- 内饰-
2011日产Sentra LX
2011日产Sentra
可能提供以下颜色:
- 黑色的
- 白色的
- 红色的
2011日产Sentra LX
饰件提供了一种特殊颜色:
- 粉红色带黄色圆点
- 将颜色与模型关联
- 将颜色与修剪关联
- 是否将颜色与模型和修剪关联
建议?您缺少修剪与模型的关联;如果没有这一点,我不知道您是否能够真正正确地完成关联。如果同一型号的不同饰件可能有不同的颜色选项(如您所暗示的),那么您应该将颜色与饰件关联,否则您将有不正确/不兼容的信息。aka如果“粉色带黄色圆点”与“2011日产Sentra”车型关联,则您将错误地将其显示为除LX以外的饰件选项。如果有特殊情况,如您所说,制造商仅为特定饰件提供了特殊颜色,如“粉色带黄色圆点”用于“2011日产Sentra LX内饰” 如果要存储这些特殊情况,应选择第二个选项 因此,您的关系将是: 1.制造商生产多种型号 1型号有许多饰件 1个饰件可以有多种颜色,1个颜色的饰件可以有多种颜色
(因此,您需要一个用于此关系的关联表) 有关颜色的其他信息: 一种通用颜色可以由不同的制造商和制造商命名为多种颜色 一个制造商可以用不同的颜色(名称)来“洗礼”一般颜色
更清楚地考虑,不需要额外的
制造商颜色关系:
Manufacturer
1\
\
\N
Model GeneralColour
1\ 1/
\ /
\N /M
Trim Colour
1\ 1/
\ /
\N /M
TrimColour
应我对我的评论的要求
我只想让“颜色”成为一个自由格式的文本字段,可能带有一个预先填充的下拉列表,显示数据库中当前流行的颜色。它的主要优点是,它使您的DB模式更加简单,并使您的车型/颜色研究人员不会发疯。但它也允许制造商根本无法提供的定制喷漆作业
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
如果我正在建立一个汽车网站,我想在其中捕捉这一点
信息
然后,您必须构建一个逻辑模型来捕获这些信息。(这有多难?)这意味着你必须对这些事实进行建模
- 有些颜色适用于模型
- 一些颜色适用于装饰包
- (我敢打赌我能找到一家制造商,在那里一些颜色适用于
品牌。)
- (我敢打赌,所有这些颜色都与年份有关。)
捕获所有已知需求是一回事。实施它们是另一个问题。一旦你了解了颜色是如何工作的
- 你可以自由地忽略任何你想要的真实行为
但是,正如人们常说的那样
- “当你选择行为时,你选择后果。”
简化已知需求——忽略某些颜色仅适用于一个或两个修剪包的事实——意味着您将数据库设计为故意允许无效数据。您的数据库最终可能会显示“粉色加黄色圆点”日产Altima或“铜色”日产Sentra的信息。(我认为日产在2004年引入了铜。)
这才是真正的问题
- 您能容忍多少不良数据?
这始终取决于应用程序。与销售修补漆的公司相比,收集汽车颜色信息的社交媒体网站更能容忍不可能的颜色选择。我会将颜色设置为自由格式字段,并在UI中预先填充常见选择。我想大多数汽车网站都是这样做的。它的主要优点是,它使您的DB模式更加简单,并使您的车型/颜色研究人员不会发疯。但它也允许制造商根本不提供的自定义喷漆作业。您可以推荐一个模型吗?模型可以有0个或更多修剪。这个部分已经建模了。@StackOverflowNewbie:你完全把这个关系从你的问题中漏掉了,这对答案产生了很大的影响。我认为99%的情况下,颜色与模型有关。在尝试捕捉特定饰件的颜色时,将“粉色带黄色圆点”显示给非2011日产Sentra LX的饰件是否很糟糕?@StackOverflowNewbie:如果您不介意使用不精确的模型,请继续选择第一个选项(将颜色与模型关联)。如果您只有一个显示信息的站点/数据库,则差别不大。但是,如果客户可以从您的网站/数据库订购汽车,那么他可能会订购您无法提供的东西。ypercube-如果我不希望用户潜在订购无法提供的东西(例如。
Manufacturer
1\
\
\N
Model GeneralColour
1\ 1/
\ /
\N /M
Trim Colour
1\ 1/
\ /
\N /M
TrimColour
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