有关自增长字段更新的问题(200分)

  • 主题发起人 主题发起人 allenzen
  • 开始时间 开始时间
A

allenzen

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个我多层系统开发,碰到以下问题,请大家给点意见。
假设有多个表是主从关系。如主表-->子表-->子子表-->子子子表(没办法,非要这样)
在数据库设计时,我就犯了犹豫。因为要涉及远程复制的问题。 当时就想着两种方法:
1)利用INT类型,实现自增长
2)利用GUID类型,实现主键的唯一。(参照李维的做法)
利用GUID虽然有好处(远程复制可解决数据更新冲突),但是这种类型太大(38个字符),在数据量大的
情况下,这是很可怕的。所以我选择了INT类型。
但是在多层开发中,就碰到了问题。
因为ClientDataset中是缓存更新。那么在多级主从关系表中,主键的值就无法确定。

Table1 (ID,Date,....)
Table2 (ID,ParentID, PName...)
Table3 (ID,ParentID, Qty.....)
在客户端如果新增一笔数据,Table2 Table3 的ID和ParentID就无法确定。不要告诉我POST之后就A视之为ApplyUpdate
希望各位给点意见! 

 
使用事务处理
startTransaction
...
commit/rollback
commit时会更新缓存
 
建议用Guid:
1.在Midas的多层应用中用自动加一字段会有问题,因ClientDataSet不会返回新记录中的值
在某些特别情况下可以有特麻烦的方法解决(恕不举例),通常情况基本行不通。
2.在支持Guid的数据库内,guid字段为16个字节而非38个字节,不支持Guid的数据库内可为
32字节字符串或16字节二进制串。
 
TO LLD,
你说:“在某些特别情况下可以有特麻烦的方法解决”
我想知道有什么方法,在什么情况下可以解决此问题。
这样的问题我想大家都碰到过,除了用GUID外,难道就没有别的方法?
 
帮忙看看啦!!!
 
帮忙看看啦!!!
 
是什么数据库?是oracle或者interbase的话,可以在before insert的trigger中给字段赋单一的值
 
后台数据库是SQLserver, 程序用了三层结构。
关键是在客户端,如果是第二级主从表中的关键字段,唯一值无法确定。(不用GUID)
 
有人看看吗?
给 点 意 见 吧!
 
唉,都懒得回答,让我如何散分。
 
我是在加入主表记录时,提交一下,再刷新,取得ID后加从表记录
 
我说一下我的方法
时间+机器ID+流水号(相对本台机器的与其它机器无关)
比如:A机器
20020319A001
20020319A002
B机器
20020319B001
20020319B002
 
后退
顶部