【发布时间】:2013-06-03 19:07:23
【问题描述】:
假设我拥有一家销售汽车和摩托车的公司。我想跟踪每个数据。我公司为每辆车提供免费保修,但我们甚至不为摩托车提供保修。最初,我以为我应该有两张表格——一张“车辆”表格和一张“保修”表格,就像这样
Vehicles Warranties
VehicleID, SalePrice, VehicleType, WarrantyID WarrantyID, EffDate, ExpDate
其中 VehicleType 是“汽车”或“摩托车”。我的缺点是,在 Vehicles 表中,每辆摩托车的“WarrantyID”都有一个空值。这会被认为是不好的做法吗?
我考虑过的另一种方法是使用三个表格,例如
Cars Motorcycles
VehicleID, SalePrice, WarrantyID Vehicle ID, SalePrice
Warranties
WarrantyID, EffDate, ExpDate
我的缺点是我将摩托车和汽车分成两张几乎相同的桌子。 (实际上,他们会有更多的字段,如购买成本、里程等)。唯一的区别是所有汽车都有保修,没有摩托车有保修。
(注意:我还假设 2 或 3 辆车可以共享一个保修。)
建立这个数据库的正确方法是什么?
【问题讨论】:
-
我认为第一种方法很好。如果车辆没有,只需将warrantyid 留空即可。您没有违反任何规范化规则。
-
你为什么要假设不止一辆汽车可以有相同的保修?
-
您说:“我还假设 2 或 3 辆车可以共享一个保修。”。反之亦然吗?一辆车可以有多个保修吗?
-
我真的在为工人补偿提供者设计一个数据库。我们有一个复杂的免赔额和保证成本政策系统。这很难解释,所以我试图提出一个更有意义的类比。
-
一辆车不能有多个保修。
标签: sql database database-design