2010-07-18 91 views
0

我想讓我的數據庫支持一家公司擁有很多用戶,我該如何做?
示例

用戶表(UID,用戶名,密碼)
公司表我該怎麼辦 ?我應該在php中創建一個數組,例如1241,423,4123 * uid,它將插入到公司所有者的用戶列表中?還是有更好的主意?哪種數據庫類型適合數組?

+0

在數據庫的一個字段中存儲數組是一個糟糕的做法。這使得查詢數據變得更加困難。 – HLGEM 2010-07-19 22:06:38

回答

10

如果您希望每個用戶有一個(永不更多)公司,你應該有:

  • user
    • uid
    • username
    • ...
    • company_id
  • company
    • company_id
    • company_name
    • ...

然後,user.company_id將是一個foreign key,引用company.company_id

,然後,你存儲:

  • 一個在user線爲每個用戶
    • 引用合適的公司的ID爲用戶
    • 這是行權的company_idcompany表中。
  • 而在company

一行每家公司有存儲在公司表中沒有用戶的相關信息 - 而且每個用戶「點」到一個企業,一個公司可以有多個用戶。


將數據存儲爲像你所建議的數組絕對不是一個好主意 - 只是不是關係數據庫的工作方式。


如果每個用戶都可以擁有幾家公司,每comparny可以有多個用戶,你必須增加第三臺(一join table,這將表明,爲每一個用戶(一個或多個),以哪個公司(IES)它們所連接的:

  • user
    • uid
    • username
    • ...
  • company
    • company_id
    • company_name
    • ...
  • user_company
    • uid
    • company_id

在這種情況下,沒有在company表中沒有用戶相關的東西,並沒有在user表中沒有與公司有關的東西:那些之間的聯繫在user_company表中。

當然,user_company.uid將是user.uid的外鍵; user_company.company_id將是company.company_id的外鍵。

+0

帕斯卡你什麼時候睡覺?呵呵,很好的答案。多對多呢? – 2010-07-18 15:27:51

+1

@亞當:好吧,現在是在這裏下午5點30分,所以沒有時間睡覺;-) ;;;對於多對多的部分,你必須使用一個連接表,就像我的答案的第二部分*所描述的那樣(我已經編輯過,所以在發表評論之前你可能沒有看到這個部分)* – 2010-07-18 15:31:59

+0

@馬丁是否是級聯delate和更新(多對多)? – 2010-07-18 15:51:03

1

有一個更好的主意 - 它被稱爲交叉表連接。你所做的是創建第三個表格,其中包含兩列。在這兩列中,您存儲了連接到彼此的表的主鍵。

這個想法是,你正在創建一個公司和用戶之間的關係。在關係數據庫中,通過使用外鍵在表之間指示關係。

當然,這隻適用於想要將多個用戶連接到多個公司(「M-N」關係)的情況。如果您想將多個用戶連接到單個公司,只需將公司ID的列添加到用戶。