表可以与其他表相关时的数据库结构 - 但应该只与一个表相关

时间:2017-03-09 15:42:43

标签: mysql sql-server

我的车辆表中包含一些可以同时考虑公共汽车和汽车的信息。但我还需要一辆公共汽车或汽车的具体数据。

这样做是否正确:

Table Vehicle
Bus_id (ref key)
Car_id (ref key)

Table Bus

Table Car

然后车辆可以同时参考汽车和公共汽车,它不应该。

或者像这样:

Table Vehicle

Table Bus
Vehicle_id (ref key)

Table Car
Vehicle_id (ref key)

但同样,公共汽车和汽车可以同时参考相同的车辆信息。

如果有车辆信息,如果它有特定数据,那么只能与公交车或汽车相关联?

1 个答案:

答案 0 :(得分:2)

如果您希望SQL服务器帮助强制执行此操作,您可以使用指向总线或汽车的车辆表,如第一个示例中所示,并使用检查约束和筛选索引来实现此目的:

CREATE TABLE VEHICLE (
   [VEHICLE_RECID] integer IDENTITY PRIMARY KEY CLUSTERED,
   [BusID] integer NULL REFERENCES [BUS] ([BUS_RECID]),
   [CarID] integer NULL REFERENCES [CAR] ([CAR_RECID]),
   CONSTRAINT [CK_VEHICLE_OnlyCarOrBus] CHECK (
      ([BusID] IS NULL AND [CarID] IS NOT NULL) 
      OR ([BusID] IS NOT NULL AND [CarID] IS NULL))
));

CREATE UNIQUE INDEX [BusID] ON VEHICLE ([BusID]) WHERE [BusID] IS NOT NULL
CREATE UNIQUE INDEX [CarID] ON VEHICLE ([CarID]) WHERE [CarID] IS NOT NULL
相关问题