我有一个名为VEHICLE
的表的PostgreSQL数据库,其中我保存了一些关于轮胎的信息,另一个名为VEHICLE_TIRE
的表,并且是放置所有车辆信息的地方。
我还需要绘制哪些轮胎与哪种车辆以及在什么位置相关联。
为了覆盖那个场景,我有一个名为ID | GARAGE_ID
的表。
这是表格的结构(简化为仅涵盖我的问题):
TIRE:
ID | PLATE_NUMBER | GARAGE_ID
车辆:
VEHICLE_ID | TIRE_ID | TIRE_POSITION
VEHICLE_TIRE
GARAGE_ID
每个客户都有多个停放车辆的车库。他们需要知道他们的轮胎和车辆在哪个车库。这由VEHICLE_TIRE
列涵盖。轮胎不一定与车辆相关联(VEHICLE
中没有该轮胎的入口),因为它可能是特定车库的轮胎。
在任何时候,客户都可以在车库中将车辆和轮胎转移到系统中。当然,如果他转移车辆,他的所有相关轮胎也必须转移。客户还能够将轮胎与车辆分离并仅转移该特定轮胎。
我的问题是,如何在数据库级别确保与车辆相关的轮胎始终位于同一车库并防止轮胎位于一个车库并且车辆位于另一个车库(不同车库)中的状态
我遇到的唯一解决方案是在两个表TIRE
和VEHICLE
中使用触发器,以确保在每次UPDATE中都不会发生这种不一致。
要考虑的另一件事是TIRE
和UPDATE VEHICLE_TIRE SET VEHICLE_ID = 2 WHERE VEHICLE_ID = 1
表是为所有客户端共享的大表,并且经常更新,所以我担心我的解决方案会增加的开销。
我可以使用其他方法达到同样的目的吗?
编辑:
SQL Fiddle使用唯一约束的解决方案。
此类更新被屏蔽:function getUserDetail($user_id)
{
$this->db->select('*');
$this->db->from('tbl_loggedin_user');
$this->db->where('user_id', $user_id);
return $this->db->get()->result_array();
}
答案 0 :(得分:1)
我会将garage_id
添加到vehicle_tire
,将garage_id
添加到tire
和vehicle
的主键(或添加新的唯一约束)。< / p>
然后您可以将garage_id
添加到外键,您的问题应该得到解决。