|
| 1 | +/*Charlie's Chocolate Factory company produces chocolates. The following product information is stored: product name, product ID, and quantity on hand. These chocolates are made up of many components. Each component can be supplied by one or more suppliers. The following component information is kept: component ID, name, description, quantity on hand, suppliers who supply them, when and how much they supplied, and products in which they are used. On the other hand following supplier information is stored: supplier ID, name, and activation status. |
| 2 | +
|
| 3 | +Assumptions |
| 4 | +
|
| 5 | +A supplier can exist without providing components. |
| 6 | +A component does not have to be associated with a supplier. It may already have been in the inventory. |
| 7 | +A component does not have to be associated with a product. Not all components are used in products. |
| 8 | +A product cannot exist without components. |
| 9 | +
|
| 10 | +Do the following exercises, using the data model. |
| 11 | +
|
| 12 | + a) Create a database named "Manufacturer" |
| 13 | +
|
| 14 | + b) Create the tables in the database. |
| 15 | +
|
| 16 | + c) Define table constraints.*/ |
| 17 | + |
| 18 | +---Solution |
| 19 | +--a) Create a database named "Manufacturer" |
| 20 | +CREATE DATABASE Manufacturer; |
| 21 | +USE Manufacturer |
| 22 | +--Create Schemas |
| 23 | + |
| 24 | +CREATE SCHEMA Product |
| 25 | +GO |
| 26 | +CREATE SCHEMA Component |
| 27 | +GO |
| 28 | + |
| 29 | +--b) Create the tables in the database. |
| 30 | +CREATE TABLE Product.Product( |
| 31 | + prod_id INT,--prod_id INT IDENTITY(1, 1) PRIMARY KEY |
| 32 | + prod_name VARCHAR(50),--NOT NULL |
| 33 | + quantity INT --NOT NULL |
| 34 | +); |
| 35 | +CREATE TABLE Product.Prod_Comp( |
| 36 | + prod_id INT , |
| 37 | + comp_id INT, |
| 38 | + quantity_comp INT --NOT NULL |
| 39 | + --PRIMARY KEY(prod_id, comp_id), |
| 40 | + --FOREIGN KEY(prod_id) REFERENCES product(prod_id) ON DELETE CASCADE ON UPDATE CASCADE, |
| 41 | + --FOREIGN KEY(comp_id) REFERENCES component(comp_id) ON DELETE CASCADE ON UPDATE CASCADE |
| 42 | +); |
| 43 | +CREATE TABLE Component.Component( |
| 44 | + comp_id INT ,--NOT NULL,--comp_id INT IDENTITY(1, 1) PRIMARY KEY |
| 45 | + comp_name VARCHAR(50) , --NOT NULL ,--A supplier can exist without providing components |
| 46 | + description VARCHAR(50), |
| 47 | + quantity_comp INT --NOT NULL |
| 48 | +); |
| 49 | +CREATE TABLE Component.Comp_Supp( |
| 50 | + supp_id INT,--supp_id INT PRIMARY KEY --NOT NULL |
| 51 | + comp_id INT,--comp_id INT PRIMARY KEY --NOT NULL |
| 52 | + order_date DATE, |
| 53 | + quantity INT--NOT NULL |
| 54 | +); |
| 55 | +CREATE TABLE Component.Supplier( |
| 56 | + supp_id INT ,--NOT NULL,--supp_id INT PRIMARY KEY |
| 57 | + supp_name VARCHAR(50) ,--NOT NULL |
| 58 | + supp_location VARCHAR(50), |
| 59 | + supp_country VARCHAR(50), |
| 60 | + is_active BIT --NOT NULL |
| 61 | + |
| 62 | +) |
| 63 | + |
| 64 | +--- c) Define table constraints: |
| 65 | + |
| 66 | +--for Product.Product table |
| 67 | +ALTER TABLE Product.Product |
| 68 | +ALTER COLUMN prod_id INT NOT NULL |
| 69 | + |
| 70 | +ALTER TABLE Product.Product |
| 71 | +ALTER COLUMN prod_name VARCHAR(50) NOT NULL |
| 72 | + |
| 73 | +ALTER TABLE Product.Product |
| 74 | +ALTER COLUMN quantity INT NOT NULL |
| 75 | + |
| 76 | +ALTER TABLE Product.Product |
| 77 | +ADD CONSTRAINT pk_product PRIMARY KEY(prod_id) |
| 78 | + |
| 79 | +--for Component.Component table |
| 80 | +ALTER TABLE Component.Component |
| 81 | +ALTER COLUMN comp_id INT NOT NULL |
| 82 | + |
| 83 | +ALTER TABLE Component.Component |
| 84 | +ALTER COLUMN comp_name VARCHAR(50) NOT NULL |
| 85 | + |
| 86 | +ALTER TABLE Component.Component |
| 87 | +ALTER COLUMN quantity_comp INT NOT NULL |
| 88 | + |
| 89 | +ALTER TABLE Component.Component |
| 90 | +ADD CONSTRAINT pk_component PRIMARY KEY(comp_id) |
| 91 | + |
| 92 | +--for Product.Prod_Comp table |
| 93 | +ALTER TABLE Product.Prod_Comp |
| 94 | +ALTER COLUMN quantity_comp INT NOT NULL |
| 95 | + |
| 96 | +ALTER TABLE Product.Prod_Comp |
| 97 | +ADD CONSTRAINT fk_prod_id FOREIGN KEY(prod_id) REFERENCES Product.Product(prod_id) ON DELETE CASCADE ON UPDATE CASCADE |
| 98 | + |
| 99 | +ALTER TABLE Product.Prod_Comp |
| 100 | +ADD CONSTRAINT fk_comp_id FOREIGN KEY(comp_id) REFERENCES Component.Component(comp_id) ON DELETE CASCADE ON UPDATE CASCADE |
| 101 | + |
| 102 | +ALTER TABLE Product.Prod_Comp |
| 103 | +ALTER COLUMN prod_id INT NOT NULL; |
| 104 | + |
| 105 | +ALTER TABLE Product.Prod_Comp |
| 106 | +ALTER COLUMN comp_id INT NOT NULL; |
| 107 | + |
| 108 | +ALTER TABLE Product.Prod_Comp |
| 109 | +ADD CONSTRAINT pk_comp_prod PRIMARY KEY (comp_id, prod_id); |
| 110 | + |
| 111 | + |
| 112 | +--for Component.Supplier table |
| 113 | +ALTER TABLE Component.Supplier |
| 114 | +ALTER COLUMN supp_id INT NOT NULL |
| 115 | + |
| 116 | +ALTER TABLE Component.Supplier |
| 117 | +ALTER COLUMN supp_name VARCHAR(50) NOT NULL |
| 118 | + |
| 119 | +ALTER TABLE Component.Supplier |
| 120 | +ALTER COLUMN is_active BIT NOT NULL |
| 121 | + |
| 122 | +ALTER TABLE Component.Supplier |
| 123 | +ADD CONSTRAINT pk_supplier PRIMARY KEY(supp_id) |
| 124 | + |
| 125 | +--for Component.Comp_Supp table |
| 126 | +ALTER TABLE Component.Comp_Supp |
| 127 | +ALTER COLUMN quantity INT NOT NULL |
| 128 | + |
| 129 | +ALTER TABLE Component.Comp_Supp |
| 130 | +ADD CONSTRAINT fk_supp_id FOREIGN KEY(supp_id) REFERENCES Component.Supplier(supp_id) ON DELETE CASCADE ON UPDATE CASCADE |
| 131 | + |
| 132 | +ALTER TABLE Component.Comp_Supp |
| 133 | +ADD CONSTRAINT fk_comp_id FOREIGN KEY(comp_id) REFERENCES Component.Component(comp_id) ON DELETE CASCADE ON UPDATE CASCADE |
| 134 | + |
| 135 | +ALTER TABLE Component.Comp_Supp |
| 136 | +ALTER COLUMN supp_id INT NOT NULL |
| 137 | + |
| 138 | +ALTER TABLE Component.Comp_Supp |
| 139 | +ALTER COLUMN comp_id INT NOT NULL |
| 140 | + |
| 141 | +ALTER TABLE Component.Comp_Supp |
| 142 | +ADD CONSTRAINT pk_supp_comp PRIMARY KEY (supp_id, comp_id) |
| 143 | + |
| 144 | + |
| 145 | + |
0 commit comments