我已经在Postgresql 9.3中搜索了这个问题,但没有看到任何具有足够答案的解决方案。Psql 文档也没有帮助。
假设我有两个表:
- 用户(用户名、密码、ID)
- 数据(标题、描述、ID)
我已经创建了一个外键,但我不太清楚它是如何工作的。我希望用户能够查看和编辑他们的数据,并且我希望数据与用户相关。这是我们在博客、Facebook或Twitter上经常看到的那种东西。
如何在表之间创建关系,以便用户提交的每条数据都与它们相关联?
假设两个表上的 id 都是用户的 id,则获取所有用户数据所需的是:
SELECT u.username, d.title, d.description
FROM users u
LEFT JOIN data d ON d.id = u.id
如果没有数据,d.titlea 和 d.description 将为 NULL。如果您只希望用户拥有数据,只需将LEFT JOIN
替换为JOIN
编辑:(基于评论)
如果您希望用户拥有数据的所有权,并且数据一次只属于某个用户,则只需在data
表中拥有user_id
。我假设表中的id
是用户的。在这种情况下,在创建表时,您需要执行以下操作:
CREATE TABLE data (
id SERIAL,
title varchar(50) NOT NULL,
description varchar(255),
user_id references users(id) -- this is your foreign key
);
然后再次查询user_id调整:
SELECT u.username, d.title, d.description
FROM users u
LEFT JOIN data d ON d.user_id = u.id