引用两个外键的属性

ojsjcaue  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(293)

我在sql中创建了这样一个表

create table  WEATHER_STATION.Humidade 
(
    valor_observado int ,
    data_observacao date ,
    unidade_medida varchar(15),
    id_observacao int identity(1,1) primary key,
    estacao varchar(30) 
    foreign key (estacao) references WEATHER_STATION.Pessoa_singular(estacao_nome),
    foreign key (estacao) references WEATHER_STATION.Estaçao_meteorologica(localidade)
)

然后,我用以下代码插入值:

INSERT INTO WEATHER_STATION.Humidade 
VALUES (83,'2020-01-24','%','Albergaria(amadora)')

INSERT INTO WEATHER_STATION.Humidade 
VALUES (83,'2020-01-23','%','Aveiro')

两种情况下我都犯了这个错误:
insert语句与外键约束“fk\uu humidade\uu estaca\uu 00ca12de”冲突。冲突发生在数据库“p4g8”、表“weather\u station.esta”中ç“气象”栏目“地方”。
insert语句与外键约束“fk\uu humidade\uu estaca\uuu 7fd5eea5”冲突。冲突发生在数据库“p4g8”、表“weather\u station.pessoa\u singular”、列“estacao\u nome”中。
我的问题是:一个属性是否可能引用来自不同表的两个外键?

6qqygrtg

6qqygrtg1#

当然可以。
但你的表达方式是误导。列不会“指向”另一个表。外键将一个表中的列“关联”到另一个表中的键。当一个列与一个外表上的多个键相关时,我称它们为“forking foreign keys”,但这只是我自己。
考虑以下示例:

create table a (
  b int primary key not null,
  c int unique not null
);

create table d (
  e int,
  f int,
  constraint fk1 foreign key (e) references a (b),
  constraint fk2 foreign key (e) references a (c),
  constraint fk3 foreign key (f) references a (b),
  constraint fk4 foreign key (f) references a (c)
);

在本例中,您有四个带两列的外键。用你的“点”行话你可以说:
e->b
e->c
f->b
f->c
所以呢 e 两次加分 f 两倍的分数。也 b 以及 c 每个都有两个尖。
最后,一个有趣的副作用是 e 两次指向table a 这个值实际上可能同时指向两个不同的行。这对于插入、更新和删除可能非常棘手。你看到的错误可能与这种副作用有关。在修改数据以保持fks有效时,需要小心。

相关问题