交叉引用的双外键约束

时间:2017-02-19 22:40:20

标签: database foreign-keys

假设我有一个光表 fixture_models

id  | name
--- | -----------
1   | Wall sconce
2   | Ceiling fan

另一个表列出了夹具模型所具有的套接字,称为 fixture_model_sockets

id  | fixture_model_id | socket_type
--- | ---------------- | -----------
1   | 1                | GU-24
2   | 2                | E26
3   | 2                | E26
4   | 2                | E26

壁式壁灯有一个GU-24插座,吊扇有三个E26插座。该表在fixture_model_id上有一个外键约束。

还有灯具

的表格
id  | fixture_model_id | location
--- | ---------------- | ----------
1   | 1                | East Wall
2   | 1                | West Wall
3   | 2                | Ceiling

有两个壁灯,东西墙各一个,还有一个吊扇。该表还对fixture_model_id有一个外键约束。

安装灯泡时,应将其记录在灯泡表中:

id  | fixture_id | fixture_model_socket_id | type | power
--- | ---------- | ----------------------- | ---- | -----
1   | 1          | 1                       | Inc. | 75
2   | 2          | 1                       | Inc. | 75
3   | 3          | 2                       | LED  | 13
4   | 3          | 3                       | LED  | 13
5   | 3          | 4                       | LED  | 13

该表有两个外键约束,一个在fixture_id上​​,另一个在fixture_model_socket_id表上。此外,为了强制执行一次只能在任何一个插槽中安装一个灯泡的事实,它对fixture_id和fixture_model_socket_id具有唯一性约束。

我的问题:如何强制灯泡只能安装在与灯具型号相关的插座中?也就是说,灯泡的fixture_id = 1(属于墙壁壁灯)和fixture_model_socket_id = 2(属于吊扇)是无效的。这是我的架构的问题,还是应该在应用程序级别实施的东西?

0 个答案:

没有答案