0
比方说,我有如下表复合键与用户提供的字符串列,外键
TABLE subgroups (
group_id t_group_id NOT NULL REFERENCES groups(group_id),
subgroup_name t_subgroup_name NOT NULL,
more attributes ...
)
subgroup_name
是唯一的一个。- A
group
可以有很多subgroups
。 subgroup_names
是用户提供的。 (我想避免使用subgroup_id
列,subgroup_name
在模型中有意义,不仅仅是一个标签,我提供了预定名称的列表,但允许用户添加他的所有者以获得灵活性)。- 此表具有2级引用包含子组属性(包含多对一关系)的子表;
我想有一个PRIMARY KEY(GROUP_ID,上部(修剪(subgroup_name)));
据我所知,postgres不允许在函数上使用PRIMARY KEY/UNIQUE。 IIRC,关系模型也要求使用列作为存储。
CREATE UNIQUE INDEX ON subgroups (group_id, upper(trim(subgroup_name)));
不能解决我的问题 因为我模型中的其他表将有指向这两列的FOREIGN KEY。
我看到两个选项。
选项A)
- 存放在subgroup_name
- 一个清理分组名称添加,将包含未清洁的字符串
选项B)
-
一个额外的列称为subgroup_name_raw
- 在我的密钥对上创建一个UNIQUE INDEX和PRIMARY KEY。 (看起来像是一个巨大的浪费)
任何见解?
注:我使用的是Postgres 9.2
为什么要存储未清理的subgroup_name版本?我试图弄清楚你的想法。当然,你有干净的版本的组+子组ID和一个查找表给出显示名称。 –
我想让未清理的版本显示在用户界面中。我不想显示uppercased版本,我想确保名称不区分大小写。 子组将有成员,消息和其他对象附加到它。包含这些对象的表将具有子组表的外键。我看到一个干净的subgroup_name等同于subgroup_id。 – akp
因此,如果是用户显示,您仍然希望将其放入查找表中。他们大概会想在某个时候改变显示名称。他们总是这样做。 –