Postgresql - 数字主键的人类可读别名

标签 postgresql

像许多数据库一样,我有一张人表,它有一个连续生成的数字主键,因为名字不是唯一的:

ID  NAME  STUFF
---------------
101  Bob     20
102  Bob     30

还有其他几个表将这些 ID 作为外键引用:

ORDER  PERSON  NOTE
-------------------
1       02     Blah
2       01     Foo

(不能使用名称而不是 ID 作为 FK,因为 FK 必须引用具有唯一约束的列)。由于我的数据输入是手动的,因此在处理订单表时使用 GUI(现在是 pgAdmin 或 Mac 上的 LibreOffice)会更容易看到人名而不是数字 ID。对于这个看似简单的问题,我想到了很多解决方案,但似乎都不是很好:

A) View - 不可编辑。我知道how to make views editable with triggers但 AFAIK 没有 GUI 编辑器可以使用它来允许可编辑的 View 。

B) 向 Order 表添加一个名称列,然后使用触发器使所有内容保持同步 - 这很诱人,但是我有重复的数据,并且当我的表结构发生变化时很头疼。如果使用触发器将订单名称列强制为只读会好一些,但仍然存在许多缺陷。

C) 我真正想要的是某种方式来在 GUI 编辑器之间切换显示人员 ID 和相应名称,无论它们出现在任意表格中,而不损害底层数据完整性。

希望这是清楚的;如果需要,可以提供更多详细信息。感谢您的帮助!

最佳答案

您可以使用 Microsoft Access 和 postgres ODBC 驱动程序实现此目的(至少在 Windows 上)。步骤以2010年为准,但2003年和2007年的流程是一样的。

  1. 将您的表格链接到新的 Access 数据库并设置它们之间的关系。
  2. 在设计 View 中打开带有外键的表格,然后切换到底部的设计选项卡。
  3. 选择组合框而不是文本框。
  4. 单击“查询源”,然后单击右侧的三个点。
  5. 将带有主键的表添加到查询设计器
  6. 添加您要查看的列,然后添加带有 ID 的列
  7. 关闭编辑器
  8. 将绑定(bind)列更改为 2,因为您的第二列是键

在这里您可以根据您的问题找到一个小示例:(尽管没有 ODBC)https://www.sugarsync.com/pf/D949685_2198453_6801553

关于Postgresql - 数字主键的人类可读别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106239/

相关文章:

sql - Postgres 中的左外连接不返回空值

postgresql - 使用 $this->db->like 时如何转换列?

sql - PostgreSQL:检查子字符串是否在字符串中,如果为真,则用子字符串替换整个字符串

postgresql - 在一列中包含多个值的子集记录

postgresql - 如何使用 Count 窗口函数获取百分比?

postgresql - Heroku postgres 不再覆盖 config/database.yml Rails 4.1.4(和其他问题)

sqlite - 导入后更新 SERIAL 值

ruby - 如何使用 activerecord-sinatra 向 PostqreSQL 添加行?

postgresql - PostGIS:转换:无法投影点:纬度或经度超出限制 (-14)

node.js - Heroku (Node/Express/PostgreSQL) 的托管错误