我有一个PostgreSQL数据库,有一个名为
TIRE
在这里我保存了一些关于轮胎的信息,另一个名为
VEHICLE
是放置所有车辆信息的地方。
我还需要绘制什么轮胎与什么车辆相关,在什么位置。
我有一张桌子叫
VEHICLE_TIRE
.
以下是表格的结构(简化为仅涵盖我的问题):
轮胎:
ID | GARAGE_ID
车辆:
ID | PLATE_NUMBER | GARAGE_ID
车辆轮胎
VEHICLE_ID | TIRE_ID | TIRE_POSITION
每一位客户都有多个车库,他的车辆就在那里。他们需要知道他们的轮胎和车辆在哪个车库。这是由
GARAGE_ID
列。轮胎不必与车辆相关(在
车辆轮胎
)因为它可能是特别车库的备胎。
在任何时候,客户都可以在系统中的车库之间转移车辆和轮胎。当然,如果他转让一辆车,他所有相关的轮胎也必须转让。客户还可以将轮胎从车辆上拆下,仅传送此特定轮胎。
我的问题是,我如何确保,在数据库级别,轮胎与车辆总是在同一个车库,并防止一个轮胎在一个车库和车辆在另一个车库(不同的车库ID)的状态。
唯一的解决方案是在两个表中都使用触发器,
车辆
和
轮胎
,以确保在每次更新中不会发生这种不一致。
另一个需要考虑的是
车辆
和
轮胎
表是为所有客户机共享的巨大表,并且更新频繁,所以我担心我的解决方案会增加的开销。
我能用另一种方法达到同样的目的吗?
编辑:
SQL Fiddle
使用唯一约束的解决方案。
这样的更新被阻止:
UPDATE VEHICLE_TIRE SET VEHICLE_ID = 2 WHERE VEHICLE_ID = 1