Gawa muna tayo ng tables at mag insert sa tables na ginawa natin
[CODE lang="sql" title="Database"]CREATE TABLE Departments
(
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);
CREATE TABLE Students
(
StudentID INT PRIMARY KEY,
FullName VARCHAR(50) NOT NULL,
Gender VARCHAR(15) NOT NULL,
DepartmentID INT NOT NULL,
FOREIGN KEY (DepartmentID) REFERENCES Departments (DepartmentID) ON DELETE CASCADE
);
INSERT INTO Departments VALUES (1,'Information Technology')
INSERT INTO Departments VALUES (2,'Computer Science')
INSERT INTO Departments VALUES (3,'Information Systems')
INSERT INTO Departments VALUES (4,'Computer Engineering')
INSERT INTO Departments VALUES (5,'Human Resource Management')
INSERT INTO Students VALUES (1,'Illyasviel von Einzbern','Female',1)
INSERT INTO Students VALUES (2,'Emiya Shirou','Male',5)
INSERT INTO Students VALUES (3,'Tohsaka Rin','Female',3)
INSERT INTO Students VALUES (4,'Mashu Kyrielight ','Female',2)
INSERT INTO Students VALUES (5,'Miyu Edelfelt','Female',3)
INSERT INTO Students VALUES (6,'Artoria Pendragon','Male',4)
[/CODE]
Referential Integrity (RI) - The
foreign key SHOULD have a matching
primary key or in special circumstances, it should be null since it's main goal is to have no orphan records.
Basically kailangan lahat ng ginagamit mong foreign key ay dapat naka set as primary key sa table na pinagbabasihan mo. Tignan mo yung example na binigay ko sayo sa table ng Departments naka set as PRIMARY KEY ang DepartmentID dahil gagamitin siya ni Students table na nakaset as FOREIGN KEY.
Bakit ba natin kailangan mag implement ng Referential Integrity (RI) na yan? Ginagawa to para maiwasan magkaroon ng Orphan Records. Ang Orphan Records ay mga record na kung saan may nakareference sa isang table pero hindi naman siya nag e-exist sa table na pambabasihan mo.
Ito example (Same siya sa original example
PERO tinanggal ko ang FOREIGN KEY(DepartmentID) REFERENCES Departments (DepartmentID))
SQL:
CREATE TABLE Students
(
StudentID INT PRIMARY KEY,
FullName VARCHAR(50) NOT NULL,
Gender VARCHAR(15) NOT NULL,
DepartmentID INT NOT NULL
);
CREATE TABLE Departments
(
DepartmentID INT,
DepartmentName VARCHAR(50)
);
INSERT INTO Departments VALUES (1,'Information Technology')
INSERT INTO Departments VALUES (2,'Computer Science')
INSERT INTO Departments VALUES (3,'Information Systems')
INSERT INTO Departments VALUES (4,'Computer Engineering')
INSERT INTO Departments VALUES (5,'Human Resource Management')
INSERT INTO Students VALUES (1,'Illyasviel von Einzbern','Female',1)
INSERT INTO Students VALUES (2,'Emiya Shirou','Male',5)
INSERT INTO Students VALUES (3,'Tohsaka Rin','Female',3)
INSERT INTO Students VALUES (4,'Mashu Kyrielight ','Female',2)
INSERT INTO Students VALUES (5,'Miyu Edelfelt','Female',3)
INSERT INTO Students VALUES (6,'Artoria Pendragon','Male',4)
Pag nag insert ako sa Students ng
SQL:
INSERT INTO Students VALUES (9,'Luviagelita Edelfelt','Female',100)
ma i-insert siya sa Students table natin pero yung problema sa example na ito ay hindi siya naka reference through FOREIGN KEY (sa Students table) at PRIMARY KEY (sa Departments table), malaking problema to kasi walang table na pagbabasihan na department si Students table.
--- --- ---
Tuple = Row
example. mag execute tayo ng SELECT * FROM Students may lalabas na 6 rows, meaning, 6 tuples. Kung 10 records ang lumabas, edi 10 tuples.
Balik tayo sa DELETE statement mo
OPERATION: This operation is acceptable and deletes one tuple - meaning isang row mismo ang dinedelete mo.
example:
SQL:
DELETE * FROM Students
WHERE StudentID = 1 AND DepartmentID = 1
sa example na to isang row mismo ang dinedelete natin, acceptable to kasi yung row na gusto natin idelete ay madedelete mismo dahil nagbigay ka ng madaming conditions.
OPERATION: This deletion is not acceptable, because there are tuples in DepartmentID that refer to this tuple
example:
SQL:
DELETE FROM Students
WHERE DepartmentID = 3
Halimbawa gusto mong i delete yung record ni Tohsaka Rin (StudentID: 3 | DepartmentID: 3), pero inispecify mo sa condition mo na DepartmentID na 3, may problema to dahil may mga ibang rows na may DepartmentID na number 3 kaya hindi lang si Tohsaka Rin ang madedelete mo kundi pati na rin si Miyu Edelfelt (StudentID: 5 | DepartmentID: 3) dahil nasa DepartmentID 3 din siya.
OPERATION: this deletion will result in even worse referential integrity violations, because the tuple involved is referenced by tuples from the EMPLOYEE, DEPARTMENT, WORKS_ON, and DEPENDENT relations. Basically, mas maraming violation to dahil pag nag execute ka ng
DELETE FROM EMPLOYEE WHERE SSN='3334455555' mas marami kang maaapektuhan na rows sa ibang mga table.
(Taken from:
You do not have permission to view the full content of this post.
Log in or register now.)