有没有办法在PostgreSQL中包含一个表中的一个列(同时保持一致性)?

时间:2018-04-14 14:18:59

标签: postgresql

我正在尝试构建一个数据库(在PostgreSQL 9.6.6中),该数据库允许一个"主列" (items.id)要复制到许多(自动生成的)表格中(例如rank1.id, rank2.id, rank3.id, ...)。只有items才会执行INSERT(或DELETE},并且当他们是新添加的id时应该也会在rankX表格中显示(或删除)。更具体一点:

items:
id | name | description

rank1:
id | rank

rank2:
id | rank

...

id总是相同的,并且总是每个表中的行数相同。但是,rankX.rank值会有所不同(想象用户对一系列图片的有趣程度进行排名 - 图片都具有相同的id,但不同的用户可能会对它们进行不同的排名)

我在想的是,当添加新用户并创建新的rankX表时,我会执行以下操作:

  1. rankX.id引用外键items.idON DELETE CASCADE
  2. 复制已存在的任何items.id
  3. 自动生成触发器功能,将INSERT items镜像到rankX
  4. 这似乎很麻烦且浪费空间,因为xxxx.id列的所有都是相同的,我最终将会有数百或数千个触发器函数。作为关系数据库的新手,我希望有一种更简单的方法来实现这一点。

    所以,我有几个问题:

    1. 是否有更有效的方法来定义我的表格,以便所有这些复制都不是必需的?
    2. 如果这是最佳方式,您能举例说明如何设置触发器(以及相关功能)吗?
    3. 我是否需要担心服务器上的空间不足,因为我创建了这种类型的触发器(可能很多)?

0 个答案:

没有答案