Postgresql 定义子实体与使用类型列之间的性能差异
假设我想为具有相同属性的多个实体创建一个大表,例如类别 有几个顶级类别永远不会改变,例如A、B和C。所有其他类别都是这些顶级类别或相关类别的子类别 哪种方法更有效:Postgresql 定义子实体与使用类型列之间的性能差异,postgresql,database-design,Postgresql,Database Design,假设我想为具有相同属性的多个实体创建一个大表,例如类别 有几个顶级类别永远不会改变,例如A、B和C。所有其他类别都是这些顶级类别或相关类别的子类别 哪种方法更有效: 使A、B和C成为数据库中的枚举列,并使顶级类别没有父类别 创建A、B和C顶层行,所有其他类别都嵌套在该行下 两者似乎都错了。假设您有: 1类别可以有多个子类别 1子类别可以有一个类别 如果是:使两个表由外键连接 在关系数据库管理系统中,“R”表示关系 CREATE TABLE Category (id int primary
两者似乎都错了。假设您有:
- 1类别可以有多个子类别
- 1子类别可以有一个类别
CREATE TABLE Category (id int primary key, name varchar(255));
CREATE TABLE SubCategory (id int primary key, name varchar (255), idCategory int references Category (id));
想象有一天:
您必须将子类型添加到子类别中:您必须添加一个基本为空的列,并谨慎使用任何类别都不会有子类型的规则(因为它只能是子类别属性)。正常形式的信任()
无论如何:
永远不要忘记,在大多数情况下,使用大量的列而不是表之间的关系是个坏主意。(反模式3:)取决于要在该表上运行的查询。由于类别和子类别具有相同的列,请发布使用此表的最相关查询(可能有两种变体供您选择),将它们放在同一个表中并进行自联接不是更好吗?为什么这不是关系型的呢?因为正常形式()。例如:如果有一天你必须向你的子类别中添加一个子类型:你必须添加一个基本为空的列,并且小心地使用一个规则,即任何类别都不会有子类别(因为它只能是子类别属性)。信任正常形式。完整地说:永远不要忘记,在大多数情况下,用大量的列代替表之间的关系是个坏主意。(反模式3:)用这些评论编辑了我的帖子。
| id | name | parentId |
|----|---------------|----------|
| 1 | Category 1 | |
| 2 | Category 2 | |
| 3 | Category 3 | |
| 4 | Subcategory 1 | 1 |
| 5 | Subcategory 2 | 2 |
| 6 | Subcategory 3 | 3 |
CREATE TABLE Category (id int primary key, name varchar(255));
CREATE TABLE SubCategory (id int primary key, name varchar (255), idCategory int references Category (id));