菜鸟请教高手用触发器维护数据库表的完整性问题(高分酬谢!)
初次学习写触发器,心中非常迷惑,本来对数据库表中的外键功能理解就不好,学习的时候,在插删改时经常遇到关联出错,所以决定用触发器来代替外键!!但是要自己下手时又感到很为难,不知如何下手,我把表的结构写在下面,应该怎样建立触发,在哪几个表之间,只要说明功能就行,不必写出代码!(同时我把我的疑惑写在下面,请高手分析一下!)
表1 图书(标准图书编号(主键),出版社标识,书名,图书类别,内容提要,图书价格,图书折扣,图书购入日期,图书购入数量,图书出版出版日期,图书封面)
表2 图书与作家(标准图书编号,作家标识),主键是(标准图书编号,作家标识)
表3 作家(作家标识(主键),姓名)
表4 出版社(出版社标识(主键),出版社名称)
表5 销售记录(交易标识(主键),销售时间,标准图书编号,销售数量,客房标识)
表6 客户(客户标识(主键),客户名称,客户地址,客户所在城市,客户邮政编码,客户电话号码)
问题1:我在程序中有一个界面,是录入出版社标识和出版社名称(表4),想建立一个触发器,使表1添加一个新的出版社标识的记录,这样是否会在表1中添加一个除了有出版社标识外其他都为空的记录呢?,而在定义表1时,字段都不能为空,这样就会出错!,但是怎样让表1知道已经录入了新的出版社标识呢?
问题2: 感觉在录入数据时要把所有的表都放在一个程序界面中才不会出现关联错误(当然是错误的!)
我的错误思路是这样的! 如果表1中添加了新的标准图书编号的话,那么表2必然要插入一条记录,记录下新的标准图书编号,同时表5也应该插入一条新的记录也记录下新的标准图书编号,而表2和表5其他的字段不能为空啊!那么表2就把表3带上,表5就把表6带上,如此下去就把要把所有的表放在一个程序界面上录入,这当然是错误的!请高手指出错误所在!!
请高手说一下上述表中应该建立几个怎样的触发器来维护相关表的完整性,说一下用途就可以了,不必写出代码的!
上述概念非常重要,如果能够得到解决的话,无疑会解开长久的困惑!期待中!