2010-06-25 104 views
0

我想弄清楚在我的數據庫中設置一些表的最佳方法。 我將在一個表中保存有關用戶的數據,並在另一個表中進行導航。 我會簡化表格。我有兩張表, 有User_ID和User_Name的用戶 具有Nav_ID和Nav_Name的導航。SQL表中的M:N關係

我在想什麼是每個用戶可以有那裏「自己的」導航計數器。 所以基本上我想要做的是Nav_ID計數器將從1開始爲每個用戶。

現在它的工作方式是每個用戶使用相同的導航表,並且Nav_ID從1開始對所有人都有效。

我在想,我需要做一個1:n到n:1的表格,將用戶和導航表連接在一起。或者有另外一種方式,聽說有關代孕或某事的事情,但我不知道它是否是一種更好的方法。

回答

0

對於一對一的關係,其中每個用戶具有一個導航記錄,或一對多的關係,其中,每個用戶有多個導航記錄(但每個導航記錄僅鏈接到一個用戶):

您的導航表可能如下所示:

Nav_id, User_ID, Counter 

我不認爲有任何需要第三張表。

Navigation.User_ID是User.User_ID的外鍵。

User 
User_ID Name 
     1 Marcus 
     2 David 

Navigation 
Nav_ID  User_ID  Count 
    1   1   1 
    2   2   1 

雖然,對於一對一的關係,如果導航只是其中的一個領域,你甚至可以只將其存儲在用戶現場:

User 
User_ID Name  Navigation_Count 
     1 Marcus     1 
     2 David     2 

您只需要第三個表如果存在多對多關係,那麼您擁有用戶和導航記錄,但每個用戶可能鏈接到多個導航記錄,並且用戶可能共享相同的導航記錄。

0

如果每個用戶的nav_id從1開始,並且每個用戶的導航記錄都與該用戶相關,那麼表格就會變得很弱。從用戶到導航的關係將是1:N。導航的主鍵是複合鍵:user_id,nav_id。您可能必須構建自定義代碼來爲每個用戶增加nav_id。

您可以在導航上使用單列替代鍵,該鍵在所有用戶中自動遞增。這將是導航表上的主鍵。不過,我認爲這不會有用。您仍然需要將自然主鍵實現爲唯一約束。