我正在尝试使用登录创建聊天应用程序。我正在使用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数据库进行此操作。将不胜感激。
答案 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;