关系型数据库中的数据完整性通过约束、事务和规范化规则的组合来维护。 这些机制确保数据在其整个生命周期中保持准确、一致和可靠。 通过在数据库级别强制执行预定义的规则,关系系统可以防止存储无效或冲突的数据,即使多个用户同时与数据库交互也是如此。
首先,数据库约束起着核心作用。 主键 强制每个记录的唯一性(例如,确保没有两个用户共享相同的 ID)。 外键 通过链接相关的表并防止会孤立记录的操作来维护引用完整性(例如,在关联的客户记录存在时删除订单)。 检查约束 根据特定条件验证数据(例如,确保“年龄”列仅包含正整数)。 唯一约束 防止非主键列中出现重复值(例如,确保每个用户的电子邮件地址是唯一的)。 这些规则在数据插入或修改期间应用,拒绝违反这些规则的操作。 例如,尝试将负价格插入具有检查约束的产品表中将立即失败。
其次,事务和 ACID 属性(原子性、一致性、隔离性、持久性)确保复杂操作期间的数据一致性。 事务将多个操作分组到一个逻辑单元中 - 要么全部成功,要么全部失败。 例如,在银行帐户之间转移资金需要从一个帐户中扣除并贷记到另一个帐户; 事务确保两个步骤都完成或都不完成。 数据库使用锁定机制或多版本并发控制 (MVCC) 来隔离事务,防止像两个用户覆盖相同数据这样的冲突。 例如,PostgreSQL 的 MVCC 允许读取器查看数据的一致快照,而不会阻止写入器,从而在并发访问下保持完整性。
最后,规范化通过将数据结构化为逻辑表来减少冗余和依赖性问题。 例如,将客户地址拆分到单独的表中,而不是在每个订单记录中复制它们,从而最大限度地减少更新异常。 此外,触发器和存储过程可以强制执行自定义业务规则(例如,在应用折扣百分比之前自动验证它)。 虽然应用层验证很有用,但数据库级别的保护措施仍然至关重要,因为它们充当防止无效数据的最后一道防线,独立于数据的插入方式——无论是通过应用程序、直接 SQL 查询还是迁移脚本。