像许多数据库一样,我有一张人表,它有一个连续生成的数字主键,因为名字不是唯一的:
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年的流程是一样的。
- 将您的表格链接到新的 Access 数据库并设置它们之间的关系。
- 在设计 View 中打开带有外键的表格,然后切换到底部的设计选项卡。
- 选择组合框而不是文本框。
- 单击“查询源”,然后单击右侧的三个点。
- 将带有主键的表添加到查询设计器
- 添加您要查看的列,然后添加带有 ID 的列
- 关闭编辑器
- 将绑定(bind)列更改为 2,因为您的第二列是键
在这里您可以根据您的问题找到一个小示例:(尽管没有 ODBC)https://www.sugarsync.com/pf/D949685_2198453_6801553
关于Postgresql - 数字主键的人类可读别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106239/