2014-02-18 58 views
1

我是MySQL的新手,但在各種編程語言中擁有非常紮實的背景。MySQL設計澄清

現在我正在設計我的第一個數據庫。我瞭解MySQL表的基本功能以及關係數據庫是什麼,但是我在解決一些問題時遇到了困難,所以我發佈了這個幫助(搜索沒有奏效,我一直使用的術語是太籠統了,我不知道如何縮小範圍)。這裏是我卡在哪裏:

我想拉Facebook的數據,特別是興趣(「喜歡」)和用戶位置。

如果這是一些面向對象的語言,我只是創建一個用戶的數據結構,其中的所有信息(Facebook ID,興趣作爲一個數組,位置),但我不知道如何在MySQL中重新創建。

現在,我的思維創造一個用戶

  • Facebook的ID(主鍵?)
  • 名稱
  • 位置
  • 註冊日期

然後創建一個的興趣表與

  • 利息名(索引,按字母順序排序?)
  • 也許用戶提供這種興趣
  • 是涉及回給每個用戶

我覺得這是我的欠缺外鍵計數的理解進來。我如何在MySQL中複製列表或數組的概念,使我能夠將每個興趣映射到每個「喜歡」這個興趣的用戶?

任何其他建議,想法或指導優秀教程網站的方式都將不勝感激。我是一個有觸覺的學習者,所以讓我的手弄髒教程對我來說會很好,但我還沒有找到一個涵蓋這個。

回答

3

您可以使用將interests錶鏈接到user表的第三個表。只會有一個記錄,如果用戶喜歡這種興趣:

User_Interest

Interest_ID 
User_ID 

要獲得用戶的列表,包括他們所有的利益:

SELECT u.Name, i.Interest_Name 
FROM Users AS u 
INNER JOIN User_Interest AS ui ON ui.User_ID = u.ID 
INNER JOIN interests AS i ON i.ID = ui.Interest_ID 
WHERE u.Name = 'Tom Jones' 

要得到一個特別感興趣的列表和所有喜歡的用戶:

SELECT u.Name, i.Interest_Name 
FROM Users AS u 
INNER JOIN User_Interest AS ui ON ui.User_ID = u.ID 
INNER JOIN interests AS i ON i.ID = ui.Interest_ID 
WHERE i.Interest_Name = 'Hiking' 
+0

感謝靈格的快速反應。幾個問題根據你的回答和克里姆森的回答。多個用戶可能擁有數千種興趣是否可以?相反,預計我會爲每個User_ID看到大量的行嗎?這種第三映射表是多對多關係的標準嗎? 謝謝! –

+0

是的,它是鏈接多對多關係的標準。它將能夠處理與INSERT一樣多的記錄。所以,千千萬萬的利益***應該不成問題。您正在使用主鍵和外鍵,因此它們將被索引並幫助自然加速。 – Linger

+0

另一點:在User_Interest表中,確保在「Interest_ID」和「User_ID」上合併***合成鍵***。這將確保您不會對同一用戶獲得任何重複興趣。你可以用*** StudentCourseEnrollment表格在*** Krimson的***答案中直觀地看到這一點。 – Linger

1

這種設置稱爲「多對多」關係。要做到這一點,你需要3張桌子。 2個包含您的數據的表,最後一個表包含一個映射表。
這裏是一個多對多的關係,船,其中兩個對象是學生和課程 An example of a many-to-many relation


實例的實例

你的用戶表看起來像這樣:
(ID_User, User_Name, ...)

您的興趣表如下所示:
(ID_Interest, Interest_Name, ...)

現在你的映射表看起來就像這樣:
(ID_User, ID_Interest)


樣本數據

現在,讓我們把一些數據表中

User_Table 
------------------------ 
ID_user | Username | ... 
------------------------ 
    1  John 
    2  Mark 
    3  Foo 
    4  Bar 


Interest_Table 
---------------------------------- 
ID_Interest | Interest_Name | ... 
---------------------------------- 
    001   Pop 
    002   Rock 
    003   Alternative 
    004   Rap 


User_To_Interest (Mapping Table) 
--------------------------- 
ID_user | ID_Interest 
--------------------------- 
    1   001 
    1   003 
    3   002 
    2   004 
    4   001 


檢查這個

好了,所以在這裏,如果你分析一下已經成立,我們正在映射用戶的利益。映射表排序將來自User對象的線添加到興趣對象。