我目前正在研究将通过实体框架访问的SQL Server关系数据库。我有几个问题似乎无法找到合适的答案。
请参阅我的数据库模型图:
1
我不太确定ProblemType
实施是否是正确的方法。正如现在设置的那样,两列都允许ProblemType
中的空值,因为它将包含ProblemTypeRoadID
或ProblemTypeVandalismID
。所以问题是,如果可以通过删除ProblemType
表并将ProblemTypeRoad
和ProblemTypeVandalism
与ProblemDesc
表相关联来对模型进行去规范化吗?
2
查看Problem
表,您会看到一个名为HistoryIDs
的列。此列应包含以逗号分隔的字符串,其中所有HistoryIDs
与Problem
相关。 HistoryID
基本上是ProblemDescID
(因为ProblemDesc
只要更新时IsHistory
列设置为true),因为ProblemDesc
会在每次更改时被复制。
我的问题是:将多个ProblemDescIDs
添加到HistoryIDs
列的最佳方法是什么?如果它像“1,5,7”那样,很容易找到给定ProblemDesc
的所有历史。
第3 对图表的任何其他建议也非常受欢迎:)
提前致谢!
编辑:请考虑修改后的图表:
既然你已经给了我一些很好的改进建议,我已经尝试实施你的大部分建议。 ProblemType
已被删除,并添加了ProblemHistory
。还对WorkerComment
和Media
与其父表的关系进行了更改。
这种实施会起作用吗?
谢谢!
答案 0 :(得分:3)
您可以删除problemtype表,只需将problemtyperoad和problemtypevandalism与问题类型为
不,不应该。您应该有一个表ProblemHistory,其中包含ProblemsID和HistoryID列,每个History都有一行。
您似乎可以找到与多个问题相关的工作人员评论。应该是相反吗?同样适用于媒体和ProblemDescs。只有一名工人能解决问题吗?此外,MSSQL具有您可以使用的地理类型,而不是CoordinateLat和CoordinateLng。