我在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”中。
我的问题是:一个属性是否可能引用来自不同表的两个外键?
1条答案
按热度按时间6qqygrtg1#
当然可以。
但你的表达方式是误导。列不会“指向”另一个表。外键将一个表中的列“关联”到另一个表中的键。当一个列与一个外表上的多个键相关时,我称它们为“forking foreign keys”,但这只是我自己。
考虑以下示例:
在本例中,您有四个带两列的外键。用你的“点”行话你可以说:
e->b
e->c
f->b
f->c
所以呢
e
两次加分f
两倍的分数。也b
以及c
每个都有两个尖。最后,一个有趣的副作用是
e
两次指向tablea
这个值实际上可能同时指向两个不同的行。这对于插入、更新和删除可能非常棘手。你看到的错误可能与这种副作用有关。在修改数据以保持fks有效时,需要小心。