zoukankan      html  css  js  c++  java
  • MongoDB 数据模型(3/5)三部曲一、建立基础文档模型

    文档模型设计之一:建立基础文档模型


    • 根据概念模型或业务需求推导出逻辑模型 - 找到对象

      • Contact 联系人信息
        
      • Group 分组
        
      • Address 地址(多个)
        
      • Portrait 头像
        
    • 列出实体之间的关系(及基数) - 明确关系

      • 一个联系人(Contact)有一个头像(Portraits)1 : 1

        • 1 : 1 关系建模

        • 基本原则

          • 一对一关系以内嵌为主;

          • 作为子文档 或 直接在顶级;

          • 不会涉及到数据冗余;

          • 例外情况:内嵌后导致单个文档大小超过16MB;

          • # 示例
            Contacts 
            	name: "Tom"
            	company: "TAPDATA"
            	title: "CTO"
            	portraits: { # 此处内嵌
            		mimetype: xxx
            		data: xxx
            	}
            
      • 一个联系人可以有多个地址(address)1 : N

        • 基本原则

          • 一对多关系同样以内嵌为主;

          • 用数组来表示一对多;

          • 不涉及到数据冗余;

          • 例外情况:内嵌后导致文档大小超过16MB;数组长度太大(数万或更多);数组长度不确定;

          • # 示例
            Contacts 
            	name: "Tom"
            	company: "TAPDATA"
            	tilte: "CTO"
            	portraits: {
            		mimetype: xxx
            		data: xxx
            	}
            	addresses: [ # 此处内嵌,之后再看长度不确定的情况 TODO
            		{type: home, ...},
            		{type: work1, ...},
            		{type: work2, ...}
            	]
            
      • 一个联系人可以属于多个组,一个组可以有多个联系人 N : N

        • 基本原则

          • 不需要映射表;

          • 一般用内嵌数组来表示一对多;

          • 通过冗余来实现 N-N;

          • 例外情况:内嵌后导致文档大小超过16MB;数组长度太大(数万或更多);数组长度不确定;

          • # 示例
            Contacts
            	name: "Tom"
            	company: "TAPDATA"
            	titile: "CTO"
            	portraits: {
            		mimetype: xxx
            		data: xxx
            	},
            	addresses: [
            		{type: home, ...},
            		{type: work, ...}
            	],
            	groups: [ # 此处内嵌,mongo中并不是不可以冗余的,有时候鼓励做冗余,在第一阶段做基础模型设计的时候,先把模型构建好然后以后做进一步的优化,这个地方有数组确实会出现多次,以后再来说 TODO
            		{name: "Friends"},
            		{name: "Surfers"}
            	]
            
    • 套用逻辑设计原则来决定内嵌方式 - 进行建模

    • 完成基础模型构建

  • 相关阅读:
    P5664 Emiya 家今天的饭
    P3944 肮脏的牧师
    P1233 木棍加工
    P4017 最大食物链计数
    P1287 盒子与球
    Java之未来已来(1)
    java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4
    java-信息安全(一)-BASE64,MD5,SHA,HMAC,RIPEMD算法
    SpringBoot集成Caffeine作本地缓存
    联想拯救者-触摸板手势
  • 原文地址:https://www.cnblogs.com/sweetXiaoma/p/14595960.html
Copyright © 2011-2022 走看看