2017-06-29 89 views
1

我正在嘗試爲非常多樣化的互連對象集開發數據模型。隨着應用程序的成熟,支持的對象類型將顯着增加。我想避免在添加新的對象類型時不得不修改模型/模式。靈活的對象關係

作爲一個簡單的例子,假設我從一個人和建築模型開始。建築物可以擁有多個所有者;一個人可以擁有多個建築物;一個人可以住在房子裏,在辦公室工作......未來的版本可能會增加汽車和公司。汽車可以擁有車主,公司可以製造汽車,人們可以爲公司工作等。大多數關係將是多對多的,有些將是一對多的,很少有一對是一對一的。儘管像「所有者」,「僱主」或「製造」這樣的概念可以被視爲「建築」,「公司」或「汽車」對象的屬性,但我不想將數據模型重新定義爲支持新的屬性類型。

我目前的想法是模擬這個類似於一個圖,其中每一塊數據是它自己的節點。節點對象將是非常簡單的:

  • 唯一標識符
  • 名稱(人表示)
  • 節點類型
  • 關係

擴展前面的例子中,可能的節點類型將是:

  • 公司
  • 大廈

的關係應該是:

  • 節點A
  • 節點B
  • 關係類型 - 應用,擁有,已經是, etc

我有幾個問題:

  • 這種方法有什麼缺點嗎?
  • 有沒有描述這個的現有模式或模型?
  • 有沒有更好的方法?

回答

1

是否存在描述此現象的模式或模型?

您所描述的內容聽起來像網絡數據模型,也稱爲對象或面向對象的數據模型。

這種方法有什麼缺點嗎?

您的模型不支持三元關係和更高關係。它還在節點之間創建固定的訪問路徑,它支持節點到節點的導航,但可以使許多查詢變得複雜。我也沒有看到任何支持子類型。

沒有複合決定因素,某些情況將很難建模或查詢。您不支持諸如(Object, Language) -> Name(或(Company, Role) -> Person等)的謂詞。一種方法是創建特殊關係類型,但是您的模型將會不對稱並且更難以查詢。

有沒有更好的方法?

數據的關係模型處理對象類型/域之間的n元關係,並允許複雜謂詞的表示。 N元關係意味着它支持對象超圖,用戶定義的連接表示臨時訪問路徑。支持複合決定因素,並且大多數實現支持各種完整性約束。

特別是,查看對象角色建模(http://www.orm.net,https://www.ormfoundation.org)。

我希望避免在添加新的對象類型時不得不修改模型/模式。

嘗試通過網絡搜索「知識表示的通用模式」。關於這個世界的事實並不侷限於簡單的原子觀察,比如「約翰史密斯有一隻名爲Spot的狗」。我們必須處理這樣的事實,例如「如果產品含有E或F成分,則公司A不得在日期D之後的C點100公里範圍內分發產品B.迄今爲止,我們所知道的最強大的知識表示形式是自然語言,就我所知,我們還沒有一個簡單的結構模型。我正在閱讀Ologs: A Categorical Framework For Knowledge Representation。也許這也會引起你的興趣。