关于Midas(DataSnap)处理主从表的问题。

henreash
博客专家认证
2009-09-10 11:14:43
最近一直在思考这个问题,网上书上都是使用巢状结构(在服务端建立主从关系,客户端使用TDataSetField),但是有很多人说这种方式效率太差,如果主表有1万条记录,就要去查询1万次从表。个人以为这种方式也不好。所以我觉得还是在客户端的TClientDataset控件之间建立主从关系比较好。但有些问题不知如何解决。
问题1:查询当然没有问题,客户端显示了主从数据后,如果做修改并向服务端提交,这时就涉及主从表提交顺序的问题了,删除的时候要先删除子表,添加的时候要先添加主表。这种顺序如何调整(.net中可以在更新的方法中给出一个参数指定更新的是增加记录、删除记录还是修改记录)?
问题2:如果主从表中主表的主键是自增列,要如何与从表关联?

说明:这些问题使用巢状主从关系都是有Delphi自动解决的,但是这种纯RAD的方式本人不太喜欢。
...全文
280 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxsan 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ddqqyy 的回复:]
主从表的提交之所以有顺序,根本原因是数据库中的主从表定义了外键依赖关系,一种解决方法就是取消外键,这样就没有更新悖论了,但保证主从表数据一致性的问题又出来了,所以主从表的分别提交必须在一个事务中进行,通过周全的程序设计和测试来保证。

没有主从表的关联,主键自增列的问题也没有了,先获取主表主键的最终自增列值,再依此值更新从表的相关记录的外键列值,最后两表在一个事务中完成提交。

[/Quote]

这个方法可行。
董董 2009-09-15
  • 打赏
  • 举报
回复
主从表的提交之所以有顺序,根本原因是数据库中的主从表定义了外键依赖关系,一种解决方法就是取消外键,这样就没有更新悖论了,但保证主从表数据一致性的问题又出来了,所以主从表的分别提交必须在一个事务中进行,通过周全的程序设计和测试来保证。

没有主从表的关联,主键自增列的问题也没有了,先获取主表主键的最终自增列值,再依此值更新从表的相关记录的外键列值,最后两表在一个事务中完成提交。
  • 打赏
  • 举报
回复
应该把本贴放在技术区才对.
jupiter418 2009-09-12
  • 打赏
  • 举报
回复
UP
henreash 2009-09-11
  • 打赏
  • 举报
回复
看了 TDataSetProvider控件的源码,可能Delphi就没有提供一种机制,来控制数据更新的顺序(如一个Delta分三次更新,第一个提交删除,第二次提交修改,第三次提交新增)。冒似要自己继承TDataSetProvider控件改写里面的方法InternalApplyUpdate方法了。
henreash 2009-09-11
  • 打赏
  • 举报
回复
主从表我提交修改的时候,不按照巢状方式,就要向服务端提交一个两个delta,在服务端更新这两个delta的时候,就要去照顾主从关系 --如何来维护主从关系呢?这点没想明白
wxsan 2009-09-11
  • 打赏
  • 举报
回复
友情帮顶。
kwer 2009-09-11
  • 打赏
  • 举报
回复
这的确是个问题,我都是绕弯的。
-------------------------------------------------------------------------- Delphi高级编程课程安排一、Delphi程序设计的一般问题二、异常处理三、创建DLL 动态连接库四、创建VCL 组件五、COM 技术六、ActiveX 控件七、数据库开发(ADO、BDE和dbExpress)八、多线程编程九、分布式多层数据库开发(MIDAS技术和DataSnap)十、XML及其应用十一、Internet服务器端Web编程十二、Internet Express快速网络开发十三、MIDAS技术在Web上的应用十四、Web Snap 快速网络开发十五、Web Service 程序服务器十六、FastNet编程(电子邮件和FTP文件传送编程)十七、报打印--------------------------------------------------------------------------- Delphi 6.0 中高级班课程内容 一、Delphi 6.0的一般问题: 集成开发环境; 面向对象程序设计基础; 组件编程方法; 界面设计; 异常处理。二、DLL 和组件: 创建DLL 动态连接库; 创建VCL 组件。三、COM 对象: COM、DCOM和COM+的基础知识; COM 对象的创建和应用; 创建ActiveX控件; MTS对象; COM+对象。四、多线程技术。五、数据库开发: Delphi 6.0处理数据库的一般方法(BDE、ADO、dbExpress); SQL 查询。 BDE 编程(ODBC和BDE,存储过程,C/S应用程序,主从结构的数据 库程序)。 ADO 编程(ADO 面板的组件,ADO 技术的深入研究,编写基于ADO的数据库应用程序)。 dbExpress开发跨平台数据库程序。六、分布式多层数据库开发: MIDAS技术和DataSnap。 服务器端的COM 编程和客户端应用程序。 SQL查询服务和基于主从结构的多层数据库开发。七、网络开发: Delphi 6.0网络开发的一般问题; COM和Web; 利用ASP 对象编写动态网页; ActiveX和Web; Internet服务器端Web编程。八、Delphi 6.0的快速网络开发: Internet Express多层动态网页编程; Websnap快速网络开发; ------------------------------------------------------------------------------
李维新书<>的前两章预读,12月份出版。《Inside VCL(深入核心——VCL架构剖析)》将带领您:• 领略优秀Framework之大局观!追寻软件架构大师设计思路,高屋建瓴,廓清Framework设计要义。告诉您何谓Framework,VCL是一种什么样的Framework,未来VCL Framework将走向何方。它是Delphi程序员不可不读的一部大书。• 剖析VCL之精妙大架构!深入探究VCL设计与实现,以RPG方式与读者共同扮演架构设计师,一砖一瓦搭起VCL大厦。配合Windows Framework、COM、Interface等各种技术,按图索骥,逐步厘清VCL Framework真正的脉络所在。• 掌握OO开发之大奥义!紧密融合OO理念和设计模式,用OO理念重新考量VCL,指出其中优秀和不妥之处;让您在了解VCL Framework的同时,体验源自顶尖程序员的OO观。 Delphi已经推出了7个版本,在未来也会持续的推出新的版本,许多人可能也已经使用Delphi许多年并且开发了各种不同的应用系统,但是不管我们使用了Delphi多久,我们真的已经了解Delphi,而且发挥Delphi十成的功能了吗?Delphi 1从推出以来,在每一个版本都加入了许多新的功能,融合的软件技术也一直在增加之中。从RAD、Flat-File数据库功能、VCL组件,一直到主从架构、Web、COM/COM+、MIDAS、多层分布式应用系统,到现在的SOAP/Web Service、dbExpress,DataSnap等技术,程序员们不断地学习和使用新的技术,以便用来开发新的应用系统或是增加程序员个人的附加价值,以求在信息领域能够更上一层楼。不过这些技术大都是属于“应用类”。... ...

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧