我在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 语句与 FOREIGN KEY 约束 "FK__Humidade__estaca__00CA12DE "冲突。冲突发生在数据库 "p4g8",表 "WEATHER_STATION.Estaçao_meteorologica",列 "localidade"。
INSERT 语句与 FOREIGN KEY 约束 "FK__Humidade__estaca__7FD5EEA5 "发生冲突。冲突发生在数据库 "p4g8",表 "WEATHER_STATION.Pessoa_singular",列 "estacao_nome"。
我的问题是:是否有可能一个属性引用两个来自不同表的外键?
它当然可以。
但是你的表达方式是误导性的。一个列不会 "指向 "另一个表。一个外键将一个表的列与另一个表的键 "关联 "起来。当一个列是 相关 到一个外表上的多个键,我称它们为 "分叉外键",但这只是我的看法。
考虑下面的例子。
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
分两次,并 f
点也是两次。另外 b
和 c
是指每个人两次。
最后,一个有趣的副作用是,由于 e
两次指着桌子 a
该 单值 其实可能指向 两行 同时进行。这对于INSERTs、UPDATEs和DELETEs来说可能非常棘手。你看到的错误可能与这个副作用有关。你需要在修改数据时小心翼翼地保持FKs的有效性。