sql完整性1-1或1-0

时间:2019-01-07 20:20:29

标签: sql

我在考试中有一个问题,我不知道该怎么解决。

这是问题:

如何保持2个表之间的1-1或1-0关系的完整性?

现在,主键和外键将不起作用,因为这样您就可以建立1-m关系了。也许您可以通过某种方式使用唯一键或替代键?

我们需要给出create table表达式,并解释为什么它会起作用。

2 个答案:

答案 0 :(得分:3)

这是PostgreSQL中1-1关系的示例。它需要具有可延迟约束的 standard SQL功能:

create table employee (
  id int primary key not null,
  name varchar(20),
  desk_id int not null,

  constraint uq1 unique (desk_id),
  constraint fk1 foreign key (desk_id) references desk (id)
    deferrable initially immediate
);

create table desk (
  id int primary key not null,
  desk_code varchar(20).
  employee_id int not null,

  constraint uq2 unique (employee_id),
  constraint fk2 foreign key (employee_id) references employee (id)
    deferrable initially immediate
);

简而言之:employee的每一行都指向一个desk。每个desk都指向一个employee

据我所知,可延迟约束仅在PostgreSQL和Oracle中实现。

答案 1 :(得分:0)

我将以oracle为例

这里是1:1关系示例

df.groupby(level=[1,2], axis=1).sum()

这里是1:0..1的关系(又称射精)

create table state
(
    sid number(3) ,
    name varchar2(100),
    gid number(3) not null,
    constraint state_pk primary key (sid),
    constraint gov_state_fk foreign key (gid) references gov(gid)
);

基本上是不同的,

  • 在1:0关系中,id可以为空
  • 在1:0..1关系中gid不能为空

编辑:我还添加了Unicity来保留1:0..1和1:1关系。