Langkah 2. Membangun dan memvalidasi data model logikal 4.3.2.1 Menurunkan (derive) relasi untuk model data logikal
4.3.2.4 Memeriksa Kendala – Kendala Integritas (Integrity Constraints) Langkah ini bertujuan untuk mencegah basisdata dari
ketidak-konsistenan. Kendala integritas dibagi enam bentuk dasar, yaitu :
1. Required data, beberapa atribut harus selalu mengandung nilai yang valid, dengan kata lain atribut tidak boleh mengandung nilai null. Kendala integritas ini telah dilakukan pada saat dokumentasi atribut.
2. Attribute domain constraint, setiap atribut mempunyai domain sendriri, yaitu sekumpulan nilai yang sah untuk setiap atribut. Kendala integritas ini telah dilakukan pada saat penentuan nilai yang akan dimasukkan dari tipe dan panjang dari suatu atribut.
3. Multiplicity, Kendala integritas ini menampilkan batasan yang ditempatkan pada hubungan antar data dalam database. Kendala integritas ini telah dilakukan pada saat dokumentasi atribut.
4. Entity integrity, suatu primary key dari sebuah entity tidak boleh mengandung nilai null. Setiap tuple harus memiliki suatu primary key. Kendala integritas ini telah dilakukan pada saat memilih primary key untuk setiap entiti.
5. Referential integrity, sebuah foreign key menghubungkan setiap tuple didalam relasi anak kepada tuple dalam relasi induk yang mengandung nilai candidate
6. General constraint, merubah (meng-update) entiti dapat dikendalikan oleh kendala seperti dalam transaksi “real world”.
Adapun referential integrity constraint dapat dilihat pada tabel sebagai berikut : Tabel 4.7 Tabel referential integrity constraint
Unit (Unit_Code, Desc, UpUnit_Code) Primary Key Unit_Code
Foreign Key UpUnit_Code references Unit_Code (UpUnit)
ON UPDATE CASCADE ON DELETE SET NULL UpUnit (Unit_Code, Desc)
Primary Key Unit_Code
User (User_ID, User_Name, Password, Status, Last_Login, Emp_ID) Primary Key User_ID
Foreign Key Emp_ID references Emp_ID (Employee)
ON UPDATE CASCADE ON DELETE CASCADE Employee (Emp_ID, Emp_Name, Sex, Place_Of_Birth, Date_Of_Birth, Address, Unit_Code)
Primary Key Emp_ID
Foreign Key Unit_Code references Unit_Code (Unit)
ON UPDATE CASCADE ON DELETE CASCADE Emp_Phone (Phone_No, Emp_ID)
Primary Key Phone_No
Foreign Key Emp_ID references Emp_ID (Employee)
ON UPDATE CASCADE ON DELETE CASCADE Emp_Email (Email, Emp_ID)
Primary Key Email
Foreign Key Emp_ID references Emp_ID (Empoyee)
ON UPDATE CASCADE ON DELETE CASCADE Vendor (Vendor_ID, Vendor_Name, Address, Fax, Contact_Person)
Primary Key Vendor_ID
Foreign Key Contact_Person references Contact_Person (Contact_Person)
ON UPDATE CASCADE ON DELETE CASCADE Vendor_Phone (Phone_No, Vendor_ID)
Primary Key Phone_No
Foreign Key Vendor_ID references Vendor_ID (Vendor)
ON UPDATE CASCADE ON DELETE CASCADE Vendor_Email (Email, Vendor_ID)
Primary Key Email
Foreign Key Vendor_ID references Vendor_ID (Vendor)
ON UPDATE CASCADE ON DELETE CASCADE Contact_Person (Contact_Person, Contact_Person_Phone)
Primary Key Contact_person
Delivery_Order_Header (DO_No, Date_Of_Issued, Vendor_ID, Ship_to, Ref. PPB/PPJ_No, Ref. Contract_No, PO_No, Emp_ID)
Primary Key DO_No
Foreign Key Vendor_ID references Vendor_ID (Vendor)
ON UPDATE CASCADE ON DELETE NO CHECK Foreign Key PO_No references PO_No (Purchase_Order_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key Emp_ID references Emp_ID (Employee)
ON UPDATE CASCADE ON DELETE NO CHECK Delivery_Order_Detail (Item_Code, Item_Description, Quantity, Unit, Delivery_Schedule, Note, DO_No)
Primary Key Item_Code
Foreign Key DO_No references DO_No (Delivery_Order_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Purchase_Order_Header (PO_No, Date_Of_Issued, Vendor_ID, Ship_to, Ref.PPB/PPJ_No, Emp_ID)
Primary Key PO_No
ON UPDATE CASCADE ON DELETE NO CHECK Foreign Key Emp_ID references Emp_ID (Employee)
ON UPDATE CASCADE ON DELETE NO CHECK Purchase_Order_Detail (Item_Code, Item_Description, Quantity, Unit, Unit_Price, Total_Price, Note, PO_No)
Primary Key Item_Code
Foreign Key PO_No references PO_No (Purchase_Order_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Purchase_Requisition_Header (PR_No, Date_Of_Issued, Emp_ID)
Primary Key PR_No
Foreign Key Emp_ID references Employee (Emp_ID)
ON UPDATE CASCADE ON DELETE NO CHECK Purchase_Requisition_Detail (Item_Material_Code, Item_Description, Unit_Price, Quantity, Item_Note, PR_No)
Primary Key Item_Material_Code
Foreign Key PR_No references Purchase_Requisition_Header (PR_No)
ON UPDATE CASCADE ON DELETE NO ACTION Asset_Header (Asset_No, Asset_Name, Brand, Type, DO_No, Date_Of_Issued, Price, Currency, Time_Usage, Unit_Code, Status, Emp_ID )
Primary Key Asset_No
Foreign Key DO_No references DO_No (Delivery_Order_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key Unit_Code references Unit_Code (Unit)
ON UPDATE CASCADE ON DELETE NO CHECK Foreign Key Emp_ID refernces Emp_ID (Employee)
ON UPDATE CASCADE ON DELETE NO CHECK Asset_Detail (Item_Code, Item_Description, Serial_No, Asset_No)
Primary Key Item_Code
Foreign Key Asset_No references Asset_No (Asset_Header)
ON UPDATE CASCADE ON DELETE NO ACTION History_Header (History_ID, Expired_Date, Expired_Description, Historical_Status,
Asset_No)
Primary Key History_ID
Foreign Key Asset_No references Asset_No (Asset_Header)
ON UPDATE CASCADE ON DELETE NO ACTION History_Detail (Item_Code, Item_Description, Serial_No, History_ID)
Primary Key Item_Code
Foreign Key History_ID references History_ID (History_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Approving (PR_No, PO_No, Date_Approved, Status)
Primary Key PR_No, PO_No
Foreign Key PR_No references PR_No(Purchase_Requisition_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key PO_No references PO_No (Purchase_Order_Header)
ON UPDATE CASCADE ON DELETE NO ACTION Using (Emp_ID, Asset_No, DateComment, Comment)
Primary Key Emp_ID, Asset_No
Foreign Key Emp_ID references Emp_ID(Employee)
ON UPDATE CASCADE ON DELETE NO CHECK Foreign Key Asset_No references Asset_No(Asset_Header)
ON UPDATE CASCADE ON DELETE NO ACTION
Dan dengan General Constraint sebagai berikut :
CONSTRAINT EmployeeNotRequestPRTooMuch CHECK ( NOT EXIST ( SELECT Emp_ID
FROM Purchase_Requisition_Header GROUP BY Emp_ID
HAVING COUNT(*) > 10 ) )
Adapun General Constraint di atas dimaksudkan untuk membatasi jumlah pengajuan aset oleh employee.