對於一個項目,我創建了一個數據庫模型,並且我不完全確定我是否在正確的道路上。我試圖找到答案,但空了。如何定義其中一個是主鍵的兩列之間的關係?
我有兩個表。其中一個是另一個的「子類」。例如: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