【问题标题】:How to reference a specific line in a PostgreSQL table?如何引用 PostgreSQL 表中的特定行?
【发布时间】:2015-04-13 18:41:40
【问题描述】:

我的问题很简单: 我有一列引用人,在所有这些人中,只有一个人具有特定的地位。在 PostgreSQL 数据库中表示这一点的最佳方式是什么?

我的第一个想法是创建一列布尔值,所有值都等于 false,但针对特定的人。这意味着我还需要检查整个专栏中是否只有一个为真。但是,这似乎不是最优的,因为这意味着每列多一个位,并且由于可能有相当多的行,它会浪费数据。 第二种解决方案是创建第二个表来引用此人。然而,这意味着只用一行创建一个表......

您对如何解决此问题还有其他想法吗? 谢谢!

【问题讨论】:

  • 1记录表有什么问题?
  • 我只是想知道是否有更简单的解决方案我不会想到! ;)
  • 我应该说,我想不出使用1记录表有什么问题,或者更好的方法。

标签: sql database postgresql pgadmin


【解决方案1】:

PostgreSQL 有一个inheritance 系统,可以很好地解决这样的问题。

CREATE TABLE people (...);
CREATE TABLE special_person ( ) INHERITS (people);

您可以select * from people 提取所有记录,同时仍向special_person 添加专有列。

【讨论】:

  • 这是一个不错的功能,感谢您让我们意识到这一点。 “5.8.1. 警告”部分有点痛苦,我也对 ORM 如何支持此功能感兴趣。我读过这篇 SO 帖子 stackoverflow.com/questions/11841811/…,我认为它有助于阅读。
  • any ORM 不太可能直接支持 Postgres 继承模型——但即使您的 ORM 为您构建了模式,也可以在具有公共列的表之间建立继承关系。只要您的应用程序了解继承结构——何时创建父对象或子对象,一切都应该没问题。
【解决方案2】:

创建一个包含一个条目的表,主表的外键对我来说似乎是合理的。当您只关心一个价值时必须保持一种状态似乎很浪费并且相对难以保持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多