我有一个带Postgres数据库的GUI程序。在数据库中,我有一个这样的客户表:
id serial Primary Key | name
----------------------+------
21 | Mr. Customer
我还有一张这样的发票表(简化):
id | customer_id
---+------
4 | 21
我没有使用外键,因为我的GUI不允许任何人为customer_id插入错误的号码。但是,我的朋友告诉我,不使用外键我很愚蠢。有人可以指出可能在customer_id列中插入错误值的情况吗?我将改变我的数据库有一个很好的理由,但到目前为止我还没有想到一个原因。
答案 0 :(得分:4)
有几个原因,
从其他来源插入数据。
正如@OldProgrammer指出的那样,有人可以使用pgadmin或psql客户端将数据插入到表中。
删除客户
在客户表中删除客户时会发生什么。您在发票表中有一个客户不存在的条目。
更新客户
如上所述
额外查询
要在应用程序中手动强制使用外键,您需要从customer表中进行选择,以查明用户是否存在。然后只能执行插入。因此,您正在进行额外的查询,更不用说编写大量额外的代码来替换已经内置到数据库中的内容。
编程错误
您的GUI可能包含导致输入无效数据的错误。在这种情况下,数据库中的约束将使您安全。这种技术被称为防御性编程,并以很少的成本为您的系统增加质量。