Mar*_*lde 5 mysql database database-design
我一直在阅读关于每个SELECT上使用许多JOIN语句的关系数据库.但是,我一直想知道滥用这种方法从长远来看是否存在任何性能问题.
例如,假设我们有一张users桌子.我通常会添加"最常用"的数据,而不是做任何额外的JOIN.例如,当我说"最常用"数据时,将是用户名,显示图片和位置.
在网站上显示任何用户交互时总是需要这些数据,例如:在每个comments表JOIN上articles.不要在users&users_profilestables 上进行JOIN 以获取'location'和'display',而只需使用users表中的信息.
这是我的方法,但我知道有很多优秀且经验丰富的程序员可以就此事给我一些建议.
我的问题是:
我应该尝试保守JOIN吗?或者我应该更多地使用它们?为什么?
从长远来看,使用JOIN有很多性能问题吗?
注意:我必须澄清一点,我根本不想避免JOINS.我只在需要时使用它们.在这个例子中将是评论/文章作者,仅显示在用户个人资料页面上的额外个人资料信息......等等.
我对数据建模的建议是:
现在关于模型的直接性,让我举个例子.假设您正在设计一个用于身份验证和授权的系统.过度设计的解决方案可能如下所示:
因此,您需要6个连接才能从输入的用户名获得实际权限.当然可能有一个实际的要求,但是这种系统通常被放入,因为一些开发人员认为他们可能有一天会需要它,即使每个用户只有一个别名,用户登录是1 :1等等.一个更简单的解决方案是:
而且,就是这样.也许如果你需要一个复杂的角色系统,但你也很可能不这样做,如果你这样做很容易插入(用户类型成为用户类型或角色表中的外键),或者通常很容易映射老到新.
这是关于复杂性的事情:它很容易添加并且难以删除.通常它是针对意外复杂性的持续守夜,这是非常糟糕的,没有去,并通过增加不必要的复杂性使其变得更糟.
一些聪明人曾经说过:
归一化直到它疼,非规范化直到它起作用!
这一切都取决于连接的类型和连接条件,但它们没有任何问题.连接ON table1.PK = table2.FK非常有效.