2010-04-27 113 views
1

我正在尋找處理PHP和MySQL中多對多關係數據庫的最佳方法。在PHP中處理多對多關係的最佳方式MySQL

現在,我有2個表:

用戶(ID,USER_NAME,名字,姓氏)
連接(ID_1,ID_2)

Userid是自動遞增添加和user_name是獨特的,但可以改變。不幸的是,我無法控制user_name及其改變的能力,但我必須對其進行解釋。

Connections表顯然是user1和user2的id。

連接表需要考慮到這些可能的關係:

user1 --> user2 (user 1 friends with user 2 but not user2 friends with user1) 
user2 --> user1 (user 2 friends with user 1 but not user1 friends with user2) 
user1 <--> user2 (user 1 and user 2 mutually friends) 
user1 <-!-> user2 (user 1 and user 2 not friends) 

那部分是沒有問題的,我用的時候,如果他們分批改變是保持這些關係唯一遇到的問題。

可能的解決方案1:刪除用戶1的所有關係,並用更新後的列表讀取它們。我認爲這可能對我的需求來說太慢了。

解決方案2?其他人遇到這個問題?我該如何最好地處理這個問題?

更新:顯着的關係:

我處理這樣的關係:

user1, user2 
user1, user3 
user2, user1 
在例如以下

是正確的:只有
USER1如下用戶2和用戶3
user2的如下USER1,但沒有按」 t follow follow3
user3不遵循用戶1或用戶2

+0

不確定這是否與您的問題有關,但如果您的Connections表中唯一的內容是兩個用戶標識,那麼您如何區分不同類型的關係? – Ender 2010-04-27 18:51:00

+0

@版,我更新了問題並回答了你的問題。 – Jayrox 2010-04-27 20:34:47

+0

http://en.wikipedia.org/wiki/Associative_Entities – racerror 2010-04-27 21:55:33

回答

4

您可以在Connections上使用複合主鍵,如果您遇到唯一性問題,請同時使用兩列(id_1,id_2)。

+0

介意給這個答案一個例子或一個很好的資源? – Jayrox 2010-04-27 19:09:53

+0

如果連接表上沒有主鍵,則應添加一個主鍵。您可能熟悉選擇單個列作爲主鍵索引,並知道它必須是唯一的。但是,您可以爲索引使用多個列。即使可能存在重複的id_1值,連接表中也不應有任何重複的行(其中id_1和id_2都相同),因此在主鍵索引中命名id_1和id_2兩列。那麼,數據庫不會讓你有重複。 – 2010-04-27 19:23:24

+1

'ALTER TABLE Con​​nections DROP PRIMARY KEY,ADD PRIMARY KEY(id_1,id_2);' – 2010-04-27 19:31:43

相關問題