繁体   English   中英

关系数据库设计(使用MySQL)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM