2010-08-18 74 views
1

這是我的表怎麼看:如何防止外鍵混亂?

tableMembers | memberID as primary key 

tableAddress | addressID as primary key references memberID 

tableSubscription | subsID as primary key references memberID 

這個數據庫是訂閱網站的。基本上,如果將一行插入到tableMembers中,則將相應的行插入到其他每個表中。

我爲最後兩個表設置了外鍵,因此我可以通過tableMembers訪問它們。基本上,如果我從tableAddress訪問行我做的:

SELECT * FROM tableAddress WHERE addressID = (SELECT memberID FROM tableMembers WHERE uname = 'John'); 

我設置的問題是,當ID的同步得到弄糟,外鍵將不再工作。說,當我插入一行到tableMembers然後tableSubscription由於一些奇怪的原因變得功能失效了幾秒鐘?或者在用戶註冊的情況下(最新的memberID變成= 2),假定他/她沒有訂閱哪個離開subsID(,仍然= 1,),與memberID同步。並且稍後,新用戶註冊(最新的memberID變成= 3)並訂閱(subsID變成= 2)。這使得我的查詢變得比較流行。我如何防止這種情況?或者,如果您認爲我不瞭解外鍵的概念,請賜教。

+0

'tableAddress'和'tableSubscription'設置爲與'tableMembers'具有一對一的關係。一般來說,一對一的關係合併成一張表... – 2010-08-18 19:48:11

回答

2

確保只有其中一個表的自動增量編號爲。其他人應該從應用程序代碼的插入查詢中獲得它們的ID,以確保它們適用於正確的成員。

在僞代碼:

  1. 用戶註冊,並獲得3
  2. 的 自動遞增的ID檢查 ID與LAST_INSERT_ID()
  3. 用戶 訂閱的東西。 表中的id應該是 ,應該是你的應用代碼設置爲 你以前得到的值。
+0

編輯: 沒關係。謝謝! – Joann 2010-08-18 20:02:14