关系数据库设计(使用MySQL)
最近,我试图设计一个关于“用户关系”的数据库解决方案——每个用户都有朋友,每个朋友都有一个权限(权限描述了他们之间关系的隐私级别)。我是MySQL程序的新手,以下是我的两个数据库设计: 设计1:数据库有一个“用户表”,描述所有用户的基本信息,如用户id、年龄、电子邮件,和每个用户都有一个“friends\u table”,“friends\u table”包含朋友的用户id(可以查询朋友的信息),每个“friend\u table”都可以通过其存储在“user\u table”中的表名进行查询(每个friends\u table的名称是唯一的) 设计2:数据库有一个“用户表”和一个“关系表”。“关系表”描述了所有用户的关系关系数据库设计(使用MySQL),mysql,database,database-design,relationship,Mysql,Database,Database Design,Relationship,最近,我试图设计一个关于“用户关系”的数据库解决方案——每个用户都有朋友,每个朋友都有一个权限(权限描述了他们之间关系的隐私级别)。我是MySQL程序的新手,以下是我的两个数据库设计: 设计1:数据库有一个“用户表”,描述所有用户的基本信息,如用户id、年龄、电子邮件,和每个用户都有一个“friends\u table”,“friends\u table”包含朋友的用户id(可以查询朋友的信息),每个“friend\u table”都可以通过其存储在“user\u table”中的表名进行查询(
user_table relationship_table
+------------------------+ +------------------------+
| user_name(primary key) | | id(primary key) |
+------------------------+ +------------------------+
| password | | user_name |
+------------------------+ +------------------------+
| email | | friend_name |
+------------------------+ +------------------------+
| .... | | authority |
+------------------------+ +------------------------+
| .... | | .... |
+------------------------+ +------------------------+
基于design 2,一个名为Jim的用户有4个朋友Lisa、Tom、Jerry和Johnny,tbales展示如下:
user_table
+-----------+-----------+---------------+
| user_name | password | email |
+-----------+-----------+---------------+
| Jim | ***** | Jim@mail.com |
+-----------+-----------+---------------+
| LiLei | ***** | LiLei@gl.com |
+-----------+-----------+---------------+
| .... | ***** | .... |
+-----------+-----------+---------------+
| .... | ***** | .... |
+-----------+-----------+---------------+
relationship_table
+-----------+-----------+---------------+---------------+
| id | user_name | friend_name | authority |
+-----------+-----------+---------------+---------------+
| 1 | Jim | Lisa | *** |
+-----------+-----------+---------------+---------------+
| 2 | Jim | Tom | *** |
+-----------+-----------+---------------+---------------+
| 3 | Jim | Jerry | *** |
+-----------+-----------+---------------+---------------+
| 4 | Jim | Johnny | *** |
+-----------+-----------+---------------+---------------+
| 5 | Qing | Jim | *** |
+-----------+-----------+---------------+---------------+
| 6 | Feng | Tom | *** |
+-----------+-----------+---------------+---------------+
| 7 | Guang | Tom | *** |
+-----------+-----------+---------------+---------------+
如果我想查询Jim的朋友,我使用SQL命令:
select friend_name from relationship_table where user_name='Jim';
考虑到数据库性能,这两种设计哪一种更好?或者存在更好的设计?基本上,即使朋友也是用户(假设),因此将所有人添加到一个表中 所以基本的表格是 UserTable(用户ID、用户名[主键]、密码、电子邮件等) UserID-->只是一个简单的自动递增数字 AuthorityTable(AuthorityID、Authority\u名称、权限等) AuthorityID-->只是一个简单的自动递增数字 UserRelationShipTable(URID、UserID、FriendsWith、AuthorityID) URID-->只是一个简单的自动递增数字 UserID-->这里是UserTable中的外键 FriendsWith-->也是类似于Friends的用户ID AuthorityID-->AuthorityTable中的外键
搜索“嵌套集模型”设计1甚至不是一个选项
select friend_name from relationship_table where user_name='Jim';