2016-03-29 3 views
0

В последнее время я пытаюсь создать решение для базы данных, посвященное «пользовательским отношениям» - у каждого пользователя есть друзья, каждый из которых имеет собственный авторитет (авторитет описывает уровень конфиденциальности между их отношениями). Я совершенно новое в программе MySQL, вот мой дизайн две базы данных:Дизайн базы данных отношений (с использованием MySQL)

дизайн 1: Databse имеет «user_table», которые описывают основные сведения всех пользователей, таких как user_id, возраст, адрес электронной почты ... и каждый пользователь имеет «friends_table», «friends_table» содержит имя пользователя user_id (может быть запрошена информация друга), каждая «friend_table» может быть запрошена по его имени таблицы, хранящемуся в «user_table» (каждое имя friend_table уникально).

user_table 
+------------------------+ 
| user_name(primary key) | 
+------------------------+ 
|  password  | 
+------------------------+ 
|   email   | 
+------------------------+ 
|   ....   | 
+------------------------+ 
|   ....   |    friend_table 
+------------------------+ ----------> +------------------------------+ 
| friend_table_name |    |   id(primary key)  | 
+------------------------+    +------------------------------+ 
             |   user_name   | 
             +------------------------------+ 
             |   authority   | 
             +------------------------------+ 
             |    ....    | 
             +------------------------------+ 

дизайн 2: Databse имеет "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, пользователь по имени Джим имеет 4 друга Лиза, Том, Джерри и Джонни, что tbales как показано ниже:

user_table    
+-----------+-----------+---------------+ 
| user_name | password |  email | 
+-----------+-----------+---------------+ 
| Jim | ***** | [email protected] | 
+-----------+-----------+---------------+ 
| LiLei | ***** | [email protected] | 
+-----------+-----------+---------------+ 
| .... | ***** |  ....  | 
+-----------+-----------+---------------+ 
| .... | ***** |  ....  | 
+-----------+-----------+---------------+ 

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  |  ***  | 
+-----------+-----------+---------------+---------------+ 

, если я хочу, чтобы запросить друг Джима, я использую SQL-команда:

select friend_name from relationship_table where user_name='Jim'; 

Рассмотрите результаты работы с базой данных, эти 2 варианта, которые лучше? или существует лучший дизайн?

+0

Поиск «модели вложенного набора» –

+1

дизайн 1 даже не вариант – Strawberry

ответ

0

В принципе даже друзья - это пользователи (предполагается), поэтому добавьте всех людей в один стол.

Так Основные таблицы будет

UserTable (Идентификатор_пользователя, user_name [первичный ключ], пароль, адрес электронной почты, ....) Идентификатор_пользователя -> только простое автоматическое приращение числа

AuthorityTable (AuthorityID, Authority_name, разрешение, ....) AuthorityID -> только простое автоматическое приращение числа

UserRelationShipTable (URID, Идентификатор_пользователя, FriendsWith, AuthorityID)

URID -> просто простой номер автоинкремента UserID -> здесь находится внешний ключ от UserTable FriendsWith -> также userID, который похож на друзей AuthorityID -> внешний ключ от AuthorTable.

Смежные вопросы