README.MAX
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. Here are general trigger functions provided as workable examples
  2. of using SPI and triggers. "General" means that functions may be
  3. used for defining triggers for any tables but you have to specify
  4. table/field names (as described below) while creating a trigger.
  5. 1. refint.c - functions for implementing referential integrity.
  6. check_primary_key () is to used for foreign keys of a table.
  7.    
  8.    You are to create trigger (BEFORE INSERT OR UPDATE) using this 
  9. function on a table referencing another table. You are to specify
  10. as function arguments: triggered table column names which correspond
  11. to foreign key, referenced table name and column names in referenced
  12. table which correspond to primary/unique key.
  13.    You may create as many triggers as you need - one trigger for
  14. one reference.
  15. check_foreign_key () is to used for primary/unique keys of a table.
  16.    You are to create trigger (BEFORE DELETE OR UPDATE) using this
  17. function on a table referenced by another table(s). You are to specify
  18. as function arguments: number of references for which function has to
  19. performe checking, action if referencing key found ('cascade' - to delete
  20. corresponding foreign key, 'restrict' - to abort transaction if foreign keys 
  21. exist, 'setnull' - to set foreign key referencing primary/unique key
  22. being deleted to null), triggered table column names which correspond
  23. to primary/unique key, referencing table name and column names corresponding
  24. to foreign key (, ... - as many referencing tables/keys as specified
  25. by first argument).
  26.    Note, that NOT NULL constraint and unique index have to be defined by
  27. youself.
  28.    There are examples in refint.example and regression tests
  29. (sql/triggers.sql).
  30.    To CREATE FUNCTIONs use refint.sql (will be made by gmake from
  31. refint.source).
  32. # Excuse me for my bad english. Massimo Lambertini
  33. #
  34. #
  35. # New check foreign key 
  36. #
  37. I think that cascade mode is to be considered like that the operation over 
  38. main table is to be made also in referenced table .
  39. When i Delete , i must delete from referenced table , 
  40. but when i update , i update referenced table and not delete like unmodified refint.c .
  41. I made a patch that when i update it check the type of modified key ( if is a text , char() i
  42. added '') and then create a update query that do the right think .
  43. For my point of view that policy is helpfull because i do not have in referenced table
  44. loss of information .
  45. In preprocessor subdir i have placed a little utility that from a SQL92 table definition,
  46. it create all trigger for foreign key .
  47. the schema that i use to analyze the problem is this 
  48. create table 
  49. ( key int4 not null primary key ,...) ;
  50. create table
  51. REFERENCED_B 
  52. ( key int 4 , ... , 
  53. foreign key ( key ) references A -- 
  54. );
  55.