在外键列上插入问题

时间:2014-04-24 09:40:25

标签: mysql sql database foreign-keys sql-insert

我目前正在测试某些内容,并在尝试在表格中插入某些值时遇到问题。

我有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_002”,那么我想要添加“net_001”或“ net_002“在设备中它不允许我这样做。因此,我希望能够在设备表中插入,如上所述。

希望我能够清楚地解释这个问题。提前谢谢!

4 个答案:

答案 0 :(得分:1)

在桌面设备中使用两列,一个用于室内,一个用于室外,否则无法区分室内和室外,因为它们可能与您描述的ID相同。

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);

答案 1 :(得分:0)

当然根据你告诉引擎的内容,ID必须属于两个表。

您正在尝试做的是在关系数据库上建模继承,这是一个被广泛研究的,并且在选择方法时是一个经典的设计问题。 在您的情况下,device是父类,indooroutdoor是子类。

正如前面提到的here,您需要从其中一种方法中进行选择,正如我从引用的链接中引用的那样:

  

答案 2 :(得分:0)

但您可以采用不同的方法,使devices包含主键,indooroutdoor引用它...

答案 3 :(得分:0)

维护设备之间的关系表和&amp;出设备。

解决方案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
+------------------+--------------+
相关问题