知识卡片
关系分解:在冗余异常与信息丢失之间的取舍
内容
把多个不同概念硬塞进同一张关系表(比如把员工信息、职位信息、任职记录全塞进一张表)会产生两类问题:更新时的冗余(同一位员工每换一次职位,姓名、地址这些不变的信息就要重复存一遍)和删除时的信息丢失(如果某个职位只有一名员工担任过,这名员工一旦离职被删除,这个职位本身”需要什么技能”的信息也会跟着凭空消失)。解法是把关系拆分成多张各自只聚焦一个概念的表,但拆分本身也有风险——把一张表拆开后,如果原表里的信息无法再通过重新连接这些小表完整还原出来,这种分解就丢失了信息,只有那些能够无损还原原始信息的分解(无损分解)才是合格的设计。发散:这揭示了关系数据库设计的核心矛盾——单表设计换来查询简单但埋下更新/删除异常的隐患,拆分设计换来数据的一致性和可维护性,却必须靠额外的连接操作把信息重新拼起来,且拆分方式选不好还可能永久丢失信息,这正是数据库范式理论要解决的核心问题:如何找到”恰好不多不少”的拆分粒度。
参考来源
《计算机科学概论》第9章《数据库系统》