使用GUI进行Postgres的外键约束?

时间:2016-12-16 00:56:45

标签: database postgresql

我有一个带Postgres数据库的GUI程序。在数据库中,我有一个这样的客户表:

id serial Primary Key | name
----------------------+------
21                    | Mr. Customer

我还有一张这样的发票表(简化):

id | customer_id
---+------
4  | 21

我没有使用外键,因为我的GUI不允许任何人为customer_id插入错误的号码。但是,我的朋友告诉我,不使用外键我很愚蠢。有人可以指出可能在customer_id列中插入错误值的情况吗?我将改变我的数据库有一个很好的理由,但到目前为止我还没有想到一个原因。

1 个答案:

答案 0 :(得分:4)

有几个原因,

从其他来源插入数据。
正如@OldProgrammer指出的那样,有人可以使用pgadmin或psql客户端将数据插入到表中。

删除客户
在客户表中删除客户时会发生什么。您在发票表中有一个客户不存在的条目。

更新客户
如上所述

额外查询
要在应用程序中手动强制使用外键,您需要从customer表中进行选择,以查明用户是否存在。然后只能执行插入。因此,您正在进行额外的查询,更不用说编写大量额外的代码来替换已经内置到数据库中的内容。

编程错误
您的GUI可能包含导致输入无效数据的错误。在这种情况下,数据库中的约束将使您安全。这种技术被称为防御性编程,并以很少的成本为您的系统增加质量。