设计数据库时数据冗余的应用

我们先来看一下查询出来的专题内容:
它包含 id、name、description、products、topic_img、head_img 这几个字段。

{
    "id": 1,
    "name": "专题栏位一",
    "description": "美味水果世界",
    "products": [
        {
            "id": 2,
            "name": "梨花带雨 3个",
            "price": "0.01",
            "stock": 984,
            "main_img_url": "/product-dryfruit@1.png",
            "summary": null,
            "img_id": 10
        },
        {
            "id": 5,
            "name": "春生龙眼 500克",
            "price": "0.01",
            "stock": 995,
            "main_img_url": "/product-dryfruit@2.png",
            "summary": null,
            "img_id": 33
        },
        {
            "id": 8,
            "name": "夏日芒果 3个",
            "price": "0.01",
            "stock": 995,
            "main_img_url": "/product-dryfruit@3.png",
            "summary": null,
            "img_id": 36
        },
        {
            "id": 10,
            "name": "万紫千凤梨 300克",
            "price": "0.01",
            "stock": 996,
            "main_img_url": "/product-dryfruit@5.png",
            "summary": null,
            "img_id": 38
        },
        {
            "id": 12,
            "name": "珍奇异果 3个",
            "price": "0.01",
            "stock": 999,
            "main_img_url": "/product-dryfruit@7.png",
            "summary": null,
            "img_id": 40
        }
    ],
    "topic_img": {
        "url": "http://z.cn/images/1@theme.png"
    },
    "head_img": {
        "url": "http://z.cn/images/1@theme-head.png"
    }
}

细心观察 products 字段我们就会发现里面除了包含 img_id 还包含了 main_img_url 字段,因为我们也可以通过 img_id 关联 img 表查询出来对应的 url,所以这里构成了数据冗余。这里使用数据冗余设计表的原因是为了避免产生多层嵌套查询而降低查询的效率。这里我们的 theme 表已经和 products 表嵌套进行关联查询,如果 products 下继续嵌套 img,假如这个主题有 100 个 products(对于一个主题来说这很寻常,因为这是一个不确定数量的数据集)就会导致查询速度变慢,使用数据冗余是一个解决方案。

下面我们总结一下该在什么情况下合理运用数据冗余:

  1. 该数据结构在很多地方都需要用到。
  2. 数量是不可控的数据集。

一定不能滥用数据冗余的原因:
对于数据的完整性和一直性的维护时十分困难的。删除和更新数据时需要同时更改两个地方,否则会产生数据不一致。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,048评论 2 89
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,824评论 0 44
  • 桃花谢了春红,太匆匆。城里芳华落尽,留下闪烁的霓虹。霓虹灯固然美丽,而我却喜欢乡村的恬淡与宁静。 一...
    追梦的朵儿阅读 390评论 0 2
  • 读书,我是没有发言权的。但是老师的作业早完成啊,于是继续啰嗦。 跟老师学习,他时不时冒出几个英文单词来,刚开始觉得...
    穆占叶1阅读 689评论 12 20