关于ORM实体类主键设置的几点建议(Tag:复合主键,ISID,PK)
作者:C/S框架网  发布日期:2012/02/24 20:45:28
  关于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框架网|原创作品.质量保障.竭诚为您服务


上一篇 下一篇