规范化MySQL数据库中的联系人

时间:2014-04-16 12:29:04

标签: mysql database

我正在尝试使用登录创建聊天应用程序。我正在使用MySQL数据库来存储用户数据。我的表名为userData。它包含:

userID*
userPass
firstname
surname
role
contacts

好的,所以这个系统适用于员工和学生,用户可以将联系人添加到他们的列表中。我正在努力构建我的数据库以有效地存储联系人。基本上我不知道如何使用contacts列进行规范化。

例如......

userID* userPass firstname surname role contacts 1234 2012 Sponge Bob Student 1345 1234 2012 Sponge Bob Student 3421 1234 2012 Sponge Bob Student 1445

我是否适合为每个用户ID创建一个表来存储联系人?我在JAVA中使用MySQL数据库进行此操作。将不胜感激。

1 个答案:

答案 0 :(得分:2)

您应该有两个表,一个包含用户数据,另一个包含联系人。然后可以使用共享标识符将其加入。

CREATE TABLE userData (userID int primary key, userPass varchar(32), firstname varchar(32), surname varchar(32), roleID int);
CREATE TABLE roles (roleID int primary key, rolename char(32));
CREATE TABLE contacts (userID int, contactID int);

我抛出了角色'在那里作为一个例子。然后,您可以根据需要加入这些,例如:

SELECT contacts.* FROM contacts 
JOIN userData USING (userID)
WHERE userData.userID=1234;

或者进一步采取并从规范化中受益:

SELECT CONCAT(ud.firstName,' ',ud.surName),
       CONCAT(cd.firstName,' ',cd.surName)
 FROM contacts
 JOIN userData AS cd on (cd.userID=contacts.contactID)
 JOIN userData AS ud on (ud.userID=contacts.userID)
 WHERE
  contacts.userID=1234;