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

Postgresql 是否可以仅使用主键引用在列中插入值?,postgresql,Postgresql,我有一个“users”表,其中包含以下列: user_id(PK), user_firstname, user_lastname event_id(PK), user_id(FK), user_firstname, user_lastname....(and more columns). 还有一张桌子“房间”,上面有列: user_id(PK), user_firstname, user_lastname event_id(PK), user_id(FK), user_firstname,

我有一个“users”表,其中包含以下列:

user_id(PK), user_firstname, user_lastname
event_id(PK), user_id(FK), user_firstname, user_lastname....(and more columns).
还有一张桌子“房间”,上面有列:

user_id(PK), user_firstname, user_lastname
event_id(PK), user_id(FK), user_firstname, user_lastname....(and more columns).
我想知道是否可以只知道
user\u id
列就自动填写
user\u firstname
user\u lastname

与之类似,
user\u firstname
的默认值类似:“选择users.user\u firstname where users.user\u id=user\u id”


我不知道是否足够清楚……正如您所见,我在数据库中的知识非常有限。

user\u firstname和user\u 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

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

您想要实现的目标可以通过
JOIN
s来实现。它们将避免那些冗余的
user\u firstname
user\u lastname
列。因此,在查询房间表时,您只需从两个表中提取,就可以将
用户的额外列
放入结果集中:

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

我们在这里做的事情被称为规范化。另一个需要注意的重要事项是外键约束及其级联,在您的例子中是
room.user\u id引用user.user\u id
。如果您想删除用户,则
用户上的
删除
最有可能会级联到
房间
,而不是将其标记为已删除。

您想要实现的功能可以通过
加入
s来实现。它们将避免那些冗余的
user\u firstname
user\u lastname
列。因此,在查询房间表时,您只需从两个表中提取,就可以将
用户的额外列
放入结果集中:

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

我们在这里做的事情被称为规范化。另一个需要注意的重要事项是外键约束及其级联,在您的例子中是
room.user\u id引用user.user\u id
。如果您想删除用户,则
用户上的
删除
很可能应级联到
房间
,而不是将其标记为已删除。

这里的答案与问题无关。事件表中不需要
user\u lastname
user\u lastname
列。
user\u id
是整个用户表中该行的代理。当您需要访问
user\u firstname
时,您可以将公共列上的两个表连接起来。

这里的答案与问题是横向的。事件表中不需要
user\u lastname
user\u lastname
列。
user\u id
是整个用户表中该行的代理。当您需要访问
user\u firstname
时,可以在公共列上连接两个表。

如果您有FK
user\u id
,为什么要将
user\u firstname
user\u firstname
存储在
room
中?因为我想输出一个类似以下的查询:SELECT*FROM room;然后使用PHP将其编码为JSON,这样我就可以访问用户名和用户名为什么要将
user\u firstname
user\u lastname
存储在
room
中,如果你有FK
user\u id
,因为我想输出一个查询,比如:SELECT*FROM room;并使用PHP将其编码为JSON,这样我就可以访问用户_firstname和用户_lastnamehm。。谢谢大家的回答!我想我现在明白了:嗯,我明白了。。谢谢大家的回答!我想我现在明白了:D