2016-03-22 47 views
0

假設存儲對象具有未知結構

  • 用戶可以具有許多字符
  • 一個性質屬於一個用戶
  • 一個字符的基本屬性名稱,播放器,experience_points,狀態
  • 角色可以是許多不同的類型之一。 (工作名稱)
    • 我說「是」,因爲我不知道這是否是has_a關係,其中Type是一個屬性
    • 實例的類型是
      • d & D5e與屬性類,能力,法術
      • WoDVampire與屬性自然,神態,意志力,一代,血液等
      • WoDWerewolf與屬性自然,神態,靈知,憤怒等

(注:上面一些屬性是更好地體現爲E /盧比,但這是題外話現在)

我不知道如何將這種E型/ R之間的字符和類型(我應該改變名稱,因爲已經有一個屬性:類型。)

我認爲單表繼承,但發現它缺乏,因爲它看起來像所有的潛在類型之間的所有屬性將存儲在同一張表中,這看起來非常笨重。

+0

嗨@ user2706191,這不是回答你的問題。但只是想讓你知道「類型」是一個保留字。請使用其他字。 你可以在這裏看到所有的預留詞語http://www.rubymagic.org/posts/ruby-and-rails-reserved-words –

回答

1

需要注意的一件事是,它不是要求將所有數據存儲在數據庫中。

如果相同類型的字符共享相同的一組能力,那些能力和類型的數量是非常靜態的(不要頻繁更改),您可以圍繞一組普通的ruby類創建邏輯,所需的數據和方法來訪問它。

另一方面,您可能想讓某人沒有適當的編程知識來添加新的類。在這種情況下,您可以將所有信息保存爲文件系統上的本地文件,例如「wod_vampire.chr」。其內容可以是具有屬性及其值的鍵值對的散列,也可以是具有某種特定順序的元素的數組。

好吧,所以我們考慮了所有的非數據庫方式,他們不包含我們。假設您正在使用關係數據庫,仍然有幾個選項。

第一個是單表繼承(你已經知道這種方式)。所有可能的屬性都將被存儲在一個表中,但types中的每一個都只會知道這些屬性中的一組屬性並與其進行交互。

第二個是使用在一些現代數據庫中實現的json數據類型(例如PostgresqlMysql)。這允許你存儲一個散列而不受其結構的限制(換句話說,你可以擁有任意數量的屬性)。請注意,您可能需要實現您自己的一組getter/setters方法來訪問以此方式存儲的值。

相關問題