section 7
play

Section 7 CSE 344 - Winter 2015 1 Foreign Key Constraints Example - PowerPoint PPT Presentation

Section 7 CSE 344 - Winter 2015 1 Foreign Key Constraints Example with multi-attribute primary key CREATE TABLE Purchase ( prodName CHAR(30), category VARCHAR(20), date DATETIME, FOREIGN KEY (prodName, category) REFERENCES


  1. Section 7 CSE 344 - Winter 2015 1

  2. Foreign Key Constraints • Example with multi-attribute primary key CREATE TABLE Purchase ( prodName CHAR(30), category VARCHAR(20), date DATETIME, FOREIGN KEY (prodName, category) REFERENCES Product(name, category) • (name, category) must be a KEY in Product CSE 344 - Winter 2015 2

  3. What happens when data changes? Types of updates: • In Purchase: insert/update • In Product: delete/update Product Purchase Name Category ProdName Store Gizmo gadget Gizmo Wiz Camera Photo Camera Ritz OneClick Photo Camera Wiz CSE 344 - Winter 2015 3

  4. What happens when data changes? • SQL has three policies for maintaining referential integrity: • NO ACTION reject violating modifications (default) • CASCADE after delete/update do delete/update • SET NULL set foreign-key field to NULL • SET DEFAULT set foreign-key field to default value – need to be declared with column, e.g., CREATE TABLE Product (pid INT DEFAULT 42) CSE 344 - Winter 2015 4

  5. Maintaining Referential Integrity CREATE TABLE Purchase ( prodName CHAR(30), category VARCHAR(20), date DATETIME, FOREIGN KEY (prodName, category) REFERENCES Product(name, category) ON UPDATE CASCADE ON DELETE SET NULL ) Product Purchase Name Category ProdName Category Gizmo gadget Gizmo Gizmo Camera Photo Snap Camera OneClick Photo EasyShoot Camera

  6. Constraints on Attributes and Tuples • Constraints on attributes: NOT NULL -- obvious meaning... CHECK condition -- any condition ! • Constraints on tuples CHECK condition CSE 344 - Winter 2015 6

  7. Constraints on Attributes and Tuples CREATE TABLE R ( A int NOT NULL, B int CHECK (B > 50 and B < 100), C varchar(20), D int, CHECK (C >= 'd' or D > 0)) CSE 344 - Winter 2015 7

  8. Constraints on Attributes and Tuples CREATE TABLE Product ( productID CHAR(10), name CHAR(30), category VARCHAR(20), price INT CHECK (price > 0), PRIMARY KEY (productID), UNIQUE (name, category)) CSE 344 - Winter 2015 8

  9. Constraints on Attributes and Tuples What What does this constraint do? is the difference from Foreign-Key ? CREATE TABLE Purchase ( prodName CHAR(30) CHECK (prodName IN (SELECT Product.name FROM Product), date DATETIME NOT NULL) CSE 344 - Winter 2015 9

  10. General Assertions CREATE ASSERTION myAssert CHECK (NOT EXISTS( SELECT Product.name FROM Product, Purchase WHERE Product.name = Purchase.prodName GROUP BY Product.name HAVING count(*) > 200) ) But most DBMSs do not implement assertions Because it is hard to support them efficiently Instead, they provide triggers CSE 344 - Winter 2015 10

  11. Database Triggers • Event-Condition-Action rules • Event – Can be insertion, update, or deletion to a relation • Condition – Can be expressed on DB state before or after event • Action – Perform additional DB modifications CSE 344 - Winter 2015 11

  12. More About Triggers • Row-level trigger – Executes once for each modified tuple • Statement-level trigger – Executes once for all tuples that are modified in a SQL statement CSE 344 - Winter 2015 12

  13. Database Triggers Example When Product.price is updated, if it is decreased then set Product.category = ‘On sale’ CREATE TRIGGER ProductCategories AFTER UPDATE OF price ON Product REFERENCING OLD ROW AS OldTuple NEW ROW AS NewTuple FOR EACH ROW WHEN (OldTuple.price > NewTuple.price) UPDATE Product SET category = ‘On sale’ WHERE productID = OldTuple.productID CSE 344 - Winter 2015 13

  14. SQL Server Example CREATE TRIGGER ProductCategory ON Product AFTER UPDATE AS BEGIN UPDATE Product SET category=‘sale’ WHERE productID IN (SELECT i.productID from inserted i, deleted d WHERE i.productID = d.productID AND i.price < d.price) END CSE 344 - Winter 2015 14

  15. Boyce-Codd Normal Form There are no Definition . A relation R is in BCNF if: “bad” FDs: Whenever X à B is a non-trivial dependency, then X is a superkey. Equivalently: Definition . A relation R is in BCNF if: ∀ X, either X + = X or X + = [all attributes] CSE 344 – Winter 2015 15

  16. Problem 1 R(A,B,C,D,E,F,G) A à D D à C F à E,G D,C à B,F From A à D, {A}+ = {A,B,C,D,E,F,G}, it is useless From D à C, {D}+ = {D,C,B,F,E,G}, we can decompose R into R1 = {D,C,B,F,E,G} and R2 = {A,D} From F à E,G, {F}+ = {F,E,G} so we can further decompose R1 into: R11 = {E,F,G} and R12 = {C,D,B,F} CSE 344 - Winter 2015 16

  17. Problem 2 R(A,B,C,D,E,F) A à BC D à AF From A à BC, {A}+ = {A,B,C}, since closure is not {A,B,C,D,E,F} this violates BCNF. So decompose R into R1 = {A,B,C} and R2 = {A,D,E,F} R1 is in BCNF. From D à AF, {D}+ = {D,A,F} which violates BCNF. So we split R2 into: R21= {D,A,F} and R22 = {D,E} CSE 344 - Winter 2015 17

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend