表一,区县表:
区县代码 char(6)
区县名称 char(16)
表二,乡镇表:
乡镇代码 char(6)
乡镇名称 char(16)
所属区县代码 char(6)
如上二表,表一存储区县信息,表二存储乡镇信息,表二有一字段(所属区县代码)表示该乡镇所属的区县。
数据需求:
- 区县代码、区县名称均不存在重复。
- 同一区县中的乡镇其乡镇代码、乡镇名称均不存在重复。
- 不同区县中的乡镇其乡镇代码、乡镇名称可能存在重复。
为了数据库完整性,现设立 UNIQUE 约束。
表一,区县表:
一、只为区县代码设置约束。
二、只为区县名称设置约束。
三、为区县代码和区县名称设置联合约束。
四、为区县代码和区县名称分别设置约束。
哪种方案好呢?
我觉得第四种好些。
- 如果只设置区县代码约束,那么录入时,可能疏忽地将区县 A 漏输,而录入了两个区县 B。
- 同理,第二种方法也存在区县代码重复的问题。
- 第三种问题更严重,既不能防止区县代码重复也不能防止区县名称重复,只能防止区县代码和区县名称同时重复。
- 所以建议设置两个约束,一个为区县代码,一个为区县名称。
表二,乡镇表:
由于乡镇表乡镇代码和乡镇名称唯一的前提必须是在同一个区县代码内,所以所有约束都应该和“所属区县代码”一起建立联合约束。
根据表一的分析,建立的约束应该是两个:
- 乡镇代码和所属区县代码设置联合约束。
- 乡镇名称和所属区县代码设置联合约束。
由此可见,字段越多,设置约束的方案越多,不过只要围绕数据需求进行,就比较简单了。
