SQL
9
12
100
Tripod Large
Third Rule of 1NF
The final rule of the first normal form, create a primary key for each table which we have
already created.
Database – Second Normal Form (2NF)
The Second Normal Form states that it should meet all the rules for 1NF and there must
be no partial dependences of any of the columns on the primary key:
Consider a customer-order relation and you want to store customer ID, customer name,
order ID and order detail and the date of purchase:
CREATE TABLE CUSTOMERS(
CUST_ID INT NOT NULL,
CUST_NAME VARCHAR (20) NOT NULL,
ORDER_ID INT NOT NULL,
ORDER_DETAIL VARCHAR (20) NOT NULL,
SALE_DATE DATETIME,
PRIMARY KEY (CUST_ID, ORDER_ID)
);
This table is in the first normal form; in that it obeys all the rules of the first normal form.
In this table, the primary key consists of the CUST_ID and the ORDER_ID. Combined, they
are unique assuming the same customer would hardly order the same thing.
However, the table is not in the second normal form because there are partial
dependencies of primary keys and columns. CUST_NAME is dependent on CUST_ID and
there's no real link between a customer's name and what he purchased. The order detail
and purchase date are also dependent on the ORDER_ID, but they are not dependent on
the CUST_ID, because there is no link between a CUST_ID and an ORDER_DETAIL or their
SALE_DATE.
To make this table comply with the second normal form, you need to separate the columns
into three tables.
First, create a table to store the customer details as shown in the code block below:
CREATE TABLE CUSTOMERS(
CUST_ID INT NOT NULL,
CUST_NAME VARCHAR (20) NOT NULL,
PRIMARY KEY (CUST_ID)
SQL
10
);
The next step is to create a table to store the details of each order:
CREATE TABLE ORDERS(
ORDER_ID INT NOT NULL,
ORDER_DETAIL VARCHAR (20) NOT NULL,
PRIMARY KEY (ORDER_ID)
);
Finally, create a third table storing just the CUST_ID and the ORDER_ID to keep a track
of all the orders for a customer:
CREATE TABLE CUSTMERORDERS(
CUST_ID INT NOT NULL,
ORDER_ID INT NOT NULL,
SALE_DATE DATETIME,
PRIMARY KEY (CUST_ID, ORDER_ID)
);
Dostları ilə paylaş: