我的车辆表中包含一些可以同时考虑公共汽车和汽车的信息。但我还需要一辆公共汽车或汽车的具体数据。
这样做是否正确:
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)
但同样,公共汽车和汽车可以同时参考相同的车辆信息。
如果有车辆信息,如果它有特定数据,那么只能与公交车或汽车相关联?
答案 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