加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

如何合理利用数据库冗余字段的方法

发布时间:2022-03-21 05:15:40 所属栏目:MySql教程 来源:互联网
导读:privot多对多关系的中间表。PT5框架会自动把privot带上。 我们需要隐藏,因为我们不需要privot,而且pritvot也不在我们模型本身,他是中间数据 另外冗余字段,我们有一个表是记录图片的,另一个表是记录商品的。 在WEB开发中,除了掌握一些必要的数据库优化
      privot多对多关系的中间表。PT5框架会自动把privot带上。
 
     我们需要隐藏,因为我们不需要privot,而且pritvot也不在我们模型本身,他是中间数据
 
      另外冗余字段,我们有一个表是记录图片的,另一个表是记录商品的。
 
     在WEB开发中,除了掌握一些必要的数据库优化技巧外,在合适的时候使用冗余字段也可以做到事半功倍的效果。比如下面这样一个例子,有这么几个表,是这么设计的。
 
用户表[user]:id,userName
项目表[project]:id,projectName, user_id
版本表[version]:id,versionName,project_id
分类表[category]:id,categoryName,version_id
内容表[content]:id,text,category_id
差不多就是这样了。看着很不错,没有字段冗余。也符合数据库设计的三大范式。
 
那我们先提个问题,命名为问题X吧。
 
问题X:如果要查询某个版本下的内容列表,sql应该是这么写的:
 
select c.* from content c, category t where c.category_id=t.id and t.version_id=?
好像也没什么问题。要怎么优化这个查询呢?这个问题我们最后再来说。讲回上面的表设计,如果有这样一个问题。举个例子,我要查询内容A是否属于用户U,那我应该怎么做?
 
查询内容A所属的分类B
查询分类B所属的版本C
查询版本C所属的项目D
查询项目D是否属于用户U,从而得出内容A是否属于用户U
这样的做法简直恶劣至极不是吗。此时你应该已深刻意识到这种表设计弱爆之处。那怎么做呢?
 
冗余字段!没错,我们需要在表里添加冗余字段。如果在上述表(除了user表)都添加一个user_id字段,会怎么样呢?
 
首先,可以确定,每个表的user_id字段的值都不会发生改变。所以,这个字段的值从一开始设定之后,就不用再修改了。
 
然后,我们再回到上述的问题:查询内容A是否属于用户U。现在的做法是这样的:
 
然后问题X的sql改为:
 
select c.* from content c where c.version_id=?
相当简单的sql!
 
以上说明,有时候,适当的数据库冗余是个不错的选择。

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!