[英]A relationship database design (using MySQL)
最近,我正在尝试设计一个有关“用户关系”的数据库解决方案-每个用户都有朋友,每个朋友都有一个权限(权限描述了他们之间关系的隐私级别)。 我是MySQL程序的新手,这是我的两个数据库设计:
设计1 :databse有一个“ user_table”,用于描述所有用户的基本信息,例如user_id,年龄,电子邮件..., 每个用户都有一个“ friends_table”,“ friends_table”包含朋友的user_id(可以查询朋友的信息) ,可以通过存储在“ user_table”中的表名称来查询每个“ friend_table”(每个friend_table的名称都是唯一的)。
user_table
+------------------------+
| user_name(primary key) |
+------------------------+
| password |
+------------------------+
| email |
+------------------------+
| .... |
+------------------------+
| .... | friend_table
+------------------------+ ----------> +------------------------------+
| friend_table_name | | id(primary key) |
+------------------------+ +------------------------------+
| user_name |
+------------------------------+
| authority |
+------------------------------+
| .... |
+------------------------------+
设计2 :数据库具有一个“ user_table”和一个“ relationship_table”。 “ relationship_table”描述所有用户的关系。
user_table relationship_table
+------------------------+ +------------------------+
| user_name(primary key) | | id(primary key) |
+------------------------+ +------------------------+
| password | | user_name |
+------------------------+ +------------------------+
| email | | friend_name |
+------------------------+ +------------------------+
| .... | | authority |
+------------------------+ +------------------------+
| .... | | .... |
+------------------------+ +------------------------+
根据设计2,一个名为Jim的用户有4个朋友Lisa,Tom,Jerry和Johnny,这些消息如下所示:
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(UserID,user_name [主键],密码,电子邮件等。)UserID->只是一个简单的自动递增数字
AuthorityTable(AuthorityID,Authority_name,Permission,....)AuthorityID->只是一个简单的自动递增数字
UserRelationShipTable(URID,UserID,FriendsWith,AuthorityID)
URID->只是一个简单的自动增量号UserID->这是UserTable中的外键FriendsWith->也是userID,它类似于Friends AuthorityID-> AuthorityTable中的外键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.