这个数据结构有什么问题?

时间:2013-02-10 22:28:34

标签: sql database-design data-modeling

我被要求描述这个数据结构的错误,以及我将如何改进它。

这是数据结构:

Image

这是我到目前为止所做的:

  • 只有当汽车在陈列室中时才设置汽车价格,将汽车价格放在汽车表中会更有意义

  • 将NULL数据存储在Car Table中是没有意义的,最好有一个类似于此的布局:

    Car table

  • 需要有一个数量标题来显示有多少特定车辆在陈列室中,因为有些陈列室有多辆相同的车

我制作的新表格仍然有重复数据,我依旧记得在绘制数据结构时是不是没有,所以我想我需要制作第3张表格?我真的不确定......

我只需要帮助解决当前数据结构的问题,如果有任何方法可以改进它,那么任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:8)

一个问题是Car表存储了两个不同的东西 - 它存储make,它存储模型。

所以你应该把它分开,比如:

制作:列makename,makecode

模型:列makecode(make的外键),modelname,modelcode

现在陈列室表只与模型有关,所以它不能错误地引用制作。

由于一个模型可以有许多与之相关的陈列室表行,因此无法有意义地合并这两个表,因此请将它们分开并从那里开始。

答案 1 :(得分:4)

看起来Car结构存储了汽车品牌和汽车模型。这应该至少得到一些警报。汽车制造像福特,大众和标致都有自己的MakeCode。像嘉年华和高尔夫这样的车型拥有自己的ModelCode

在原始结构中,汽车模型通过ParentCarId重复他们的MakeCode来引用他们的作品。 Car make不是特定型号,并为ModelCodeParentCarId分配了空值。

ParentCarId没有任何意义,汽车成为另一个汽车的孩子意味着什么?相反,汽车属于一个品牌,它是另一个表格所代表的另一个实体。此外,汽车不应该有MakeCode,因为这是他们所属的品牌属性。显然,品牌和模型非常独特,应该在不同的表格中表示。

将该表拆分为两个是有意义的:一个用于制作,一个用于模型。制作将有IDNameMakeCode。模型将包含IDNameModelCodeMakeIdID Make的外键。

答案 2 :(得分:2)

你是正确的,重复数据是禁止的。

我会将“陈列室”改为“模型”,因为可以有各种类型的子模型。 IE高尔夫TDI对比GTI等。 ......并且基本价格(MSRP)将适用于该模型。显示房间状态对于定价没有意义 - 有许多广告,但没有在展厅或地段。

我认为拥有NULLable列没有任何问题,如果这是数据支持的话。两者都很好,你可以在获得大量数据后进行基准测试,看看哪种方式最适合你。但是之后,而不是之前进行优化。