【发布时间】:2017-04-12 11:27:40
【问题描述】:
我实际上想在 Oracle 中的 ERD 中的两个表之间实现强制性的一对一关系。这两个表是州长和州。一个州长只能管理一个州,一个州必须有一个且只有一个州长。我想在 Oracle 中实现它。我写的查询如下
create table gov
(gid number(3) ,name varchar2(100),
constraint gov_pk primary key (gid)
);
create table state
(
sid number(3) ,
name varchar2(100),
gid number(3),
constraint state_pk primary key (sid),
constraint gov_state_fk foreign key (gid) references gov(gid),
constraint state_uk unique(gid,name)
);
但这似乎不起作用。我找不到任何替代方法。请帮我解决一下这个。我会感谢你的。请让我知道为什么无法建立一对一的关系。
【问题讨论】:
-
您可能希望状态表中的 gid 上有一个唯一键
-
模型没有多大意义。您可能有一个“状态”表,并且可能是固定的(在大多数情况下,至少在一定时间内)。您还想要什么 - 一张州长表,其中包含出生日期和姓名等个人数据?如果一个人不再是州长怎么办,你会从表中删除他们吗?如果不是,那么这不是一对一的关系 - 一方面你可能有“零或一”。如果您确实需要始终保持一对一,为什么需要两张表?在 State 表中写入所有的Governor 属性。
-
感谢@mathguy 的回复。它确实帮助消除了我的很多困惑。但是我仍然想问,如果我从表中删除一个管理者,为什么它不是一对一的关系?
-
如果您在没有连任的情况下从表格中删除州长,那么这种关系实际上是一对一的 - 但在这种情况下,您不清楚为什么需要两个单独的表格.更有可能(更常见),您将有一个“政治家”或“潜在州长”表,其中一个人可能是一个州的州长或根本不是州长(此表中的“州”列,对于这个政治家,可能为 NULL)。当他们不再是州长时,您不会将“政治家”从桌面上删除。这是有道理的,但这种关系是一对(零或一)的。这是常见的安排。
标签: database oracle database-design data-modeling