Ben*_*Ben 2 sql database database-design
假设我拥有一家销售汽车和摩托车的公司.我想跟踪每个数据.我公司为每辆车提供免费保修,但我们甚至不提供摩托车保修.最初,我以为我有两张桌子 - 一张"车辆"表和一张"保修"表,就像这样
Vehicles Warranties
VehicleID, SalePrice, VehicleType, WarrantyID WarrantyID, EffDate, ExpDate
Run Code Online (Sandbox Code Playgroud)
其中VehicleType是"汽车"或"摩托车".我的缺点是,在车辆表中,每辆摩托车的"WarrantyID"都具有空值.这会被视为不良做法吗?
我考虑的另一种方法是使用三个表
Cars Motorcycles
VehicleID, SalePrice, WarrantyID Vehicle ID, SalePrice
Warranties
WarrantyID, EffDate, ExpDate
Run Code Online (Sandbox Code Playgroud)
我的缺点是我将摩托车和汽车分成两张几乎相同的桌子.(实际上,他们会有更多的领域,如购买成本,里程等).唯一的区别是所有汽车都有保修,没有摩托车有保修.
(注意:我也假设2或3辆汽车可以共享一个保修.)
设置此数据库的正确方法是什么?
听起来你可以考虑连接表.
Vehicle VehicleWarranty Warranty
--------- --------------- ----------
VehicleId VehicleId WarrantyId
SalePrice WarrantyId EffectiveDate
Run Code Online (Sandbox Code Playgroud)
这样,您的Vehicle表中没有Warranty ID,因此您不必处理空值.如果您对车辆有保修,则只有保修表(和VehicleWarranty表)中的条目.此外,连接表允许您将相同的保修附加到多个车辆,或同一车辆到多个保修.