我有一個應用程序,其中有一個名爲Hull的通用對象(表)。表中的每個船體都是獨一無二的。
實體關係多個1:1的
我有另一個對象有三個外殼,但他們具體是Port_Hull,Center_Hull和Starboard_Hull。
與其創建一對多關係,我試圖爲每個關係創建一對一的關係,但這會導致很多錯誤,除非我將關係從Hull傳遞到Vessel一對多(它不是)。任何想法我是如何去做的,還是應該拋棄這個概念,讓它成爲一對多的關係,並處理總是有三個條目的列表?
p.s.使用uniqueidentifiers,因爲許多用戶可以在斷開連接時添加記錄。
赫爾表
- HullID唯一標識符(主鍵)
- 加上一束船體數據字段的
船隻表
- VesselID唯一標識符(主鍵)
- MainHullID uniqueidentifier(試圖爲重點和非重點)
- PortHullID唯一標識符
- StarboardHullID唯一標識符
- 加上一堆容器數據字段
問題與方法一(我認爲),並不是每艘船都有三個船體(我簡化了我原來的文章)。
有些船隻是單體船,只有Mainhull,有些船隻是雙體船,有PortHull和StarboardHull。
我想知道是否對於船體表我應該使主鍵的VesselID字段加1個船體字符字段(M,P&S),使兩個表之間的關係與一個外鍵索引VesselID,然後處理編碼中的關係? – Evan 2010-05-17 00:04:35
我會在船體上保留一個代理HullID - 你不想要複合PK - 在後面真正的痛苦。相反,在VesselID和M,P,S char字段上創建一個唯一的約束 - 我在我的答案中稱爲HullType。這樣,你可以確保一艘船最多隻有一個給定類型的船體。現在,對給定類型的船體進行天氣測試對於給定容器是有意義的,這是另一個問題,您可以在代碼中簡單解析(可能在db模型中,但是很複雜)。您有一個複雜的域模型,您正在映射到數據庫 - 你有沒有考慮過使用對象關係映射工具,例如NHibernate的? – mdma 2010-05-17 00:20:40
大聲笑 - 我試圖使用VisualStudio實體框架工具,如果它只是退出給我奇怪的錯誤和識別東西線枚舉。 NHibernate爲.net添加功能的標準框架? – Evan 2010-05-17 00:40:39