mysql - 标准化 MySQL 数据库中的联系人

标签 mysql database

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

userID*
userPass
firstname
surname
role
contacts

好的,这个系统是为教职员工和学生准备的,用户可以将联系人添加到他们的列表中。我正在努力构建我的数据库以有效地存储联系人。基本上我不确定如何使用联系人列进行规范化。

例如……

userID* userPass firstname surname 角色联系人 1234 2012海绵宝宝学生 1345 1234 2012海绵宝宝学生 3421 1234 2012海绵宝宝学生 1445

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

最佳答案

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

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;

关于mysql - 标准化 MySQL 数据库中的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23109504/

相关文章:

database - Cassandra 建模问题

java - 以批处理模式选择 JDBC SQL

javascript - 将数据库和服务器添加到 javascript 引擎

php - 如何从输入在mysql中输入时间戳

mysql - 使用连接嵌套子查询

database - Postgres维护的正确顺序

mysql - 重命名具有带触发器的表的数据库

php - 如何将多维与特定值合并

java - Hibernate一对多问题

mysql - 将 MySQL 字段重置为默认值