Postgresql 将外键引用存储到多个表的最佳方式是什么?

Postgresql 将外键引用存储到多个表的最佳方式是什么?,postgresql,Postgresql,我有三个表格:投票、评论和帖子。由于评论和帖子都可以向上投票,所以我现在使用的是: 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 D

我有三个表格:投票、评论和帖子。由于评论和帖子都可以向上投票,所以我现在使用的是:

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()
)
是否有某种方式可以在某种视图或表格中同时表示帖子和评论,这样我可以更优雅地从上面引用它,例如

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()
)
有没有一种方法可以创建一个表或一个视图项来实现这一点?有没有更好的方法来对可以被提升投票的项目集进行分组,以便它们都有自己唯一的主键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添加索引。

类似以下内容:

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添加索引。

我不确定我是否完全理解您的问题。你能不能提供不同表的模式,这样我就可以看到它们之间的关系了?基本上,我想把帖子和评论分组在一起,这样我就可以有一个唯一的id来标识帖子或评论。现在我的问题是帖子和评论有各自的主键,所以如果我有id,我不知道它是帖子还是评论。我编辑了我的原始帖子,以包含帖子和评论的模式。您是否可以使用一个表,比如“UserInput”,它有一个主键,然后是一个辅助标识符列,将行条目编码为帖子或评论?此表中的其他列是上面两个表中的列的并集。这不是最有效的解决方案,但它解决了你的问题。这是我的本能,我希望有人会有更好的方法,但我最终可能会这样做。谢谢什么是
用户
#我不确定我是否完全明白你的问题。你能不能提供不同表的模式,这样我就可以看到它们之间的关系了?基本上,我想把帖子和评论分组在一起,这样我就可以有一个唯一的id来标识帖子或评论。现在我的问题是帖子和评论有各自的主键,所以如果我有id,我不知道它是帖子还是评论。我编辑了我的原始帖子,以包含帖子和评论的模式。您是否可以使用一个表,比如“UserInput”,它有一个主键,然后是一个辅助标识符列,将行条目编码为帖子或评论?此表中的其他列是上面两个表中的列的并集。这不是最有效的解决方案,但它解决了你的问题。这是我的本能,我希望有人会有更好的方法,但我最终可能会这样做。谢谢什么是
用户
#装袋工