非规范化并将多个ID添加到一行

时间:2012-11-20 08:58:33

标签: sql database database-design relational-database

我目前正在研究将通过实体框架访问的SQL Server关系数据库。我有几个问题似乎无法找到合适的答案。

请参阅我的数据库模型图:

enter image description here

1 我不太确定ProblemType实施是否是正确的方法。正如现在设置的那样,两列都允许ProblemType中的空值,因为它将包含ProblemTypeRoadIDProblemTypeVandalismID。所以问题是,如果可以通过删除ProblemType表并将ProblemTypeRoadProblemTypeVandalismProblemDesc表相关联来对模型进行去规范化吗?

2 查看Problem表,您会看到一个名为HistoryIDs的列。此列应包含以逗号分隔的字符串,其中所有HistoryIDsProblem相关。 HistoryID基本上是ProblemDescID(因为ProblemDesc只要更新时IsHistory列设置为true),因为ProblemDesc会在每次更改时被复制。 我的问题是:将多个ProblemDescIDs添加到HistoryIDs列的最佳方法是什么?如果它像“1,5,7”那样,很容易找到给定ProblemDesc的所有历史。

第3 对图表的任何其他建议也非常受欢迎:)

提前致谢!

编辑:请考虑修改后的图表:

enter image description here

既然你已经给了我一些很好的改进建议,我已经尝试实施你的大部分建议。 ProblemType已被删除,并添加了ProblemHistory。还对WorkerCommentMedia与其父表的关系进行了更改。 这种实施会起作用吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

  1. 您可以删除problemtype表,只需将problemtyperoad和problemtypevandalism与问题类型为

  2. 的问题类型表联系起来
  3. 不,不应该。您应该有一个表ProblemHistory,其中包含ProblemsID和HistoryID列,每个History都有一行。

  4. 您似乎可以找到与多个问题相关的工作人员评论。应该是相反吗?同样适用于媒体和ProblemDescs。只有一名工人能解决问题吗?此外,MSSQL具有您可以使用的地理类型,而不是CoordinateLat和CoordinateLng。