我有两个表:
- 狗
- 狗主人
我正在尝试从DogOwner创建一个外键到Dog,但不是在dog表的主键上。 我计划为dog表的dog_id列创建自己的唯一ID。以下是模式:
CREATE TABLE dog(
id INT NOT NULL identity(1,1),
dog_id INT NOT NULL,
dog_name VARCHAR (200) NOT NULL,
create_date DATETIME NOT NULL,
update_date DATETIME DEFAULT getutcdate(),
start_date DATETIME DEFAULT getutcdate(),
end_date DATETIME DEFAULT getDate() - 101,
is_active BIT NOT NULL DEFAULT '0',
PRIMARY KEY (id,dog_id)
);
CREATE TABLE dogowner(
dogowner_id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
dog_id INT NOT NULL,
FOREIGN KEY (dog_id) REFERENCES dog(dog_id)
);
一旦我在dogowner表上创建外键约束,就会出现以下错误:
There are no primary or candidate keys in the referenced table 'dog' that match the referencing column list in the foreign key 'FK__dogowner__dog_id__00AA174D'.
> 更新:
最终我放弃了复杂的模式设计,选择在需要版本控制的每个表上使用历史表。因此,狗表将有一个名为dog_history或dog_log的历史表,其中包含对所有历史表进行的插入/更新操作。
虽然这不是我想要的方式,但它允许我在数据库中拥有外键约束、软删除和数据记录。感谢所有人的意见。我遵循KISS原则。
dogowner
中的dog_id
指向dog
中的一个键。在dog
表中唯一存在的键是id,dog_id
上的主组合键。因此,它无法将dog_id
与dog
表中的任何键匹配。 - SchmitzIT