爲了說明問題,我讓一個例子:唯一約束(W/O觸發)上的「一到多」關係
甲tag_bundle由一個或一個以上的標記。 獨特的標籤組合可以映射到唯一的標籤塊,反之亦然。
tag_bundle tag tag_bundle_relation
+---------------+ +--------+ +---------------+--------+
| tag_bundle_id | | tag_id | | tag_bundle_id | tag_id |
+---------------+ +--------+ +---------------+--------+
| 1 | | 100 | | 1 | 100 |
+---------------+ +--------+ +---------------+--------+
| 2 | | 101 | | 1 | 101 |
+---------------+ +--------+ +---------------+--------+
| 102 | | 2 | 101 |
+--------+ +---------------+--------+
| 2 | 102 |
+---------------+--------+
不能有具有正好從標籤100和標籤相同的組合101 不能有具有正好從標籤101和標籤102
同一組合的另一tag_bundle另一個tag_bundle如何確保執行SQL 「同時」時的這種唯一約束! 就是防止同時將兩束具有完全相同相同標籤組合
添加任何表不起作用簡單的唯一約束, 難道還有比觸發或顯式鎖以外的任何解決方案。
我只想到了這樣一種簡單的方法:將標記組合變成字符串,並讓它成爲一個獨特的列。
tag_bundle (unique on tags) tag tag_bundle_relation
+---------------+-----------+ +--------+ +---------------+--------+
| tag_bundle_id | tags | | tag_id | | tag_bundle_id | tag_id |
+---------------+-----------+ +--------+ +---------------+--------+
| 1 | "100,101" | | 101 | | 1 | 101 |
+---------------+-----------+ +--------+ +---------------+--------+
| 100 | | 1 | 100 |
+--------+ +---------------+--------+
但它似乎不是一個好辦法:(
您是否希望允許tab_id參與多個捆綁包?例如,'tag_bundle_id = 2'有'tags =(100,200)'?超級集合/子集怎麼樣,'tag_bundle_id = 3是否有標籤(100,101,102)'? – 2010-04-20 21:44:19
tag_bundle_id = 2允許標籤=(100,200), tag_bundle_id = 3允許標籤(100,101,102)。 – elgcom 2010-04-20 21:53:31
那麼,是或否的子集? – MkV 2010-04-20 23:52:49