2010-11-27 99 views
3

我需要創建一個數據庫,其中有3個表,其中一個是朋友第二個是用戶第三個是PICTURES。我在用戶和朋友之間有一對多的關係。用戶和圖片表之間有一對多的關係。我在這裏有一個紅色的問題,標題是爲用戶配置文件構建一個數據庫,但它令人迷惑。他們有userid作爲外鍵,但我認爲圖片ID應該是用戶表中的外鍵。爲用戶配置文件創建mysql數據庫

還有一個問題是,我們可以在一個表中有兩個外鍵,因爲我有一對多的用戶表與圖片和朋友表的關係。抱歉,我的數據庫不好。我只需要一些幫助。謝謝

回答

1

您可以根據需要獲得儘可能多的外鍵按鍵。如果要將多張圖片鏈接到用戶,則爲PICTURES提供用戶標識是有意義的。如果你想讓每個用戶只有一張圖片,你可以給USERS一個圖片。

你也可以做到這一點。如果您想要查看主圖片(如肖像圖片或頭像),請參閱USERS.pictureid,並允許PICTURE具有用戶ID,以便您可以爲每個用戶管理一組圖片。您還可以爲用戶提供多個圖片,例如driverslicencepictureid,avatarpictureid,portraitpictureid等,每個圖片都是PICTURES.pictureid的外鍵。

你甚至可以考慮將每張圖片鏈接到多個用戶的可能性,比如Facebook,它允許每個用戶在多張圖片中被「標記」,但也允許在每張圖片中標記多個用戶。

在這種情況下,您需要一個表來附加這兩個。定義包含用戶標識和圖片標識的USERSPICTURES交叉表。您可以使用此表來定義用戶和圖片之間的交叉鏈接。

正如我前面所述,除了交叉表之外,您仍然可以爲每個用戶指定一個特定的圖片。

友情同樣如此。每個人都可以成爲其他人的朋友。所以在這種情況下,你也許可以用FRIENDS表來存儲兩個USERS之間的關係。給朋友表一個User1Id和一個User2Id,它允許存儲兩個用戶之間的連接(如果這是你想要的)。

+0

Golez感謝您的回覆。如果我給用戶ID和user2id,那麼我必須定義一對多的關係,我認爲只是存儲關係。圖片和用戶之間的其他關係是一對多的,因爲用戶可以有多張圖片。我有以下表格和關係。 – SilentCoder 2010-11-27 18:40:03

1

如果你想創造某種Facebook的朋友功能,那麼你需要引用同一張表。例如你的用戶表看起來是這樣的:

用戶ID,姓名,電子郵件,朋友)

朋友字段,則可以通過列出他們培訓相關(用戶ID)中引用大量的users'friends的的是這樣的:

「23,345,34,34,23」

所有在同一領域。您需要寫入列表朋友的任何函數都可以使用explode()來收集朋友詳細信息。

最後,是可以在一個表中有兩個外鍵,你可以有多少你需要的。

另外,更具擴展性的是在您的數據庫中包含以下表格。

USERS FRIENDS PICTURES

的朋友表,然後將列出這樣的兩個用戶之間的關係:

FRIENDS表

用戶1 = 34 < ---這是一個外鍵引用來自USERS的用戶ID表
user2 = 44 < ---這是一個引用來自USERS表的用戶ID的外鍵

+0

格蘭特感謝您的回覆。請看看我上面的評論。 – SilentCoder 2010-11-27 19:31:15

1

你可以在一個表中有兩個外鍵,雖然根據你的描述,你不會。朋友將有一個用戶FK和圖片將有一個用戶FK。這就是FK。

有些問題需要提出關於您的模式(例如,如果用戶是擁有用戶的朋友,他們的朋友仍然是用戶,那麼應該通過像友誼這樣的多對多鏈接表建立友誼),但根據你的描述,你應該用FKs來涵蓋,因爲你在一個表中沒有2個FKs。