首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在外键列上插入问题

在外键列上插入问题
EN

Stack Overflow用户
提问于 2014-04-24 09:40:24
回答 4查看 88关注 0票数 0

我目前正在测试某些内容,并且在试图在表中插入一些值时遇到了一个问题。

我有3张表如下:设备,户外,室内。

代码语言:javascript
复制
**outdoor**             --->          **devices**             <----- **indoor**

net_id(pk)                    net_id(fk)               net_id(pk)

我想建立一种关系,通过拥有室内或室外的net_id,设备既可以是室外的,也可以是室内的。因此,我做了以下工作:

代码语言:javascript
复制
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”,它将不允许我这样做。因此,我希望能够在设备表中插入,如前所述。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-24 10:25:38

维护设备和进出设备之间的关系表。

解决方案1

用于Device_Relation

代码语言:javascript
复制
+------------------+--------------+
| 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

代码语言:javascript
复制
+------------------+--------------+
| Of Table         | Column       |
+------------------+--------------+
| Indoor           | net_id       | -- <--- fk
| Outdoor          | net_id       | -- <--- fk
| in_out_id        | in_out_id    | -- <--- pk
+------------------+--------------+

用于设备的

代码语言:javascript
复制
+------------------+--------------+
| Of Table         | Column       |
+------------------+--------------+
| Devices          | device_id    | -- <--- pk
| In_Out_Relation  | io.in_out_id | -- <--- fk
+------------------+--------------+
票数 0
EN

Stack Overflow用户

发布于 2014-04-24 09:43:34

在桌面设备中使用两列,一列用于室内,另一列用于室外,否则您无法区分哪些是室内的,哪些是室外的,因为它们可能具有您所描述的相同的标识。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-04-24 09:48:46

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

您要做的是对关系数据库上的继承进行建模,当选择方法时,这是一个被广泛研究的经典设计问题。在您的示例中,device是父类,indooroutdoor是子类。

如前所述,正如我从引用的链接中引用的那样,您需要从其中一个方法中进行选择:

  • 单表继承
  • 类表继承
  • 混凝土表继承
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23265241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档