簡體   English   中英

如何設計數據庫,以便每個條目都可以存儲對其他條目的引用?

[英]How to design a database so each entry can store reference to other entries?

我有一個數據庫,每個條目都代表一個用戶。 現在,我希望每個用戶都可以有IE朋友,每個條目都將有一個“朋友”字段,並且它將有代表其他用戶的多個項目。

我不確定那是否有可能,如果不能,我很想知道如何正確地做到這一點。

如果重要的話,我的數據庫是MySQL。

謝謝。

使用另一個稱為friends表格

例如

users table
-----------
id    name
1     tom
2     peter
3     jane

現在,如果您希望用戶1與2和3成為朋友,則您的表如下所示

friends table
-------------
user_id    friend_id
1          2
1          3

為了擴展@juergend的答案,我將采用以下方法(我使用了他已經建議的用戶名):

create table users (
    id      int not null auto_increment primary key,
    name    varchar(20)
);

create table friends (
    user1 int not null references users(id),  
    user2 int not null references users(id)
);

insert into users (name) values ('tom'), ('peter'), ('jane');

select * from users;
+----+-------+
| id | name  |
+----+-------+
|  1 | tom   |
|  2 | peter |
|  3 | jane  |
+----+-------+
3 rows in set (0.00 sec)

-- make jane and peter friends:
insert into friends (user1, user2) values (
    (select id from users where name='jane'),
    (select id from users where name='peter')
);

select u1.name, u2.name 
  from users u1 
  join friends f on u1.id=f.user1
  join users u2 on f.user2=u2.id;     
+------+-------+
| name | name  |
+------+-------+
| jane | peter |
+------+-------+
1 row in set (0.00 sec)

現在,這取決於您是否希望自己的友誼是對稱的(即Jane / Peter <=> Peter / Jane)。 如果是這樣,您將需要在friends表中有兩個條目。

您必須創建兩個saprate表才能處理多個朋友條目,如下所示。

表'user'user_id user_name ...

表“朋友” ID user_id_1 user_id_2 ...

您將必須定義每個用戶的ID(稱為主鍵(只要所有用戶名都是唯一的,用戶名將作為ID))。

然后定義另一個表,稱為“朋友”,該表將包含以下行

用戶名| 朋友名用戶名| 朋友名字

這種結構稱為一對多關系。

表格圖片說明了親子關系

users table         friends table       

id  username    row_id  user    friend
1   ali         1   ali khurram
2   khurram     2   ali tazeen
3   tazeen      3   ali babar
4   babar       4   khurram ali
                5   khurram babar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM