例: 有两张表,分别是员工表 和 部门表。
方案1:员工表中,存在一个部门ID,用于关联到部门表中对应的数据。(个人倾向)
方案2:创建第三张表,部门员工表,里面只有两个字段,一个是员工ID,一个是部门ID,用于记录员工与部门之间的关联。(客户倾向)
不知道方案1和方案2的优劣如何?到底要如何设计表关联方式?
两种方法都可以表达员工和部门的关系。
1、方案一,在数据关系上,仅仅是一对多
2、方案二,在数据关系上,其实是多对多。兼容了一对多的情况。
可以粗略理解为:多对多的情况下一定选择关系表形式,一对多的关系根据实际业务选择。(可忽略)
因此,方案二的扩展性显然要更好,这里不能用范式或者反范式来下结论。因为部门和员工之间的关系,可能以后真的就成了多对多。何况还有程序中的数据操作也表达了数据关系,因此仅仅通过数据表的结构,不能简单的得到反范式的结论。
再更进一步,在考虑到性能时,有时反范式也是需要的。比如员工部门表独立出来,可以进行表缓存,甚至进一步加载到缓存数据库中。这样员工登录时,系统可快速根据部门情况决定其权限。如果员工表非常大,每次都要进行关联查询无疑是增加了数据库的压力。这是常见的空间换时间的打法。
参考知乎文章 :https://www.zhihu.com/question/314207532