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
因此,如果是用戶顯示,您仍然希望將其放入查找表中。他們大概會想在某個時候改變顯示名稱。他們總是這樣做。 –