我想大型的应用都是把数据完整性这一块单独做的,不会用到ORACLE本身的完整性约束

解决方案 »

  1.   

    如果在Oracle里面先建好完成性约束,在编程的时候,有时不好处理,
    所以可以采用用程序来检查和维护完成性约束或者直接在Oracle里面建好约束这两种方法结合来使用
      

  2.   

    数据库完整性约束应该在设计阶段规划好,否则一旦有数据了,再添加,有一些麻烦
    通过程序实现这种约束关系,比较简单,修改、处理也容易。
    一些check、正在表达式之类的通过程序实现,主、外键约束在数据库中定义比较好。
    当然update、insert时,数据库约束稍微慢点。
      

  3.   

    数据的完整和有效性验证:
    1.程序控制:分为应用系统和IE客户端)
    2.数据库控制:DBMS本身提供的约束
    3.人为控制(这个不谈,高高级用户可以应付)
    程序和数据库控制这两种方法需要合理搭配,单独使用某一种方法都会带来或多或少的问题。
    说到效率,程序控制肯定要比数据库本身约束效率高,程序控制可以把验证所带来的开销分散在各个客户端(IE,当然也可以采用应用服务器统一验证),而数据库采用集中处理的方式进行验证,如果对每条记录的每个字段进行验证,其开销也是很可观的,另外数据库验证需要增加应用程序至数据库之间的网络传输开销,而客户端程序验证不需要。
    我们是否只需要程序控制而不需要数据库本身来约束?答案当然是否定的。
    程序不是万能的,没有十全十美的人,更没有十全十美的程序,BUG是必然存在的,没有不存在BUG的程序,总会有考虑不到的地方。
    就算把程序控制的非常好,我们排除正常使用,还要考虑到异常使用。
    异常很可能会对数据库中记录的完整及有效带来巨大的破坏作用,以至影响到上层应用。
    举一下简单的例子:
    一个表中有一个字段ID(主键唯一)
    如果程序插入了两个相同ID的值,会造成什么样的影响,想过吗?不仅对记录的统计查询造成影响,严重的会影响到上层应用系统的正常运行(程序设计不好的情况下,多表关联影响更大)。
    所以我们一定要禁止这种情况的发生,做到200%都不能发生:),数据库本身约束也是必须的。
    另外目前通过在应用系统采用SQL注射来破坏数据的情况也时常发生,处于数据的安全考虑,我们必须在数据库中进行适当的约束,尤其是影响到整条记录或整体数据的约束不可缺少。
    从业务上考虑,每插入一条业务数据一般影响单条记录的部分字段,对数据库本身没有多大影响,可采用程序控制的方式。
    从数据库本身来考虑,一定要争取做到7*24数据库正常运行,数据永久完整和有效。
    应用系统坏了,我们可以重启或修复,数据库坏了,数据记录被破坏了,可没那么容易恢复,也就严重失去了数据库管理系统存在的意义。数据安全第一!
    综合考虑系统所处的环境,合理的选择设计方案。