2015-05-04 20 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

相关问题