2017-01-09 60 views
1

如何從表中的元組創建主鍵?SQL - 作爲主鍵的元組

示例 -

table a: [id|name] 
table b: [id|name] 
table axb:[a_id|b_id] 

現在,我們要一個主鍵添加到AXB使元組{α,β}是獨一無二的。換句話說,表格不能包含行(alpha,beta)和(beta,alpha)。這將擴展到非洲,但我要求夫婦開始保持這種簡單。

我正在使用MySql 14.14/5.5.50 - 但我希望這並不重要。

注意複合鍵不解決,這個是A_ID複合鍵/ B_ID仍然允許與逆元組訂單行作爲新行

+0

可能的重複[如何正確創建複合主鍵 - MYSQL](http://stackoverflow.com/questions/5835978/how-to-properly-create -composite-primary-keys-mysql) –

+0

我不認爲它是重複的;我認爲如果一個條目「(1,3)'已經存在,OP想要避免像'(3,1)'這樣的條目被插入到'axb'中。 –

+0

究竟@StephanLechner – fieranmason

回答

2

不幸的是,你需要使用一個觸發器來做到這一點在MySQL中。許多數據庫將支持語法如:

create unique index unq_t_alpha_beta on (least(alpha, beta), greatest(alpha, beta)); 

雖然語法可能會有所不同,在表達式或計算列的索引解決這個問題。

另一種方法是要求alpha < beta(使用check約束),然後在(alpha, beta)上構建唯一索引。

不過,MySQL支持無如下:

  • check約束
  • 指標上表現
  • 計算列

所以,離開觸發器。

+0

謝謝@Gordon Linoff。多麼令人失望。在這個特定的例子中,我沒有自引用,你的「檢查」解決方案本來就很棒,但是不值得遷移到新的DBMS。 – fieranmason