• 在对象中保存DB的ID字段,以维持内存对象和DB数据Row之间的identify.

    • 关系DB使用key来区分数据行.
    • 而内存对象不需要这样的键.因为对象系统能够保证身份确认.
    • 读取时没有问题,但是为了正确地写回DB.需要联系两者.
    • 本质上,只是将DB表的主键存储在对象的field上.
  • 工作机制
    • 键的选择

      • meaningful key.

        • 应保证唯一性和恒定性.
        • 而这种检查是滞后的(Data已经进入DB后才可行).
        • 所以它是不可信的.
      • meaningless key.
        • 由Db构造的,无用的随机数.
    • 简单/组合键
      • Simple键.只使用一个DB字段.优点是完全一致性(所有的键操作都可以使用相同的代码).
      • compound键.使用多个DB字段.
        • 当一个表与另一表上下文相关时易于使用.
        • 总是有意义的,所以需要注意其唯一性和恒定性.
    • 类型
      • 主要的键操作:相等性检查;得到下一个键.
      • 键的大小会影响性能,尤其是有索引时.
    • 唯一性
      • 表唯一.在处理继承时比较麻烦.
      • DB唯一.任何一个表的任何一个数据行都是唯一的.好处是可以使用一个单间的标识映射.
    • 对象内identify field的表示

      • 最简单的情况是于DB的键相匹配的域.
      • 对于组合键,最好建立一个键类.
    • 取得新键
      • DB自动生成
        • auto-generated field.
          • 每当插入一行Data时,该域自增1.
          • 问题是难以确定生成的新键的值.
          • 所以,对于需要插入关联对象的表不能使用它(插入订单Data时,需要它的键作为订单项目的外键).
      • GUID.
        • 安全的键.
        • 问题是结果串较长.有性能问题.
      • 自己产生

        • 小系统时,(select max)+1.

          • 会锁住整个表.并且需要保证事务间的独立性.否则会多个事务得到同一key.
        • 使用独立的键表.
          • 键表的两列:名称和下一个有效值.
          • DB唯一键.表里只有一行.
          • 表唯一键.Db的每个表对应键表中的一行Data.
          • 对键表的访问,应该置于对其他表插入更新的事务之外的独立事务中.
            • 这样允许一创建内存对象就立刻得到ID.其它业务事务可以立刻使用.
            • 问题是当回滚了插入操作时,操作对应的键就被废弃了.
  • 使用时机
    • 在内存对象与DB行之间存在映射关系时需要使用identify.通常在领域模型或行数据入口的情况下.

标识域 Identify Field的更多相关文章

  1. 架构模式对象与关系结构模式之:标识域(Identity Field)

    一:标识域(Identity Field) 标识域(Identity Field)可以理解为主键.使用领域模型和行数据入口的时候,就要使用标识域,因为这两个对象代表的是唯一存在的那个数据记录.事务脚本 ...

  2. 查询(Query)和标识(Identify)

    查询(Query)和标识(Identify) 相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iP ...

  3. RESTful API URI 设计: 查询(Query)和标识(Identify)

    相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iPhone 6 的产品. 是不是感觉很简单呢?根 ...

  4. 标识映射(Identify Map)

    通过在Map中保存每个已加载过的对象,确保每个对象只加载一次. 当要访问对象时,首先检查标识映射,看需要的对象是否已经存在其中. 使用Identify来确保不重复加载相同的数据,不仅有助于保证正确性( ...

  5. 一个类中域(field)的首字母不要大写

    首先这种写法不规范, 其次,至少在AJAX交互的情况下, 如果首字母大写,会无法与前端相同名称的JSON属性相绑定. 如 data:{'Name':'2017-10-19'} public NameI ...

  6. lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。

    4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...

  7. Lucene 的 Field 域和索引维护

    一.Field 域 1.Field 属性 Field 是文档中的域,包括 Field 名和 Field 值两部分,一个文档可以包括多个 Field,Document 只是 Field 的一个承载体,F ...

  8. solr的域

    solrhom相当于存放数据的地方,里面一个个文件相当于数据库,每个数据库里面有两个文件夹,一个data,一个conf,conf下有一个schema.xml文件,配置域,相当于表的字段. solr中内 ...

  9. java.lang.reflect.Field

    java.lang.reflect.Field 一.Field类是什么 Field是一个类,位于java.lang.reflect包下. 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 ...

随机推荐

  1. C#MongoDB 分页查询的方法及性能

    传统的SQL分页 传统的sql分页,所有的方案几乎是绕不开row_number的,对于需要各种排序,复杂查询的场景,row_number就是杀手锏.另外,针对现在的web很流行的poll/push加载 ...

  2. Vs2008几个快捷键

    CTRL+M 收缩 格式化cs代码:Ctrl+k+f    格式化aspx代码:Ctrl+k+d 5. 怎样快速切换不同的窗口? Ctrl+Tab   7. 怎样快速添加代码段? 输入prop然后按两 ...

  3. 使用iOS手势UIGestureRecognizer

    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势.UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势 ...

  4. 在Ubuntu 14.04 64bit上安装numpy和matplotlib库

    原文:http://blog.csdn.net/tao_627/article/details/44004541 按照这个成功安装! 机器学习是数据挖掘的一种实现形式,在学习<机器学习实战> ...

  5. Dockerfile 指令

    FROM 格式为 FROM <image>或FROM <image>:<tag> 第一条指令必须为 FROM 指令.并且,如果在同一个Dockerfile中创建多个 ...

  6. 深入理解 iOS 开发中的锁

    来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...

  7. BootStrap2学习日记23---图片轮播

    <div id="carousel1" class="carousel slide"> <div class="carousel-i ...

  8. C# unix时间戳转换

    场景:由于业务需要和java 开发的xxx系统对接日志,xxx系统中用“1465195479100” 来表示时间,C# 里面需要转换做一下逻辑处理,见代码段. C#获取的unix时间戳是10位,原因是 ...

  9. Socket 使用笔记与注意事项(一)

    SocketAsyncEventArgs 1.该参数可以重复使用. 2.SocketAsyncEventArgs 的事件执行触发之后可以使用. 3.SocketAsyncEventArgs 的事件还在 ...

  10. nodejs的mysql模块学习(七)连接池事件

    连接池事件 connection 当建立连接的时候就会触发 pool.on('connection' function(connection){ connection.query('SET SESSI ...