ER 数据库 = 实体和关系数据库通过有一个包含实体“用户”的表和一个用于将用户连接到另一个用户的关系“朋友”的表来处理它。
对此的查询可以是:
SELECT users.*
FROM friends
LEFT JOIN users ON (users.user_id = friends.friend_id)
WHERE friends.user_id = :user
示例:
用户表,用于实体用户
CREATE TABLE user (user_id SERIAL, name TINYTEXT NOT NULL);
示例用户
user_id | name
1 | Anna
2 | Bertil
3 | Carl
4 | David
5 | Erik
一个朋友表,用于两个用户之间的关系,(不是每个用户一个,只有一个)
CREATE TABLE friends (
user_id BIGINT UNSIGNED NOT NULL,
friend_id BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (user_id, friend_id)
);
如果 Anna 将 Beril 和 Carl 添加为好友,Carl 添加 David 和 Erik 作为好友,则表格的内容将是:
user_id | friend_id
1 | 2
1 | 3
3 | 4
3 | 5
如果我们想列出 Annas 朋友的名字,并且我们都知道 Annas user_id = 1,那么我们可以使用这个查询(就像上面的那个)
SELECT users.name
FROM friends
LEFT JOIN users ON (users.user_id = friends.friend_id)
WHERE friends.user_id = 1