如何在Postgres中使用ENUM创建类别和子类别的层次结构

时间:2013-12-19 01:47:42

标签: postgresql relational-database

我正在尝试创建categoriessubcategories的层次结构。 ENUM类型对我来说最有意义,但我想弄清楚如何创建表来建模我的数据。我有一个categories列表。我还有一个subcategories列表,它与该类别有1对多的关系。这是我的ENUM

CREATE TYPE categories as ENUM('Casting', 'Cutting');
CREATE TYPE casting_subs as ENUM('Composite', 'Metal', 'Plastic', 'Rubber', 'Foam');
CREATE TYPE cutting_subs as ENUM('Die Cutting', 'Flame', 'Laser', 'Plasma', 'Saw', 'Waterjet');

如何创建用于建模数据的表?

1 个答案:

答案 0 :(得分:0)

实际上,在这里使用枚举很有意义。如果那是你真正想要的,那就是你已经正确地做了,即没有桌子。你可能想要的是一个分层表:

create table categories (
  id serial primary key,
  parent int references categories (id),
  name varchar not null
);

开始填写:

insert into categories (name)
values ('Casting'), ('Cutting');

然后使用相关的id填充子类别,例如:

insert into categories (parent, name)
values (1, 'Composite'), (1, 'Metal');

要查询完整层次结构,您可以使用CTE:

http://www.postgresql.org/docs/current/static/queries-with.html