

外键用于限制不相关的数据输入到图表里。如果在前台处理,还有必要在后台生成一个外键吗?如果我在一个图表中有太多的外键,这会影响性能吗? 因为每个DML语句必须检查N个主图表。
发表于04年9月24日
你选择“不相关”这个形容词很有趣。“不好的”或“错的”可能更好。
外键的用途是确保数据的完整性。它通常包括以下几种:
实体完整性,确保每个实体是唯一的(通过主键来实施)
域完整性,确保属性值只从一套特定可选的集合里选择
关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值
如果你在没有定义数据库的实际外键的情况,试图强制执行关联完整性,那你就会遇到数据库“断列链接”或“孤单记录”的风险。换句话说,数据的完整性会被破坏,你的数据库会含有不良数据,你的用户会很生气(或更糟)。
你从来不能肯定你的前台程序是更改数据库数据的唯一手段。那是太危险了。此外,你在已经建好的数据库上花费不必要及大量的时间和精力来生成逻辑。你在没有合理理由的情况下再发明轮子。
从来不存在“太多的”外键。 或者是业务需求需要的, 或者不需要。如果需要(例如,确保每个定单归属于一个已知的客户),那你必须实施它们。性能不是问题。不进行外键检查,你的查寻可能会快几微微秒,但如果数据库包含不良数据,你的用户会容忍这样的情况持续多久呢?
相信我,科学地使用外键会远比自己使用或不使用好很多。