正文
关系型数据库,说的就是表与表之间的关系,归根到底是名词与名词的映射关系。
映射关系有:1:1,1:n,n:n,1:0。
在数据表设计和命名上把上面的关系有规律地体现出来,方便日后的维护和管理。
举一个例子,一个项目中名词有:部门department、用户user、座位desk、兴趣组group; 关系有: 一个部门有多个用户,一个用户只属于一个部门; 一个用户有一个座位,一个座位只属于一个用户; 一个兴趣组有多个用户,一个用户有多个兴趣组; 部门与兴趣组无关系,座位与兴趣组无关系。
上面用户与座位是1:1的关系,部门与用户就是1:n的关系,用户与兴趣组是n:n的关系, 部门与兴趣组是1:0的关系,座位与兴趣组也是1:0的关系。
数据库建表时最好每个名词独自一张表,如:department、user、desk、group; 名词之间的关系各自一张表,如:department_user、user_desk、group_user。
特别说明:1:n的关系中1的要放前面,n的放后面,如department_user; 1:1和n:n的关系中,前后要求不严格,看实际场景,核心词放前面可以凸显关系,非核心词放前面可以清晰结构、也方便随时拔插。 理论上,设计要是可拔插的,核心词要干净,非核心词中说明依属关系。
在一些情况下,1:1、1:n的关系中,为了减少表,可以把关系写入到后面那张名词表中(如果写在前面的名词表,结构会很臃肿), 如在user中增加department_id字段、desk中增加user_id字段等, 有时表自己还有父子迭代关系,如部门还有父级部门,可以在department中增加parent_id字段。
数据表关系设计上,原则上以结构清晰为指导方针。