Son zamanlarda, "kullanıcı ilişkisi" hakkında bir veritabanı çözümü tasarlamaya çalışıyorum — her kullanıcının arkadaşları vardır, her arkadaşın bir yetkisi vardır (yetki, ilişkilerinin arasındaki gizlilik düzeyini tanımlar).İlişkisel veritabanı tasarımı (MySQL kullanarak)
tasarım 1: databse böyle user_id, yaş, e-posta ... gibi tüm kullanıcıların taban bilgilerini açıklamak dair bir "user_table" vardır ve her MySQL programında yepyeni am, burada benim iki veritabanı tasarımı kullanıcısı bir "friends_table" değerine sahiptir, "friends_table" arkadaşın user_id'ini içerir (arkadaşınızın bilgisinden sorgulanabilir), her "friend_table", "user_table" (her bir friend_table'ın adı benzersizdir) içinde depolanan tablo adıyla sorgulanabilir.
user_table
+------------------------+
| user_name(primary key) |
+------------------------+
| password |
+------------------------+
| email |
+------------------------+
| .... |
+------------------------+
| .... | friend_table
+------------------------+ ----------> +------------------------------+
| friend_table_name | | id(primary key) |
+------------------------+ +------------------------------+
| user_name |
+------------------------------+
| authority |
+------------------------------+
| .... |
+------------------------------+
tasarım 2: databse bir "user_table" ve "relationship_table" vardır. "relationship_table" tüm kullanıcının ilişkisini tanımlar.
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 | *** |
+-----------+-----------+---------------+---------------+
Jim'in arkadaşı sorgulamak istiyorsanız, ben kullanın: tasarım 2
user_table relationship_table
+------------------------+ +------------------------+
| user_name(primary key) | | id(primary key) |
+------------------------+ +------------------------+
| password | | user_name |
+------------------------+ +------------------------+
| email | | friend_name |
+------------------------+ +------------------------+
| .... | | authority |
+------------------------+ +------------------------+
| .... | | .... |
+------------------------+ +------------------------+
baz Jim adlı bir kullanıcı 4 arkadaşı Lisa, Tom, Jerry ve Johnny tbales aşağıda göstermek vardır SQL komutu: 10 Veritabanı performansı, bu 2 tasarım hangisi daha iyi olur? veya daha iyi bir tasarım var mı?
"İç içe geçmiş model" için arama yap –
design 1 bile bir seçenek değildir – Strawberry