我目前正在测试某些内容,并且在试图在表中插入一些值时遇到了一个问题。
我有3张表如下:设备,户外,室内。
**outdoor** ---> **devices** <----- **indoor**
net_id(pk) net_id(fk) net_id(pk)我想建立一种关系,通过拥有室内或室外的net_id,设备既可以是室外的,也可以是室内的。因此,我做了以下工作:
ALTER TABLE devices
ADD CONSTRAINT o_relationship
FOREIGN KEY (net_id)
REFERENCES outdoor (net_id);
ALTER TABLE devices
ADD CONSTRAINT i_relationship
FOREIGN KEY (net_id)
REFERENCES indoor (net_id);现在我的问题是,当我试图在设备中插入一个值时,除非net_id值属于室内和室外表,否则我无法这样做。这意味着,假设"net_001“存在于室内和室外的桌子上,它允许我在设备中插入"net_001”,但是如果“net_001”存在于室内,而"net_002“存在于室外,那么假设我想在设备中添加”net_001“或"net_002”,它将不允许我这样做。因此,我希望能够在设备表中插入,如前所述。
希望我能清楚地解释这个问题。提前谢谢你!
发布于 2014-04-24 10:25:38
维护设备和进出设备之间的关系表。
解决方案1:
用于Device_Relation表
+------------------+--------------+
| Of Table | Column |
+------------------+--------------+
| Indoor | net_id | -- <--- pk
| Outdoor | net_id | -- <--- pk
| Devices | device_id | -- <--- pk
| Device_relations | d.device_id, | -- <--- pk
| | od.net_id, | -- <--- fk
| | id.net_id | -- <--- fk
+------------------+--------------+解决方案2:
用于In_Out_Relation表
+------------------+--------------+
| Of Table | Column |
+------------------+--------------+
| Indoor | net_id | -- <--- fk
| Outdoor | net_id | -- <--- fk
| in_out_id | in_out_id | -- <--- pk
+------------------+--------------+用于设备的表
+------------------+--------------+
| Of Table | Column |
+------------------+--------------+
| Devices | device_id | -- <--- pk
| In_Out_Relation | io.in_out_id | -- <--- fk
+------------------+--------------+发布于 2014-04-24 09:43:34
在桌面设备中使用两列,一列用于室内,另一列用于室外,否则您无法区分哪些是室内的,哪些是室外的,因为它们可能具有您所描述的相同的标识。
ALTER TABLE devices
ADD CONSTRAINT o_relationship
FOREIGN KEY (net_indoor_id)
REFERENCES indoor (net_id);
ALTER TABLE devices
ADD CONSTRAINT o_relationship
FOREIGN KEY (net_outdoor_id)
REFERENCES outdoor (net_id);发布于 2014-04-24 09:48:46
当然,根据您告诉引擎的内容,ID必须属于两个表。
您要做的是对关系数据库上的继承进行建模,当选择方法时,这是一个被广泛研究的经典设计问题。在您的示例中,device是父类,indoor和outdoor是子类。
如前所述,正如我从引用的链接中引用的那样,您需要从其中一个方法中进行选择:
https://stackoverflow.com/questions/23265241
复制相似问题