2016-01-16 72 views
0

我試圖找出用戶屬於一個組織並且在組織表內有一個字段的場景的最佳數據庫結構與該組織相關聯的用戶。在users表中,我有一個organization_id的外鍵,它通過了與用戶關聯的組織的價值,但在organization表上,我目前正在計劃創建一個members列,以添加電子郵件地址(以逗號分隔)針對與該組織相關聯的每個用戶。我計劃在檢索記錄的WHERE條件中使用此列。這是做到這一點的聰明方式,還是我應該創建另一個名爲members的表,關聯usersorganization表?MySQL數據庫結構將值推送到一個字段或創建新表

這裏是我的organization表:

CREATE TABLE `organization` (
    `organization_id` int(11) NOT NULL AUTO_INCREMENT, 
    `organization_name` varchar(255) DEFAULT NULL, 
    `admin` varchar(255) DEFAULT NULL, 
    `members` varchar(255) DEFAULT NULL, 
    `createdAt` datetime NOT NULL, 
    `updatedAt` datetime NOT NULL, 
    PRIMARY KEY (`organization_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 

這裏是我的user表:

CREATE TABLE `user` (
    `user_id` int(11) NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(255) DEFAULT NULL, 
    `last_name` varchar(255) DEFAULT NULL, 
    `email` varchar(255) DEFAULT NULL, 
    `password` varchar(255) DEFAULT NULL, 
    `createdAt` datetime NOT NULL, 
    `updatedAt` datetime NOT NULL, 
    `organization_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`user_id`), 
    UNIQUE KEY `email` (`email`) 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 
+0

這是一個多對多的關係嗎? (用戶是否屬於多個組織?)如果是這樣,您可能希望擁有一個會員表,該會員表記錄了org_id與user_id的所有配對,而不是在任何一個父表中都有重複的信息。 – Stidgeon

+0

用戶只能屬於一個組織 – cphill

回答

0

因爲它是一個一對多的(一個組織有許多用戶,但用戶只能屬於一個組織),我會做這樣的結構:

user 
user_id first_name . . . email org_id 
--------------------------------------------- 
    (PK)         (FK) 

organization 
org_id  org_name . . . 
------------------------------ 
    (PK) 

。 。 。這就是你所擁有的。

要獲得組織的所有成員(以及他們的電子郵件或其他信息):

SELECT u.user_id, u.email 
FROM user u 
WHERE org_id = (whatever value you want) 

插入USER_ID或電子郵件(或「會員」)入組織表將是不必要的重複,因爲用戶已經通過org_id鏈接到org's。您可以從上述查詢中獲得組織郵件列表。

如果您有多對多的關係,我只會創建一個成員表。

如果這是缺少的東西,讓我知道,我會回到繪圖板。

+0

感謝此。如果我在表格中插入一個值,該怎麼辦? e.x. 'organization.org_members'當前包含'test @ test.com'的值,然後發生一個插入操作,將'test2 @ test.com'附加到已經存在的值上,所以'organization.org_members = [email protected] ,test2 @ test.com' – cphill

+0

我不喜歡在一個領域有多個值 - 以後工作太多。在用戶表中使用org_id時,可以使用上面的查詢爲組織提取所有電子郵件(或其他)。編輯回答(希望)解釋我的想法。 – Stidgeon

+0

適合我。謝謝! – cphill

相關問題