code_junkie

How to best enforce single-level recursion in a SQL table?

Nov 13th, 2011
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. CREATE TABLE Branch (
  2. branch_id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
  3. branch_name VARCHAR(80) NOT NULL,
  4. street VARCHAR(80) NULL,
  5. city VARCHAR(30) NULL,
  6. state CHAR(2) NULL,
  7. zip CHAR(5) NULL,
  8. is_satellite_office BIT NOT NULL DEFAULT(0),
  9. satellite_to_branch_id INT NULL REFERENCES Branch(branch_id)
  10. )
  11.  
  12. CONSTRAINT [CK_Branch] CHECK
  13. (
  14. (is_satellite_office = 0 AND satellite_to_branch_id IS NULL)
  15. OR (is_satellite_office = 1 AND satellite_to_branch_id IS NOT NULL)
  16. )
  17.  
  18. CREATE TABLE Branch (
  19. branch_id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
  20. branch_name VARCHAR(80) NOT NULL,
  21. street VARCHAR(80) NULL,
  22. city VARCHAR(30) NULL,
  23. state CHAR(2) NULL,
  24. zip CHAR(5) NULL,
  25. parent_id int NULL
  26. )
  27.  
  28. SELECT
  29. PARENT.BRANCH_NAME AS PARENT_BRANCH
  30. ,CHILD.BRANCH_NAME AS CHILD_BRANCH
  31. FROM
  32. BRANCH PARENT
  33. ,BRANCH CHILD
  34. WHERE CHILD.PARENT_ID PARENT.BRANCH_ID
  35.  
  36. SELECT *
  37. FROM
  38. BRANCH B1
  39. ,BRANCH B2
  40. ,BRANCH B3
  41. WHERE B1.PARENT_ID = :NEW.NEW_PARENT_ID
  42. AND B2.PARENT_ID = B1.BRANCH_ID
  43. AND B2.PARENT_ID = B3.BRANCH_ID;
Add Comment
Please, Sign In to add comment