数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2330|回复: 0

[转帖]:〈高性能的数据库〉第二讲 数据库编程

[复制链接]
发表于 2004-5-7 18:12:04 | 显示全部楼层 |阅读模式
<FONT size=3>〈高性能的数据库〉第二讲 数据库编程
--------------------------------------------------------------------------------
时间:2003-10-11 15:58:45

〈高性能的数据库〉第二讲 数据库编程

第二讲 数据库编程


编程准则:(简单说说)

1、数据逻辑的放在一块
2、业务逻辑的放在一块
3、作界面的只做界面
4、最小网络传输

------------

1、数据逻辑的放在一块

比如,表:History

那么,存储过程:spWriteHistory 表示数据逻辑:就是对History的写操作
同样,存储spQueryHistoryFromHistoryID表示根据HistoryID对History记录的查询
再同样,spQueryHistoryFromHistoryID;2(;不是普通的分号,是存储过程组)表示HistoryID对History记录查询的另外一个类似的方法

2、业务逻辑

比如,还书,则spReturnBook
      购买,则spBuyBook

此时可能要调用很多表,或很多数据逻辑:


Create Proc spBuyBook(
  @iBookID int, --书ID
  @iOperatorID int  --操作员ID
)
-------------------------------------------
--Name:    spBuyBook
--Func:    购买一本书
--Var:     见上
--Use:     spWriteOperateRecord,spProc2,spProc3....
--User:    Chair3,Chair4
--Author:  Chair3 # SapphireStudio (www.chair3.com)
--Date  :  2003-4-16
--Memo  :  临时写写的,给大家作个Sample
-------------------------------------------
AS
Begin
  Begin Tran

    --数据逻辑:更新Book表,减少数量
    Update Book
      Set BookNumber=BookNumber-1
      Where BookID=@iBookID
    ...


    --业务逻辑:写入操作记录
    Exec spWriteOperateRecord '某某人出售了一本书,书的ID为XXX'
    ...  
   
   
   
  Commit Tran  
End
  
不要试图一个存储过程做完所有的事情,应当考虑将部分代码分为更小的存储过程,以达到代码公用以及可维护性。
当然,要求性能很高的部分,最好还是单独完成。

3、界面的程序不要直接调用数据表。

俺在赛格的时候,不允许其他同事直接读取表的,他们只能有调用 Store Procedure 的权限.
这个根据开发环境而定,当然不是绝对,尽量如此.

这样,可以降低因为修改数据表而要对所有程序修改,检查的后果。

4、最小网络传输

  4.1 减少使用Select * ....语句 ,选择你只需要的数据,Select Fd1,fd2  From tb1
  4.2 减少客户端对数据库表的直接操作(与3有点同)
  4.2 避免在客户端对数据库的循环写操作,把循环转移到服务器来.
  4.3 ……忘了…靠经验了

4点最为重要,许多人的程序速度很慢,都是由于网络传输过多的缘故。


最后小结:优秀的程序员更重于对整体上的设计、可维护性、可扩展性的设计。
         

手指发麻了,先找点吃的先。</FONT>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 06:31 , Processed in 0.056997 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表