SQL数据库的完整性问题(100分)

J

Jao

Unregistered / Unconfirmed
GUEST, unregistred user!
大型数据库都有完整性概念,我在一个表中删除一条记录,相应的其它表
中与其相关的记录也会被删除,可是有些原始记录是不想被删除的,这真
是件很麻烦的事。
请问各位有没有什么好的专门针对这种问题的解决方案。我觉得数据库完
整性虽然更好地体现了关系数据库的特点,但它带来的副作用也不小。
顺便提个建议:可不可以建立个精华区或是专门问题讨论区,把一些十分
普遍的问题和解决方案收集在一起,这样大家查阅起来就很方便了。
 
你所需要做的就是:
将不想删除记录的附表的外键和主表键的联系断开.
 
我觉得没什么问题,不想产生关联,那你就去掉哪个关联。实际上这种关联

很方便的保持了数据库的完整性,不知你所说的‘原始记录’指的是什么情况?

 
1、许多数据库(MSSQL)有供选择的功能:
A.删除主健则删除其关联字段
B.如果有关联字段不允许删除字段
所以无论如何选择 SEASKY的方法是最好的
2、在实际应用中,所谓不希望删除“原始记录”可能是一个归档的概念
所以不应该删除主键,一旦如此其不混乱?
 
明白大家的意思,问题在这里:我们用数据库来记录各个用户访问系统的情况,
每个用户都有一个帐号,有的帐号会作废,所以必须删除,但这个帐号访问系统
的记录应当作为系统被使用的基本情况而保留下来;同时,这两个表的关联被另
外一个程序用到,所以又不能硬把它去掉!在这种情况下该如何是好?
 
方法1、改不能删除表的关键子(删除父表前)
方法2、删除前把不能删除的东西复制到另一个数据库
 
原来如此,
其实, 你并不需要删除父表中的帐号, 只需要添写一个标志字段,标记
该帐号是否有效. 这样就不需要删除任何记录. 你如果害怕安全性,
可以建立视图, 将无效的帐号屏蔽掉.
 
我现在面临这样的情况:
这个系统是个没有完成的东东,有那么一个家伙写了绝大部分的程序,可是却留
下一个长长的尾巴(这个习惯可真该死),我的任务就是补齐这条尾巴。首先我不
能更改数据库结构,因为其它程序要用到;其次我不想直接对数据库进行调整,
因为这个系统还分发出几十套,我不可能一一去更改数据库。
我的想法是能否利用程序动态的处理这个问题,不知能否绕个弯子,先屏蔽掉两
个表之间的关联,然后删除帐号,保持历史记录在原来的表中不动。这样可能吗?
请各位大虾给个详细的指点吧。
 
没人要分吗?100耶。
 
比较好一些的办法:

例如 你原来的帐户的表名为ACNT , 字段有 LID, LNAME
1.你先将ACNT更名为ACNT1,
2.在ACNT1表添加FLAG CHAR(1)字段, (当FLAG=NULL时 , 帐户有效)
3.执行下面命令建立视图,

Create View ACNT as select LID, LNAME From ACNT1
where FLAG=null

这样你不必改变程序, 拿视图ACNT代替原有的表ACNT.


 
虽然不算解决问题,但感谢大家帮忙!所以来者有份,可是100分成三份.....
哇,是个无限循环,没法均富耶。SeaSky兄比别人多回答,所以多一点点吧,
另外两位老兄多包涵,允许一部分人先富起来嘛 :)
 
多人接受答案了。
 
顶部