gpt4 book ai didi

postgresql - 存储对多个表的外键引用的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 13:50:32 25 4
gpt4 key购买 nike

我有三个表,upvotes、comments 和 posts。由于评论和帖子都可以在这里投票,这是我目前正在使用的:

CREATE TABLE upvotes(
id PRIMARY KEY,
post_id INTEGER REFERENCES posts(id),
comment_id INTEGER REFERENCES comments(id),
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

CREATE TABLE comments(
id PRIMARY KEY,
body TEXT,
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

CREATE TABLE posts(
id PRIMARY KEY,
title TEXT,
body TEXT,
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

是否有某种方法可以在某种 View 或表格中同时表示帖子和评论,以便我可以更优雅地从赞成票中引用它,例如

CREATE TABLE upvotes(
id PRIMARY KEY,
item_id INTEGER REFERENCES items(id), /*this could be a post or a comment*/
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

有没有一种方法可以创建一个表或一个 View 项目来实现这一点?有没有更好的方法来对可以投票的项目集进行分组,以便它们都有自己唯一的主键 ID(我被困在这里的原因是因为帖子和评论可能具有相同的主键)。很抱歉,如果这是一个显而易见的问题,我在搜索时不确定如何表达这个问题,所以它可能是重复的。

最佳答案

像这样:

CREATE TABLE comments(
id PRIMARY KEY,
body TEXT,
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

CREATE TABLE posts(
id PRIMARY KEY,
title TEXT,
body TEXT,
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

改为使用:

CREATE TABLE user_input(
id PRIMARY KEY,
inputType smallint,
title TEXT,
body TEXT,
user_id INTEGER REFERENCES users(id),
time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
)

并为 id、inputType 添加索引。

关于postgresql - 存储对多个表的外键引用的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com