【发布时间】:2016-01-21 19:46:42
【问题描述】:
我的问题是以下数据库/应用程序设计的最佳实践是什么?
我使用 Code First Entity Framework 和 .Net MVC 5。我想在不同的实体上实现一些通用功能。例如考虑以下简化示例:
class Person{
int PersonId;
string name;
}
class Member{
int PersonId;
int GroupId;
}
class Group{
int GroupId;
string name;
}
class Label{
string name;
}
所以 2 个实体 person 和 group 具有多对多关系。现在我想为每个添加标签以根据业务逻辑过滤数据。有几种方法可以解决:
- 具有对任何具有类型列的表的“假”FK 引用的单独“ObjectLabel”表。这可能是不好的做法,但可以简化代码实现并提供更大的灵活性。
- 每个实体上要保存的字符串列,例如逗号分隔的标签列表。简单数据库的好处,但当数据扩展时会变慢。
- 单独的表,即“PersonLabel”、“GroupLabel”等,以保持参考完整性以便快速查找,但似乎是多余的,需要做更多的工作。
现在我想要一些关于哪种方法最好以及为什么最好的建议?
【问题讨论】:
-
我会在大多数情况下实施选项 3,这取决于项目的规模,正如您所说。我永远不应该使用选项 1。
-
我实际上最终选择了选项 1,性能成本将通过适当的表索引最小化,然后我可以在我的代码中利用更简单的抽象业务逻辑的好处。
标签: sql-server entity-framework database-design ef-code-first web-application-design