抽象与分离 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 具有多对多关系。现在我想为每个添加标签以根据业务逻辑过滤数据。有几种方法可以解决:
- 将 "ObjectLabel" table 与具有类型列的任何 table FK 引用分开。这可能是不好的做法,但可以简化代码实现并提供更大的灵活性。
- 要保存的每个实体的字符串列,例如逗号分隔的标签列表。简单数据库的好处,但当数据扩展时会变慢。
- 将 table 分开,即 "PersonLabel"、"GroupLabel" 等以保持引用完整性以便快速查找,但似乎多余,需要更多工作。
现在我想要一些关于哪种方法最好的建议以及为什么?
根据标签的内容以及它们需要的动态程度,您可以考虑使用 Enum 标志。这仍然只需要每个 table 一列,并且肯定会比在一列中使用逗号分隔列表更好地扩展。
您可以查看一个示例 here or here 如何进行操作。
我的问题是 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 具有多对多关系。现在我想为每个添加标签以根据业务逻辑过滤数据。有几种方法可以解决:
- 将 "ObjectLabel" table 与具有类型列的任何 table FK 引用分开。这可能是不好的做法,但可以简化代码实现并提供更大的灵活性。
- 要保存的每个实体的字符串列,例如逗号分隔的标签列表。简单数据库的好处,但当数据扩展时会变慢。
- 将 table 分开,即 "PersonLabel"、"GroupLabel" 等以保持引用完整性以便快速查找,但似乎多余,需要更多工作。
现在我想要一些关于哪种方法最好的建议以及为什么?
根据标签的内容以及它们需要的动态程度,您可以考虑使用 Enum 标志。这仍然只需要每个 table 一列,并且肯定会比在一列中使用逗号分隔列表更好地扩展。
您可以查看一个示例 here or here 如何进行操作。