是否可以仅使用主键引用在列中插入值?

时间:2013-08-21 21:24:57

标签: postgresql

我有一个表'users'的列:

user_id(PK), user_firstname, user_lastname

和另一个包含列的“房间”:

event_id(PK), user_id(FK), user_firstname, user_lastname....(and more columns).

我想知道是否可以自动填充user_firstnameuser_lastname只知道user_id列。

与默认值user_firstname类似:“select users.user_firstname where users.user_id = user_id”

我不知道是否足够清楚......正如你所看到的,我在数据库中的知识非常狭窄。

3 个答案:

答案 0 :(得分:4)

user_firstname和user_lastname列不属于您的房间表。 user_id列引用users表,这就是您所需要的。 要选择数据,可以使用JOIN语句,如

SELECT R.event_id, R.user_id, U.user_firstname, U.user_lastname
FROM room AS R
JOIN users AS U ON R.user_uid = U.user_id

答案 1 :(得分:4)

您想要实现的目标可以通过JOIN来完成。他们将避免使用冗余的user_firstnameuser_lastname列。因此,您只需在查询房间表时从两个表中获取,并在结果集中获得额外的users列:

SELECT * FROM room AS r INNER JOIN users AS u ON r.user_id = u.user_id;

我们在这里做的事情叫做规范化。在您的案例room.user_id references user.user_id中,要处理的另一件重要事情是外键约束及其级联delete上的user最有可能级联到room,如果您要删除用户,而不是将其标记为已删除。

答案 2 :(得分:2)

这里的答案是侧面的问题。您想要事件表中的user_firstnameuser_lastname列。 user_id是整个User表的该行的代理。当您需要访问user_firstname时,您可以在公共列上对这两个表执行 JOIN