最近、私は各ユーザーが友人を持っているデータベースソリューションを設計しようとしています - それぞれの友人は権限を持っています。私は、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つの設計は、より優れたものですか?またはより良いデザインが存在する?
「ネストセットモデル」を検索 –
デザイン1はオプションでもありません – Strawberry