2011-03-28 66 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