标识域 Identify Field
- 在对象中保存DB的ID字段,以维持内存对象和DB数据Row之间的identify.
- 关系DB使用key来区分数据行.
- 而内存对象不需要这样的键.因为对象系统能够保证身份确认.
- 读取时没有问题,但是为了正确地写回DB.需要联系两者.
- 本质上,只是将DB表的主键存储在对象的field上.
- 工作机制
- 键的选择
- meaningful key.
- 应保证唯一性和恒定性.
- 而这种检查是滞后的(Data已经进入DB后才可行).
- 所以它是不可信的.
- meaningless key.
- 由Db构造的,无用的随机数.
- meaningful key.
- 简单/组合键
- Simple键.只使用一个DB字段.优点是完全一致性(所有的键操作都可以使用相同的代码).
- compound键.使用多个DB字段.
- 当一个表与另一表上下文相关时易于使用.
- 总是有意义的,所以需要注意其唯一性和恒定性.
- 类型
- 主要的键操作:相等性检查;得到下一个键.
- 键的大小会影响性能,尤其是有索引时.
- 唯一性
- 表唯一.在处理继承时比较麻烦.
- DB唯一.任何一个表的任何一个数据行都是唯一的.好处是可以使用一个单间的标识映射.
- 对象内identify field的表示
- 最简单的情况是于DB的键相匹配的域.
- 对于组合键,最好建立一个键类.
- 取得新键
- DB自动生成
- auto-generated field.
- 每当插入一行Data时,该域自增1.
- 问题是难以确定生成的新键的值.
- 所以,对于需要插入关联对象的表不能使用它(插入订单Data时,需要它的键作为订单项目的外键).
- GUID.
- 安全的键.
- 问题是结果串较长.有性能问题.
- 自己产生
- 小系统时,(select max)+1.
- 会锁住整个表.并且需要保证事务间的独立性.否则会多个事务得到同一key.
- 使用独立的键表.
- 键表的两列:名称和下一个有效值.
- DB唯一键.表里只有一行.
- 表唯一键.Db的每个表对应键表中的一行Data.
- 对键表的访问,应该置于对其他表插入更新的事务之外的独立事务中.
- 这样允许一创建内存对象就立刻得到ID.其它业务事务可以立刻使用.
- 问题是当回滚了插入操作时,操作对应的键就被废弃了.
- 小系统时,(select max)+1.
- 自己产生
- 使用时机
- 在内存对象与DB行之间存在映射关系时需要使用identify.通常在领域模型或行数据入口的情况下.
标识域 Identify Field的更多相关文章
- 架构模式对象与关系结构模式之:标识域(Identity Field)
一:标识域(Identity Field) 标识域(Identity Field)可以理解为主键.使用领域模型和行数据入口的时候,就要使用标识域,因为这两个对象代表的是唯一存在的那个数据记录.事务脚本 ...
- 查询(Query)和标识(Identify)
查询(Query)和标识(Identify) 相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iP ...
- RESTful API URI 设计: 查询(Query)和标识(Identify)
相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iPhone 6 的产品. 是不是感觉很简单呢?根 ...
- 标识映射(Identify Map)
通过在Map中保存每个已加载过的对象,确保每个对象只加载一次. 当要访问对象时,首先检查标识映射,看需要的对象是否已经存在其中. 使用Identify来确保不重复加载相同的数据,不仅有助于保证正确性( ...
- 一个类中域(field)的首字母不要大写
首先这种写法不规范, 其次,至少在AJAX交互的情况下, 如果首字母大写,会无法与前端相同名称的JSON属性相绑定. 如 data:{'Name':'2017-10-19'} public NameI ...
- lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。
4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...
- Lucene 的 Field 域和索引维护
一.Field 域 1.Field 属性 Field 是文档中的域,包括 Field 名和 Field 值两部分,一个文档可以包括多个 Field,Document 只是 Field 的一个承载体,F ...
- solr的域
solrhom相当于存放数据的地方,里面一个个文件相当于数据库,每个数据库里面有两个文件夹,一个data,一个conf,conf下有一个schema.xml文件,配置域,相当于表的字段. solr中内 ...
- java.lang.reflect.Field
java.lang.reflect.Field 一.Field类是什么 Field是一个类,位于java.lang.reflect包下. 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 ...
随机推荐
- PHP CLI模式开发(转)
PHP CLI模式开发不需要任何一种Web服务器(包括Apache或MS IIS等),这样,CLI可以运行在各种场合. 有两种方法可以运行PHP CLI脚本. 第一种方法是使用php -f /path ...
- 如何在 Visual Studio 2012 控制 TFS 版控時要忽略哪些檔案
幾乎在任何一種版本控管的機制裡,都會遇到那些「不應該簽入到版本庫」的潛規則,以往我們在用 SVN 的時候,我就寫過幾篇文章要大家注意這點.最近都改用 TFS 做版控,因為大多使用 Visual Stu ...
- 0c-36-自动释放池应用场景
.autorelease的应用场景 经常用来在类方法中快速创建1个对象. // 声明实现一个类方法 + (Student *)student { // 在里面直接进行autorelease retur ...
- /proc/sys/vm/ 内存参数
linux下proc里关于磁盘性能的参数 http://blog.csdn.net/eroswang/article/details/6126646 我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特 ...
- SQL SERVER-Delete和Truncate的区别
背景: 一般在删除表数据时候,通常会有执行两个SQL语句:delete和truncate,有条件的删除我们平时都会用delete,而如果全部删除,那我们通常都会选择truncate,因为这 ...
- Photoshop-制作图片圆角2种方法[转]
方案一: 使用选区和蒙版相结合,用图章制作圆角选区,删除多余部分 效果: 实现步骤: 一.如果是直接在已有的图片上面编辑则看下图,否则跳过此不 二.用矩形工具选择需要保留的图片内容 三.选 ...
- 加密数据的填充方式(Padding)
1.填充数据为填充字节的长度 这种填充方式中,填充字符串由一个字节序列组成,每个字节填充该字节序列的长度.假定块长度为8,原文数据长度9,则填充字节数等于0x07:如果明文数据长度为8的整数倍,则填充 ...
- 慎用preg_replace危险的/e修饰符(一句话后门常用)
要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误 preg_replace函数原型: mi ...
- js的Touch事件
js的touch事件,一般用于移动端的触屏滑动$(function(){document.addEventListener("touchmove", _touch, false); ...
- WPF 之 style文件的引用
总结一下WPF中Style样式的引用方法. 一.内联样式: 直接设置控件的Height.Width.Foreground.HorizontalAlignment.VerticalAlignment等属 ...