2011-03-28 34 views
1

我有一種情況,一個網站(源)有多個源(類分開)特殊唯一列

Feed Table 
feed_id | source_id | feed_url 
1  | 1  | http://example.com/rss?category=1 
2  | 1  | http://example.com/rss?category=5 
3  | 2  | http://textample.com/rss 

Item Table 
item_id | true_id | feed_id 
1  | 1332 | 1 
2  | 76549 | 1 
3  | 76549 | 2 
4  | 76549 | 3 

真正的ID是我嘗試從源網站獲得的ID。
我想要項目ID 2 & 3是相同的,因爲他們共享相同的來源(example.com),項目4是不一樣的,因爲它有不同的來源(textample.com) 有沒有一種方法,我可以強制執行該一致性,而不將源代碼添加到項目表中?

+0

假設你是說在'Item'表,''對是唯一的僅在進料具有不同的'source_id'。然後我認爲你需要添加'source_id'並添加'UNIQUE ',我想不出一種方法來級聯唯一性約束。 – Orbling 2011-03-28 05:36:27

+0

這就是我想說的,我只是覺得添加源代碼id是一種redudant,因爲'feed_id,source_id'對總是相同的 – Moak 2011-03-28 05:55:50

+0

是的。從數據規範化的角度來看。但是你的唯一性約束是在'source_id'上,而不是'feed_id',而仍然需要引用'feed_id'作爲外鍵約束。 – Orbling 2011-03-28 06:00:44

回答

1
RUN

ALTER TABLE `itemTable` ADD UNIQUE (`feed_id`); 
+0

對不起,這將強制item_id 1和2不能共享相同的feed_id – Moak 2011-03-28 09:25:52

+0

第一次運行ALTER TABLE itemTable DROP INDEX feed_id然後ALTER TABLE itemTable ADD UNIQUE('feed_id','true_id')' – diEcho 2011-03-28 09:43:33

+0

同樣,它不是與feed_id相關,但是Feed表中引用的source_id。我的觀點是,在源項目列表中包含source_id作爲列似乎是多餘的,當清楚所有的源都具有相同的ID – Moak 2011-03-28 10:31:32