对于一个项目,我创建了一个数据库模型,并且我不完全确定我是否在正确的道路上。我试图找到答案,但空了。如何定义其中一个是主键的两列之间的关系?
我有两个表。其中一个是另一个的“子类”。例如:Animal
和Horse
。 Horse
有一个名为HorseId
的主键,而Animal
有一个名为AnimalId
的主键。 HorseId
是涉及AnimalId
的外键。到现在为止还挺好。
现在我想添加一列Type
到Animal
表,所以我知道它是哪个动物。 Animal
现在有AnimalId
和Type
作为列。
表动物
AnimalId (PK)
Type
表马
HorseId (PK, FK ref Animal.AnimalId)
然而,标识的马应该始终有 '马' 为Type
的AnimalId
。一种可能性是将Type
作为主键的一部分,但这看起来不正确,因为AnimalId
唯一标识了其中的一行。
另一种选择是创建包含两列的备用密钥。但是,我的验证器告诉我'主键是备用键的一个子集'(这是正确的),并且警告我。不允许吗?
我应该如何解决这个问题?
在此先感谢!
您是否试图创建一个规则,如果Animal表中存在AnimalID,则强制Type为Horse? – mucio
如果可能的话,这将解决所有问题。 我在第一篇文章中说的只是解决部分问题。它确保AnimalId只能有一个类型。您真正想要的是确保类型与Id所在的表相同。 但是,我不确定是否要在数据库级别制作这样的约束。如果我能做第一部分,我也会很开心。解决方案中的 – Century
将会是一个触发器,当您在'Animal'中用'Type = Horse'插入记录时,在'Horse'中插入一个新行。你正在使用哪个数据库? – mucio