关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)

  关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)


关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)


1. 业务主键和平台主键

业务主键是业务资料表的主键,作为主键或其它表的外键使用,如CustomerCode, StockCode或销售订单号码SONO等作为业务主键。平台主键是基于业务表存在复合主键而设计的,作为开发框架内部使用的主键,不参于业务关联运算,不在界面显示,不体现报表等特点。

平台主键主要用途是数据更新时提供给SQL命令生成器生成SQL脚本,如生成:Where RowID=@RowID,
RowID是指平台主键,目的是生成Where条件,替换冗余的复合主键生成的多个AND关系的Where条件,
如:Where SupplierCode=@SupplierCode AND StockCode=@StockCode


重点:
a) 通常存在复合主键的资料表必须定义一个平台主键,如:RowID。

b) 当资料表只有一个主键时,只要定义业务主键即可,如:SONO。



2. 复合主键的处理

   跟据业务的需要,有些数据表需要定义复合主键,为了使程序设计或SQL关联查询简单化,建议有复合主键的资料表定义一个唯一主键,如RowID,作为平台主键(PK),类型:VARCHAR(32),可以在客户端新增时赋值:

C# Code:

DataRow["RowID"]=Guid.NewGuid().ToString().Replace("-","");



CSFramework V2.2版:参考系统管理模块tb_CompanyInfo表的ORM定义。



3. isid 字段

   isid字段是开发框架定义使用最多的字段名,指的是自增字段(Is Identity),可以作为记录的主键使用,但不可以作为外键使用。

isid可以作为明细表的主键,明细表的外键通常是单据号码或GUID。


在以下情况定义isid为主键:

a)  业务主键支持修改的情况下。框架内规定业务主键是不可以修改的,如需要修改,必须定义一个isid字段作为数据更新使用的主键(用于生成Where isid=@isid)。如客户资料的业务主键是CustomerCode,界面上需要支持修改,这种情况下必须定义isid为主键。


b)  数据字典的主键。通常数据字典的主键是编号,比如货币:CurrencyCode,客户:CustomerCode,单位:UnitCode,但这些都是业务主键,作为其它业务表的主外键关联使用的。这些数据字典可以定义一个isid字段作为数据更新使用的逻辑主键。

c) 建议不要将isid定义为主键,而采用业务主键和平台主键。



C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

关于ORM实体设置建议(Tag复合ISIDPK)
C#.NET开发框架业务和逻辑定义
开发框架支持两种ORM模型(静态/实体)
ISID字段介绍,能直接用ISID自增字段作为主使用吗?
CSFramework代码生成器生成三种ORM模型(静态ORM实体ORM,标准对象)
SQL获取表结构表名,字段名称,类型,Identity,PK,FK外,IDX索引,字段说明等资料
sp_sys_GetTableFieldDef存过:SQL获取表结构字段名称,类型,Identity,PK,FK外,IDX索引,字段说明
ORM_TableAttribute详解:资料表特性定义
2.6生成ORM
数据字典基础资料窗体设置为自动生成流水号码解决方案
更新模式UpdateKeyMode枚举详解(2)
公司资料设置sys_CompanyInfo表变更为CompanyCode
企业版V4.0 - 并发控制说明
主从表表模型重点参数配置|UpdateKeyMode|ORM Model
ORM_FieldAttribute详解:字段特性定义,框架内核根据此特性自动生成SQL脚本
关于扩展权限、扩展功能按钮及自定义功能命名|C/S框架网
DbFramework实体模型框架
关于NavBarControl击ExpandButton缩放后不能控制Dock组件问题
<表结构静态>与<实体>区别与应用
DbFramework数据库实体对象模型框架( 支持MsSQL,MySQL,Oracle三种数据库)