`
alexcheng
  • 浏览: 182553 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Identity Field

SQL 
阅读更多
Identity Field - Saves a database ID field in an object to maintain identity between an in-memory object and a database row.
Identity Field是很简单的。你所要做的只是把你的关系数据库表的主键存放在对象的域中即可。
使用Identity Field时需要考虑的几个问题:
  1. 如何选择主键。首先要考虑的是是否选择有意义的键。有意义的键由于人的失误可能会出错,不太可信。其次是使用简单键还是复合键。复合键通常是有意义的,注意保证其唯一性和不变规则。对键所进行的通常操作有相等测试和取得下一个键。因此需要考虑相等测试的性能和取得下一个键的容易程度。最后是选择表内唯一的键还是数据内唯一的键。使用数据库内唯一的键就可以使用单一的Identity Map。
  2. 如果在对象中表示Identity Field。最简单的表示形式是对象中和数据库表中主键类型一致的域。复合键比较复杂,最好写出一个键类(Key class)。
  3. 获得一个键。有3种方式:数据库自动生成:不推荐使用这种方式,不同的DBMS实现方式不同。GUID(全局唯一的标识符):一般过长,影响相等性测试的性能。自己生成主键:一种做法是用SQL的max函数来取得,这种做法严重影响并发的性能,不推荐。一个好的做法是单独使用一个键表(key table)。如果你使用表内唯一的主键,则键表中每一个行表示一个表的下一个可用的键。如果是数据库内唯一的主键,则键表中只有一列。使用键表的时候,把对表的访问放在一个单独的事务中,这样可以提高性能。使用键表的时候,如果使用表内唯一的主键,可以减少数据库表中行上的竞争。把获取新主键的代码放在一个单独的类中。
分享到:
评论

相关推荐

    Devart UniDAC v5.3.10 Full Source

    -Bug with processing identity field is fixed -Bug with processing tinyint fields is fixed -Bug with processing tinyint and bigint parameters in SQL Server Compact Edition is fixed -Bug with the ...

    jbpm-identity修改后的jar

    ssh 框架整合jbpm3.2的时候 会遇到一个错误 :大概是 string field什么的,意思是 调用hibernate里面过期作废的方法字段了,就会报错,解决方法需要反编译然后修改 再打成jar 很麻烦,这里我提供一个已经修改好了的

    Rachman, Arnold W. identity group psychotherapy with adolescents. Springfield, Ill: Charles C. Thomas, 1975, 336 pp., [dollar]16.75

    identity group psychotherapy with adolescents. Springfield, Ill: Charles C. Thomas, 1975, 336 pp., [dollar]16.75 Book Reviews 125 RACHMAN, ARNOLD W. Ident i ty Group Psychotherapy with ...

    ArcGIS for Flex开发中Graphic的attributes解析

    2. **创建自定义类**:由于DataGrid需要一个具有预定义字段的列表作为数据提供者,我们需要创建一个自定义类(如`GridItemKV`),该类有两个字段:FieldName和FieldValue,分别用于存储属性的键和值。 ```...

    java.lang.NoSuchFieldError: STRING

    解决 java.lang.NoSuchFieldError: STRING at org.jbpm.identity.hibernate.PermissionUserType. 不用jbpm的jbpm-identity.jar 用这个就好

    sql语句的基本介绍和用法

    可以使用`SET IDENTITY_INSERT`命令控制是否允许显式插入`Identity`列的值。 ```sql SET IDENTITY_INSERT [Table] ON; INSERT INTO Table (ID, ...) VALUES (1, ...); SET IDENTITY_INSERT [Table] OFF; ``` 其中`ON...

    UNIDAC 6.4.16 XE10~10.1

    Bug with inserting identity fields through TUniLoader in the Direct mode is fixed Bug with updating a field containing a space in an alias in the Direct mode is fixed Bug with setting FilterSQL to SQL...

    UNDAC 6.4.16 XE10.1

    Bug with inserting identity fields through TUniLoader in the Direct mode is fixed Bug with updating a field containing a space in an alias in the Direct mode is fixed Bug with setting FilterSQL to SQL...

    UNIDAC 6.4.16 XE8

    Bug with inserting identity fields through TUniLoader in the Direct mode is fixed Bug with updating a field containing a space in an alias in the Direct mode is fixed Bug with setting FilterSQL to SQL...

    UNIDAC 6.4.16 XE10

    Bug with inserting identity fields through TUniLoader in the Direct mode is fixed Bug with updating a field containing a space in an alias in the Direct mode is fixed Bug with setting FilterSQL to SQL...

    JPA访问状态

    默认情况下,JPA通过getter和setter方法来访问实体的属性,这就是所谓的`FIELD`访问模式。然而,开发者也可以选择使用`PROPERTY`访问模式,即通过字段的getter和setter方法来处理数据。混合访问模式允许在实体的不同...

    A Most Elegant Equation: Euler’s Formula and the Beauty of Mathematics

    An award-winning science writer introduces us to mathematics using the extraordinary equation that unites five of mathematics' most important numbers</b></... The result is an ode to this magical field.

    Delphi7.1 Update

    This happens if you populate the Nested Dataset field before populating another field that precedes it in the field order. * The TClientDataSet.ApplyUpdates method fails if the dataset contains only ...

    c#输出pdf (动态填充表单内容,显示中文)Demo

    在这个例子中,`"fieldName1"`和`"fieldName2"`是PDF表单中的字段名称,你需要根据实际表单结构替换。`BaseFont.IDENTITY_H`参数用于告诉ITextSharp保持字符的原始宽度,这对于中文字符非常重要。 最后,需要注意的...

    mysql表映射成java实体类

    @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "${columnName}") private ${columnName} ${fieldName}; // Getter & Setter } ``` 最后,你需要编写一个程序,读取...

Global site tag (gtag.js) - Google Analytics