2015-05-04 63 views
0

我希望將兩個(不同)類的數據存儲在同一個數據庫表中,但有幾個共享屬性。這是一個最佳的表結構嗎? (動態表屬性)

一粗一看就係統類:

JobApplication : IActivity 
Id: Int 
ActivityType : Int 
Title : String 
CompanyName : String 
CompanyAdress : String 

Meeting : IActivity 
Id: Int 
ActivityType : Int 
Title : String 
Text : String 

的類都有幾個共同屬性:ActivityType和標題

以下是我對這些類數據庫結構的理念,讓他們在同一個表:

Table: Activity 
Id : Int 
ActivityTypeId : Int 

Table: Properties 
Id : Int 
PropertyName : Int (Title, Text, CompanyName etc) 

Table: ActivityProperties 
Id : Int 
ActivityId : Int 
PropretyId : Int 
Value : String 

Table: ActivityType 
Id : Int 
Title : String 

Table: ActivityTypeProperties 
Id : Int 
ActivityId : Int 
PropertyId : Int 

的想法是,活動通過ActivityProperties和ActivityTypeProper設置其屬性值關係定義了活動應具有的屬性。

你會說這是一個最佳結構,如果沒有,你有任何想法更好的解決方案?我想優先考慮將活動的數據保存在同一個表中,而不必爲每個活動類型創建一個數據庫表。

+2

你在ActivityTypeProperties中有什麼在形式上被稱爲實體屬性值(EAV)。有些情況下,這是一個實際的選擇,但它可能會導致一些問題。谷歌EAV數據庫,看看它的優點和缺點,看看它是給你的。 –

+0

隨時發佈一個答案。我不知道這種模式被稱爲EAV。謝謝你明確表示! – Johnson

+0

您正在使用哪些DBMS?有了Postgres,你可能會考慮使用'hstore'來代替(一個高效的鍵/值存儲作爲列數據類型) –

回答

0

爲每個活動類型創建單獨的表有什麼問題?這些類型是由用戶在飛行中創建和刪除的嗎?如果是這樣,那麼是的,你想要一個類型是一個可以從表中插入或刪除的記錄。否則,如果類型是穩定的,那麼使用一個「超級」表爲每個類型創建一個表來保存這些類型共有的屬性要容易得多。詳情請參閱this answer

相關問題