我被要求描述这个数据结构的错误,以及我将如何改进它。
这是数据结构:
这是我到目前为止所做的:
只有当汽车在陈列室中时才设置汽车价格,将汽车价格放在汽车表中会更有意义
将NULL数据存储在Car Table中是没有意义的,最好有一个类似于此的布局:
需要有一个数量标题来显示有多少特定车辆在陈列室中,因为有些陈列室有多辆相同的车
我制作的新表格仍然有重复数据,我依旧记得在绘制数据结构时是不是没有,所以我想我需要制作第3张表格?我真的不确定......
我只需要帮助解决当前数据结构的问题,如果有任何方法可以改进它,那么任何帮助都会受到赞赏。
答案 0 :(得分:8)
一个问题是Car表存储了两个不同的东西 - 它存储make,它存储模型。
所以你应该把它分开,比如:
制作:列makename,makecode
模型:列makecode(make的外键),modelname,modelcode
现在陈列室表只与模型有关,所以它不能错误地引用制作。
由于一个模型可以有许多与之相关的陈列室表行,因此无法有意义地合并这两个表,因此请将它们分开并从那里开始。
答案 1 :(得分:4)
看起来Car结构存储了汽车品牌和汽车模型。这应该至少得到一些警报。汽车制造像福特,大众和标致都有自己的MakeCode
。像嘉年华和高尔夫这样的车型拥有自己的ModelCode
。
在原始结构中,汽车模型通过ParentCarId
和重复他们的MakeCode
来引用他们的作品。 Car make不是特定型号,并为ModelCode
和ParentCarId
分配了空值。
ParentCarId
没有任何意义,汽车成为另一个汽车的孩子意味着什么?相反,汽车属于一个品牌,它是另一个表格所代表的另一个实体。此外,汽车不应该有MakeCode
,因为这是他们所属的品牌属性。显然,品牌和模型非常独特,应该在不同的表格中表示。
将该表拆分为两个是有意义的:一个用于制作,一个用于模型。制作将有ID
,Name
和MakeCode
。模型将包含ID
,Name
,ModelCode
和MakeId
(ID
Make
的外键。
答案 2 :(得分:2)
你是正确的,重复数据是禁止的。
我会将“陈列室”改为“模型”,因为可以有各种类型的子模型。 IE高尔夫TDI对比GTI等。 ......并且基本价格(MSRP)将适用于该模型。显示房间状态对于定价没有意义 - 有许多广告,但没有在展厅或地段。
我认为拥有NULLable列没有任何问题,如果这是数据支持的话。两者都很好,你可以在获得大量数据后进行基准测试,看看哪种方式最适合你。但是之后,而不是之前进行优化。