使用能夠生成代碼的數據庫建模工具時,存在某些關係類型(幾乎不支持)。它們包括1對1,多對多和0或1比0或1:1,:和0..1:0..1。零或一對零或一個關係問題
前兩個有簡單的解決方案。 1或1:1:0..1
1對1能夠通過轉換爲0..1對1或1對0..1,0..1來解決。
多對一許多可以通過在關係的中間使用一個表,然後可以解決任一1:*和一個:1或0..1:和*:0 .. 1或一些類似的組合。我認爲有四種可能的組合解決它。
但是,我卡在0..1到0..1。事實上,我有這樣一組似乎具有這種邏輯關係的表格。
在我的情況下,我有四個表。爲了論證,假設它們都具有INT類型的主鍵。這些表格是人員,組織,客戶和員工。
關於邏輯的一句話。組織可以有人,他們在關係中被稱爲聯繫人。員工既可以是客戶也可以是員工,或者兩者兼而有之。
參與組織< - > has Contacts < - > as People。這是一個0..1:*的關係。這意味着一個人可以有或沒有一個組織,並且一個組織可以有很多人(或沒有)。
員工必須擁有人員記錄,而且這種關係也是有意義的。這是一個0..1:1的關係,員工必須有一個人,但一個人可以有0或1個員工記錄。
但是這個沒有意義,因爲實體繼承在邏輯上在雙向流動。以人員或組織爲例。客戶既可以是組織也可以是人員,但不能同時擁有,並且通過類型標誌字段進行選擇。同樣的一個人不一定是一個客戶,以後可能是一個員工或其他聯繫方式。我不能要求某人成爲客戶,我不能要求客戶成爲一個人。同樣,我不能要求組織成爲客戶,我不能要求客戶成爲組織。所以繼承的分離也是必要的。在Customer:Person和Customer:Organization的情況下,它們都需要實現0..1:0..1和0..1:0..1。但是語言工具不支持它。因爲它們是強類型語言,所以實體繼承只能以單一方向流動。即使是弱類型的語言,你仍然會在首先出現的情況下出現:雞或雞蛋。
JavaScript可能非常適合這種情況,因爲您可以動態更改對象類型的結構,並且即使無法顯式聲明對象以存在於此中方式。
但我今天的工具是Microsoft LightSwitch,它根本不會這樣做。我不認爲現代建模工具的存在將會產生強類型的語言代碼,這將允許這種關係類型。
是否有一個技巧可以克服這種關係,0..1:0..1,還是有一些基本的東西我還沒有明白?我留在這裏選擇一邊,我不知道哪一方獲勝:客戶或個人,客戶或組織。但是,也許還有其他事情我可以做,而不會影響任何一種情況。有沒有關於破碎的模型的東西?
謝謝!