2013-03-28 64 views
0

在每種類型架構的表中,假設我有一個具有兩個子類型student和teacher的Person類型。學生不能當老師,老師不能當學生。每種類型的專有子類型的數據庫表

下面是我知道如何到目前爲止設置這些的最佳途徑:

Geometry 
    ID int, PK 
    Name string 

Point 
    ID int, PK, FK 
    X float 
    Y float 

Line 
    ID int, PK, FK 
    StartPoint int, FK 
    EndPoint int, FK 

注意,對於子類型的主鍵也是一個外鍵幾何。我怎樣才能確保沒有既是點又是線的幾何?是否存在某種相互排斥的約束?

如果唯一的解決方案是使用特定於供應商的觸發器之類的東西,我最好是這樣做,還是在稍後或客戶端的其他地方執行此操作?

謝謝!

+0

所以,你不考慮的想法,一個人不能同時是老師和學生是一個數據完整性的問題,而是一個邏輯問題?擁有這個枚舉不是多餘的嗎?這些不是修辭問題,我真的不知道什麼是最好的 – Eric

+0

也許我太抽象了,如果這是高中或明顯不是什麼,但任何高等教育機構,這當然是可能的。如果它們完全分離,爲什麼它們從'Person'繼承,而不是僅僅創建2個表格,'Teacher'和'Student'? –

+0

我實際上是在一個非常不同的數據庫上工作。在我的數據庫中,子類型絕大多數是獨佔的。在這種情況下,我將編輯該帖子以闡明 – Eric

回答

0

在StackOverflow和數據庫管理員這裏有幾個類似的問題可以作爲一個很好的參考點。請參閱此相關的問題:

How do I model one entity that references one of several other entities in SQL?

+1

作爲評論比答案更合適。 –

+0

它肯定會讓我朝着正確的方向發展,我非常感謝:)我不介意將我的結果編譯成答案,並在發現後發佈。 – Eric

+0

http://stackoverflow.com/questions/4896831/how-to-implement-referential-integrity-in-subtypes/4898314#4898314 這傢伙似乎知道他的東西 – Eric