1

像许多数据库一样,我有一张带有序列生成数字主键的人员表,因为名称不是唯一的:

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

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

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

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

A) 视图 - 不可编辑。我知道如何使用触发器使视图可编辑,但 AFAIK 没有 GUI 编辑器可以使用它来允许可编辑视图。

B) 向 Order 表中添加一个名称列,然后使用触发器使所有内容保持同步 - 这很诱人,但是我有重复的数据,并且当我的表结构演变时很头疼。如果 Order name 列使用触发器强制为只读,那就更好了,但仍然有很多陷阱。

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

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

4

1 回答 1

1

您可以使用 Microsoft Access 和 postgres ODBC 驱动程序来实现这一点(至少在 Windows 上)。步骤以 2010 年为基础,但过程与 2003 年和 2007 年相同。

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

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

于 2012-08-15T09:58:50.830 回答