2016-03-29 9 views
0

最近、私は各ユーザーが友人を持っているデータベースソリューションを設計しようとしています - それぞれの友人は権限を持っています。私は、MySQLのプログラムに全く新しいです、ここに私の2つのデータベースの設計です:関係データベース設計(MySQLを使用して)

デザイン1:databseは、user_idは、年齢、電子メールとしてすべてのユーザーの基本情報を記述している「user_table」を持っている...、と各ユーザには "friends_table"があり、 "friends_table"には友人のuser_id(友人の情報を問い合わせることができます)が含まれており、それぞれの "friend_table"は "user_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

基本的に友人もユーザー(想定)なので、すべての人を1つのテーブルに追加します。 >単純な自動インクリメント番号です

AuthorityTable -

だから、基本的なテーブルは

USERTABLE(ユーザーID、USER_NAME [主キー]、パスワード、電子メール、....) ユーザーIDになります(AuthorityID、Authority_name、許可、....) AuthorityID - >は、単純な自動インクリメント数

UserRelationShipTable(URID、ユーザID、FriendsWith、AuthorityID)

URID - >単純な自動インクリメント番号 ユーザーIDである - AuthorityTableから>外部キー - >も友達に AuthorityIDに似たユーザーIDである - >ここFriendsWith USERTABLE から外部キーです。

関連する問題