讨论----合理、高性能及合乎OOP的数据更新机制 (100分)

  • 主题发起人 EdwinYeah
  • 开始时间
E

EdwinYeah

Unregistered / Unconfirmed
GUEST, unregistred user!
实际场景:
c/s架构中采用缓冲更新方式编辑单条或多条记录。

关系型数据库中,通常一条记录不会是独立的。
假设有一个订单表Ord,它有“客户编号(CustomerNo)”、
“经手人编号(HandleBy)”这两个字段,它们分别来自“客户表(Customer)”和“员工表(Employees)”。
而且,编辑时“客户”及“经手人”要通过ComboBox选择的。

下面假设订单表中全部字段都要编辑,同时这里忽略输入合法性检查、事务保护等问题

我主张的方法
1、作为常用的、不常改变的基础数据,“客户表”和“员工表”在程序启动时或第一次用到时打开;
2、以一个简单的(select * from Ord where OrdNo=:OrdNo)用TADOQuery把要修改的“订单表”中的记录查
出来,同时设计时建立好“客户名称”、“经手人名称”两个lookup字段(当然分别来自“客户表”和“员工表);
3、更新时用UpdateBatch实现;
优点:
1、客户端没有太复杂的sql,方便维护;
2、代码(如更新时)只跟DataSet交互,不直接操作后台,代码量少,结构清楚,符合OOP思想;
3、“客户表”和“员工表”

缺点:项目负责人说lookup字段不安全,用UpdateBatch不灵活,但他未提供论据。


项目负责人主张的方法(只列出不同于我主张的方法的地方):
1、用TADOQuery把要修改的“订单表”中的记录查出来时,用这样的多表联接sql:
select Ord.*, Customer.Customer.Name, Employees.Employees.Name
from Ord inner join ......on...........
where OrdNo=:OrdNo
2、更新时不用UpdateBatch实现,而是自己写动态sql实现,针对update、insert、delete都要分别写。

优点:控制灵活。
缺点:
1、客户端嵌入过于复杂的sql,不方便维护;
2、根据没必要放弃ADO本身提供的UpdateBatch,自已去根据insert/delete/update写不同的sql,这样,对于不
同的表都要分别写实现insert/delete/update的sql,工作量太多,且不灵活。不像我主张的方法,在父类Form写好
一个SaveToDB方法即可适应绝大部分子类Form的数据更新。
3、要实现ComboBox选择的话,程序还要多做工作。

我要说服他,请发言,不论支持那一种方式,并提供理由。
 
lookup字段我是很少用的。性能不太好。他是把数据下载到本地再关联的。
至于不用UpdateBatch要自己写,呵呵,如果时间够用还是可以的:)
反正我是挺喜欢用它的。不用白不用。
至于Combobox选择。我自己写了个控件可以跟数据表关联。所很方便。
 
to sundart, 因是修改记录,并非复杂sql查询lookup字段性能不会有问题。
你不可能有大量查询结果的情况下还用lookup字段吧?
 
》》至于不用UpdateBatch要自己写,呵呵,如果时间够用还是可以的:)
---我非常反地这句话,有时间难道没有更有意义的事情做?
 
UpdateBatch我支持,只要搞好事务就可以了。(想不出有什么不好)

Lookup少的数据应该没问题吧
 
多人接受答案了。
 
顶部