这是一个最佳的表结构吗? (动态表属性)

时间:2015-05-04 09:48:31

标签: sql database-design

我希望在同一个数据库表格中存储两个(不同)类的数据,但有几个共享属性。

系统类的粗略看法:

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

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

这两个类都有一些共同的属性:ActivityType和Title

以下是我对这些类的数据库结构的想法,将它们保存在同一个表中:

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设置,ActivityTypeProperties定义活动应具有的属性。

您是否认为这是一种最佳结构,如果没有,您对更好的解决方案有什么想法吗?我想优先考虑将活动数据保存在同一个表中,而不必为每个活动类型创建数据库表。

1 个答案:

答案 0 :(得分:0)

为每种活动类型创建单独的表有什么问题?这些类型是否会由用户即时创建和删除?如果是,那么是的,您希望类型是可以从表中插入或删除的记录。否则,如果类型是稳定的,那么使用一个“超级”表为每种类型创建一个表来容纳类型具有共同点的属性要容易得多。有关详细信息,请参阅this answer