如何定义两列之间的关系,其中一列是主键?

How to define relationship between two columns of which one is primary key?

对于一个项目,我正在创建一个数据库模型,但我不确定我是否走在正确的道路上。我试图找到答案,但一无所获。

我有两个 table。其中一个是另一个的'subclass'。

示例:AnimalHorseHorse 有一个名为 HorseId 的主键,Animal 有一个名为 AnimalId 的主键。 HorseId 是引用 AnimalId 的外键。到目前为止,一切都很好。

现在我想在 Animal table 中添加一列 Type,这样我就知道它是什么动物了。 Animal 现在有 AnimalIdType 作为列。

Table动物

AnimalId (PK)  
Type  

Table马

HorseId (PK, FK ref Animal.AnimalId)

但是,标识马的 AnimalId 应该始终具有 'Horse' 作为 Type。一种可能是使 Type 成为主键的一部分,但这似乎不正确,因为 AnimalId 唯一地标识了它的一行。

另一种选择是创建一个包含两列的备用键。但是,我的验证器告诉我 'primary key is a subset of alternate key'(这是正确的),并警告我。不允许吗?

我该如何解决?

提前致谢!

使用触发器解决了多个问题。 我不得不更改外键关系,因为它的定义方式错误。如果我希望能够在 Horse 中创建新记录,AnimalId 应该引用 HorseId
此外,备用钥匙不是必需的。主键和外键已经确保Animal中的一条记录引用了Horse中的一条记录,所以总会有一条Type.
为了确保 Animal 中的 Type 是正确的,我已经能够创建一个触发器。在 Horse 中插入一条记录后,触发器会自动将一条记录插入 Animal 中,其中 TypeId 是正确的。 Animal的触发器和主键保证了没有人可以直接向Animal输入一行而插入错误的Type

触发器如下:

CREATE trigger Trigger  
ON Horse  
AFTER INSERT  
AS  
DECLARE @Id uniqueidentifier  
SET @Id = (SELECT HorseId FROM inserted)  
INSERT Animal VALUES (@Id, 'Horse')  

感谢您为我指明正确的方向!