抽象与分离 table 设计

Abstract versus Separate table design

我的问题是 database/application 设计的最佳实践是什么?

我使用 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 具有多对多关系。现在我想为每个添加标签以根据业务逻辑过滤数据。有几种方法可以解决:

  1. 将 "ObjectLabel" table 与具有类型列的任何 table FK 引用分开。这可能是不好的做法,但可以简化代码实现并提供更大的灵活性。
  2. 要保存的每个实体的字符串列,例如逗号分隔的标签列表。简单数据库的好处,但当数据扩展时会变慢。
  3. 将 table 分开,即 "PersonLabel"、"GroupLabel" 等以保持引用完整性以便快速查找,但似乎多余,需要更多工作。

现在我想要一些关于哪种方法最好的建议以及为什么?

根据标签的内容以及它们需要的动态程度,您可以考虑使用 Enum 标志。这仍然只需要每个 table 一列,并且肯定会比在一列中使用逗号分隔列表更好地扩展。

您可以查看一个示例 here or here 如何进行操作。