BAB 4
PERANCANGAN DAN IMPLEMENTAS I
4.1 Diagram Alir Data
Berikut ini adalah diagram konteks dari sistem yang akan dirancang
4.2 Perancangan Basis Data
Perancangan basis data yang dilakukan pada PT. Prisma Global Solusi dibagi kedalam tiga tahapan utama. Yaitu :
1. Perancangan basis data konseptual ( Conceptual Database Design ). 2. Perancangan basis data logikal ( Logical Database Design ).
3. perancangan basis data fisikal ( Phyisical Database Design ).
4.2.1 Perancangan Basis Data Konseptual
Perancangan basis data konseptual merupakan suatu proses pembuatan model dengan menggunakan informasi yang diperoleh dari perusahaan. Beberapa langkah penting dalam merancang basis data konseptual, diantaranya :
1. Identifikasi tipe entitas 2. Identifikasi tipe relasional
3. Identifikasi dan asosiasi atribut suatu entitas 4. Identifikasi primary key setiap entitas
4.2.1.1 Mengidentifikasi Tipe Entiti
Tujuan dari tahapan ini adalah untuk menentukan entitas utama yang di butuhkan.
Tabel 4.1 Tabel Data Dictionary
Entity Name Description Aliases Occurences
Employee Informasi umum mengenai pegawai secara lengkap.
Pegawai Seseorang yang bekerja pada
perusahaan
Division Informasi mengenai divisi yang terdapat pada perusahaan
Divisi Setiap pegawai bekerja pada divisinya masing-masing
Privilege Informasi mengenai hak akses dari setiap pegawai pada
perusahaan
HakAkses Setiap memiliki hak akses yang berbeda-beda sesuai wewenang yang diberikan
perusahaan. Absence Informasi mengenai
absensi yang dilakukan pegawai secara lengkap
Absen Setiap pegawai
mengisi absen
LeaveRequest Informasi mengenai permohonan
cuti/ijin/sakit dari setiap pegawai
PermohonanCuti Setiap pegawai mengajukan permohonan cuti/ijin/sakit ke
perusahaan LeaveEntitle Informasi mengenai
jatah cuti dari setiap pegawai
JatahCuti Setiap pegawai memiliki jatah cutinya masing-masing selama setahun
AllowClaim Informasi mengenai detail pengajuan claim oleh pegawai yang berhubungan dengan absensi
AllowanceClaim Detail
Informasi mengenai pengajuan claim oleh pegawai yang
berhubungan dengan absensi secara lengkap NonAllowClaim Informasi mengenai
detail pengajuan claim oleh pegawai yang tidak berhubungan dengan absensi NonAllowanceCla imDetail Informasi mengenai pengajuan claim oleh pegawai yang tidak berhubungan dengan absensi secara lengkap
Project Informasi mengenai proyek yang sedang ditangani oleh perusahaan
Proyek Setiap proyek
ditangani oleh pegawai yang ada dalam
perusahaan ProjectStatus Informasi mengenai
status proyek
StatusProyek Setiap proyek memiliki status yang ditentukan oleh
perusahaan sesuai dengan
perkembangannya Client Informasi mengenai
klien dari perusahaan
Klien Perusahaan menangani
proyek yang diberikan oleh klien
Stage Informasi mengenai semua kemungkinan tahapan-tahapan yang ada pada project
Tahapan Setiap proyek memiliki pilihan
tahapan-tahapan pelaksanaan proyek yang disediakan oleh perusahaan
News Informasi mengenai berita-berita yang berkaitan dengan perusahaan
Berita Perusahaan menyediakan berita-berita yang berkaitan dengan perusahaan Holiday Informasi mengenai
daftar hari libur
HariLibur Perusahaan menetapkan hari libur setiap tahunnya AbsenceType Informasi mengenai
jenis absensi beserta besarnya ganti rugi yang berhubungan
JenisAbsen Perusahaan menetapkan besarnya ganti rugi dari claim sesuai dengan jenis
dengan absen tersebut absensi yang ada LeaveType Informasi mengenai
jenis cuti yang bisa diambil pegawai
JenisCuti Pegawai memilih jenis cuti dalam pengajuan cutinya sesuai kebutuhan
4.2.1.2 Mengidentifikasikan Tipe Relasional
Langkah ini bertujuan untuk mengidentifikasikan pentingnya relasi yang ada antara tipe entiti.
Tabel 4.2 Tabel Kamus Data yang Menunjukkan Relasi Antar Tipe Entiti Entity Name Multiplicity Relationship Entity Name Multiplicity
1..1 M emiliki Privilege 1..1 1..1 M engisi Absence 1..* 1..1 M emeriksa Absence 1..* 1..1 LM empunyai LeaveEntitle 1..* 1..1 M emohon LeaveRequest 0..* 1..1 M engijinkan LeaveRequest 0..* 1..1 AM engajukan AllowClaim 0..* 1..1 AM enyetujui AllowClaim 0..* 1..1 NM engajukan NonAllowClaim 0..* 1..1 NM enyetujui NonAllowClaim 0..* Employee 1..* M empunyai Division 1..1
1..* M enangani Project 1..*
1..1 M engatur Project 1..*
1..1 M empublikasikan News 0..* 0..* M engontrol Employee 0..* Absence 1..1 M enghasilkan AllowClaim 0..1 0..* Dipengaruhi Holiday 0..* LeaveRequest
1..* LM empengaruhi LeaveEntitle 1..1
Client 1..1 M emberikan Project 1..*
Project 0..* M engandung Stage 1..*
1..1 Dipilih dalam Absence 1..*
Stage 1..1 StDipilih dalam Absence 1..*
AbsenceType 1..1 Dimiliki Absence 1..*
LeaveType 1..1 LDimiliki LeaveRequest 1..*
4.2.1.3 Identifikasi dan Asosiasi Atribut Suatu Entiti
Langkah ini bertujuan untuk mengasosiasikan atribut dengan tipe entiti atau tipe relasi yang sesuai.
Tabel 4.3 Tabel Identifikasi Atribut dan Domain Atribut Entity Employee Employee
Attribute Description
Data type and
Length NULLS
Multi valued
Username Username dari pegawai Varchar (30) NO NO Password Password dari pegawai Varchar (40) NO NO EmployeeID Kode dari pegawai yang unik Char (8) must
be [current year][/][001-999]
NO NO
Name Nama lengkap dari pegawai Varchar (40) YES NO Gender Jenis Kelamin dari Pegawai Char (1) must
be one of ‘M’ or‘F’
YES NO
Title Jabatan dari pegawai Varchar (30) YES NO
Address Alamat tempat tinggal pegawai Varchar (100) YES NO Phone Nomor telepon pegawai yang
dapat dihubungi
OfficialEmail Email kantor setiap pegawai Varchar (50) YES NO PersonalEmail Email pribadi setiap pegawai Varchar (50) YES YES BirthDate Tanggal lahir dari pegawai
format (yyyy-mm-dd)
Date YES NO
Color Simbol warna yang mewakili setiap pegawai untuk digunakan pada gant chart project Char (7) must be [#][A-F or 0-9] [A-F or 0-9] [A-F or 0-9] [A-F or 0-9] [A-F or 0-9] [A-F or 0-9] YES NO
StartofService Tanggal pegawai mulai bekerja pada perusahaan
format (yyyy-mm-dd)
Date YES NO
EmpStatus Status pegawai yang
menandakan pegawai masih aktif atau tidak
Boolean YES NO
NPWP Nomor Pokok Wajib Pajak dari pegawai
Varchar (20) YES NO
ResignDate Tanggal keluar pegawai dari perusahaan (tidak aktif)
format (yyyy-mm-dd)
Date YES NO
Tabel 4.4 Tabel Identifikasi Atribut dan Domain Atribut Entity Division Division
Attribute Description
Data type and
Length NULLS
Multi valued
DivisionID Kode divisi dari setiap pegawai
Char (3) must be D01-D99
NO NO
DivisionName Nama divisi yang ada di perusahaan
Tabel 4.5 Tabel Identifikasi Atribut dan Domain Atribut Entity Privilege Privilege
Attribute Description
Data type and
Length NULLS
Multi valued
VerifierAbsence Hak pegawai dalam memverifikasi Absent pegawai lainnya
Boolean NO NO
AppLeave Hak pegawai dalam memverifikasi
pengajuan cuti/ijin/sakit
pegawai lainnya (ditentukan per divisi)
Boolean YES YES
AppClaim Hak pegawai dalam memverifikasi
pengajuan claim pegawai lainnya (ditentukan per divisi )
Boolean YES YES
Payer Hak pegawai dalam
melakukan pembayaran claim pegawai yang telah disetujui oleh approver claim
NewsEditor Hak pegawai dalam me-manage berita yang akan ditampilkan di website perusahaan
Boolean NO NO
HolidayEditor Hak pegawai dalam menetapkan hari libur yang berlaku di perusahaan
Boolean NO NO
ProjectManager Hak pegawai dalam menentukan segala hal yang berhubungan dengan proyek yang
ditangani oleh perusahaan
Boolean NO NO
SuperUser Hak pegawai dalam Boolean NO NO
Tabel 4.6 Tabel Identifikasi Atribut dan Domain Atribut Entity LeaveRequest LeaveRequest
Attribute Description
Data type and
Length NULLS
Multi valued
LeaveRequestID
Kode yang terdapat pada pengajuan cuti/ijin/sakit pegawai Char (7) must be [L][current year][/][001-NO year][/][001-NO
999] (L08/001)
LStartDate
Tanggal mulai dari cuti/ijin/sakit yang diajukan pegawai Date NO NO LEndDate Tanggal berakhirnya cuti/ijin/sakit yang diajukan pegawai Date NO NO Duration Lama cuti/ijin/sakit yang diajukan pegawai
Int (2) YES NO
LeaveNotes
Keterangan tambahan tentang segala sesuatu yang berhubungan dengan cuti/ijin/sakit yang diajukan pegawai
Varchar (50) YES NO LRequestDate Tanggal pengajuan cuti/ijin/sakit pegawai Date NO NO LeaveDate
Tanggal kapan cuti diambil Date NO YES LRequestStatus Keterangan yang menunjukkan apakah pengajuan cuti/ijin/sakit tersebut diterima atau ditolak (rejected or
Char (1) must be one of ‘1’,
approved) LeaveReason Alasan ditolaknya pengajuan cuti/ijin/sakit pegawai Varchar (50) YES NO DecisionDate Tanggal diputuskannya pengajuan cuti/ijin/sakit diterima oleh
perusahaan atau tidak
Datetime YES NO
Tabel 4.7 Tabel Identifikasi Atribut dan Domain Atribut Entity LeaveEntitle LeaveEntitle
Attribute Description
Data type and
Length NULLS
Multi valued
EntitleID
Kode unik yang berkaitan dengan history cuti pegawai
Char (10) must be [E] [current year] [current month] [current day] [/][01-99] (080101/01) NO NO Duration
Lama cuti yang pernah diajukan pegawai
Int (2) NO NO
dengan pengajuan dan penambahan cuti pegawai
EntitleStatus
Keterangan apakah data yang di input berupa ‘add’ or ‘leave’ Varchar (10) must be one of ‘Add’ or‘Leave’ NO NO EntitleActualDate Waktu yang menunjukkan kapan data pada tabel leave entitle dimasukkan
Datetime NO NO
Tabel 4.8 Tabel Identifikasi Atribut dan Domain Atribut Entity Absence Absence
Attribute Description
Data type and
Length NULLS
Multi valued
AbsenceID Kode absen
Char (10) must be [A] [current year][current month][current day][/] [01-99] (A080101/01) NO NO
AbsDate
Tanggal dan waktu pegawai melakukan absen ke perusahaan Date NO NO AbsenceNotes Keterangan tambahan yang berhubungan dengan absen yang dilakukan oleh pegawai
Varchar (50) YES NO
AbsenceStatus
Keterangan yang menunjukkan apakah absensi pegawai diterima atau ditolak (rejected or verified) Char (1) must be one of ‘0’, ‘1’ or ‘2’ NO NO AbsClaimStatus Keterangan mengenai status claim pegawai yang berhubungan dengan absensi (rejected, claimed, requested, paid ) Char (1) ) must be one of ‘0’ or‘1’ or ‘2’ or‘3’ YES NO AbsenceReason Alasan ditolaknya absensi yang diisi oleh pegawai
Varchar (50)
BackDate
Status yang menandakan absen yang dilakukan untuk hari yang telah lewat (masa lampau)
Boolean NO NO
AbsActualDate
Tanggal dan waktu pegawai melakukan absent.
DateTime NO NO
Tabel 4.9 Tabel Identifikasi Atribut dan Domain Atribut Entity AllowClaim AllowClaim
Attribute Description
Data type and
Length NULLS
Multi valued
ClaimID
Kode claim pengajuan pegawai Char (9) must be [C] [current year][/] [001-999] NO NO AllowClaimPrice
Besarnya jumlah ganti rugi untuk sesuai dengan jenis absensi yang diajukan pegawai, yang ditetapkan oleh perusahaan
Decimal (10,2)
CRequestDate
Tanggal pengajuan claim oleh pegawai
Datetime NO NO
CRequestStatus
Status claim yang telah diajukan karyawan yang ditentukan oleh
Approver Claim (rejected, pending, claimed dan paid)
Char (1) must be one of ‘0’, ‘1’ , ‘2’ or ‘3’ NO NO ClaimReason Alasan ditolaknya pengajuan claim pegawai Varchar (50) YES NO
Tabel 4.10 Tabel Identifikasi Atribut dan Domain Atribut Entity NonAllowClaim NonAllowClaim
Attribute Description
Data type and
Length NULLS
Multi valued
ClaimID
Kode claim pengajuan pegawai Char (9) must be [C] [current year][/] [001-999] (C2008/001) NO NO Sequence
Urutan dari claim yang diajukan
NACDescription
Keterangan dari claim non allowance yang diajukan
Varchar (50) NO NO
Price
Jumlah harga dari claim yang diajukan
Decimal (10,2) NO NO
CRequestDate
Tanggal pengajuan claim oleh pegawai
Datetime NO NO
CRequestStatus
Status claim yang telah diajukan karyawan yang ditentukan oleh
Approver Claim (rejected, pending, claimed dan paid)
Char (1) must be one of ‘0’, ‘1’ , ‘2’ or ‘3’ NO NO ClaimReason Alasan ditolaknya pengajuan claim pegawai Varchar (50) YES NO
Tabel 4.11 Tabel Identifikasi Atribut dan Domain Atribut Entity Project Project
Attribute Description
Data type and
Length NULLS
Multi valued
ProjectID
Kode dari proyek yang ditangani oleh
Char (9) must be [P] [current
perusahaan year][/] 001-999]
(P2008/001)
ProjectName
Nama proyek yang ditangani oleh perusahaan
Varchar (50) NO NO
IsFinished
Status yang menandakan apakah proyek yang ditangani telah selesai atau masih dalam proses pengerjaan Boolean NO NO CompletedDate Tanggal selesainya pengerjaan proyek Date YES NO
Tabel 4.12 Tabel Identifikasi Atribut dan Domain Atribut Entity ProjectStatu s ProjectStatus Attribute Description Data type and Length NULLS Multi valued StatusID
Kode status proyek yang ditangani perusahaan
Char (2) [S][1-9]
NO NO
mengenai status proyek yang ditangani oleh perusahaan (pending, active, cancelled, completed)
Tabel 4.13 Tabel Identifikasi Atribut dan Domain Atribut Entity Client Client
Attribute Description
Data type and
Length NULLS
Multi valued
ClientID
Kode dari klien yang berhubungan dengan perusahaan Char (6) must be [CL][0001-9999] NO NO ClientName
Nama dari klien yang berhubungan dengan perusahaan
Varchar (30) NO NO
ClientPhone
Telepon dari klien yang dapat dihubungi
Varchar (15) NO YES
ClientFax
Fax dari klien yang dapat dihubungi
Varchar (15) NO YES
masih aktif
ClientAddress
Alamat / lokasi tempat klien berada
Varchar (100) NO NO
Tabel 4.14 Tabel Identifikasi Atribut dan Domain Atribut Entity Stage Stage
Attribute Description
Data type and
Length NULLS
Multi valued
StageID
Kode stage dari proyek yang ditangani perusahaan Char (4) must be [SG] [01-99] NO NO StageDescription
Nama stage dari proyek yang ditangani
perusahaan
Varchar (30) NO NO
Tabel 4.15 Tabel Identifikasi Atribut dan Domain Atribut Entity News News
Attribute Description
Data type and
Length NULLS
Multi valued
NewsID
Kode berita yang ingin ditampilkan oleh perusahaan Char (9) must be [N][current year][/][current NO NO
month][/][01-99] (N08/01/01)
Title
Kode berita yang ingin ditampilkan oleh perusahaan
Varchar (30) NO NO
News
Isi dari berita yang ingin ditampilkan oleh
perusahaan
Varchar (300) NO NO
InsertedDate
Tanggal ditampilkannya berita di dalam website perusahaan
Date NO NO
DueDate
Tanggal batas akhir ditampilkannya berita
Date NO NO
Tabel 4.16 Tabel Identifikasi Atribut dan Domain Atribut Entity Holiday Holiday
Attribute Description
Data type and
Length NULLS
Multi valued
HolidayID
Kode unik yang berkaitan dengan hari libur perusahaan
Char (7) NO NO
HolidayDate
Tanggal libur pegawai yang ditetapkan
perusahaan dalam setahun
Event
Peristiwa yang berkaitan dengan hari libur
perusahaan
Varchar (30) NO NO
Tabel 4.17 Tabel Identifikasi Atribut dan Domain Atribut Entity AbsenceType AbsenceType
Attribute Description
Data type and
Length NULLS
Multi valued
AbsTypeID Kode yang berkaitan
dengan jenis absensi Char (1) NO NO
AbsTypeDescription
Keterangan mengenai jenis absensi yang dipilih oleh pegawai
Varchar (20) NO NO
ClaimPrice
Besarnya ganti rugi sesuai dengan jenis absennya
Decimal (10,2) YES NO
Tabel 4.18 Tabel Identifikasi Atribut dan Domain Atribut Entity LeaveType LeaveType
Attribute Description Data type and
Length
NULLS
Multi valued
LeaveTypeID Kode yang berkaitan
LeaveTypeDescription
Keterangan mengenai jenis cuti yang dipilih oleh pegawai
Varchar (20) NO NO
4.2.1.5 Identifikasi Kandidat dan Primary Key setiap Entiti Nama Entity Candidate key Primary Key Employee EmployeeID
Username Telephone Email
EmployeeID
Division DivisionID DivisionID
Privilege - -
Absence AbsenceID AbsenceID
LeaveRequest LeaveRequestID LeaveRequestID
Leave LeaveRequestID LeaveRequestID
LeaveEntitle EntitleID EntitleID
AllowClaim ClaimID ClaimID
NonAllowClaim ClaimID ClaimID
Project ProjectID ProjectID
ProjectStatus StatusID StatusID
Client ClientID ClientID
Stage StageID StageID
News NewsID NewsID
Holiday HolidayID HolidayID
AbsenceType AbsTypeID AbsTypeID
Employee EmployeeID Privilege Absence AbsenceID Le aveE ntitle Enti tleID LeaveReq uest Le aveReque stID Division Di visionID P roject Pro jectID AllowCl aim ClaimID NonAllowClaim ClaimID Stage StageID Cli ent Clien tID 1.. 1 1 ..1 1 ..1 1..1 1..* 1..* 0.. * 1..1 1..* 1 ..1 1.. * 0..* 1..* 1..1 1..* Holiday HolidayID News NewsID 1..1 1..* 1.. 1 0..* 1..1 0 ..* memiliki m em ohon m engi jink an Lmemp unyai memp unyai me mi lik i mem berikan menangani 1. .* 1..1 1..* m eng at ur Lmem pengaruh i 0..1 1..1 1. .1 0 ..* 0..* 0. .* mem publikasikan m engi s i me m e ri k sa dipe ngaruhi AMengajukan m engha s ilk an 0..1 1..1 0..* Lea veType LeaveType ID AbsenceType AbsenceTypeID 1..1 1 ..* 1. .* 1..1 P rojectSt at us S tat usID Pdimiliki 1..1 1. .* Ldi m ili ki di m ili ki S tD ipi lih dal am Dipilih dalam 1.. 1 0 ..* AMenyetujui 1..1 1.. 1 0..* 0..* N M eny et uj ui N M engaj uk an
Gambar 4.5 Conceptual Data Model Entity Relationship Diagram (ERD) with Primary Key
Emplo yee Employ eeID Priv ilege
Abs enc e Abs enc eID
LeaveEntitl e EntitleID
Leav eReq uest Leav eReques tID Div is ion
Div isio nID Projec t
Projec tID Allow Claim N onAllowC laim
Sta ge StageID C lient C lientID 1..1 1..1 1..1 1..1 1. .* 1..* 0..* 1..1 1..* 1..1 1..* 0..* 1..* 1..1 1..* H oliday H olidayID N ews N ews ID 1..1 1..* 0..* 1..1 0..* m em iliki me mo h on m en g ijin ka n Lm em puny ai m em punyai me mi lik i m em berik an m enangani 1..* 1..1 1..* m engatur Lm em pengaruhi 0..1 1..1 0..* 0..* 0..* m em pu b lika si ka n me ng is i me me ri ks a dipengaruhi M eng aj uk an m e ngh as ilk a n 0..1 1..1 0..* Leav eT ype Leav eTy peID Abs enc eTy pe Abs enceT y peID
1..1 1..* 1..* 1..1 P r oje ctS ta tus St atu sID P dim ilik i 1..1 1..* L di m ilik i di m ili ki S tD ipi lih da la m Dipilih dalam C laimR eques t Claim ID 1..1 0..* M en yet uj ui M anager 1..1 1..1
4.2.1.6 Pengunaan Enhanced Modeling Concept
Tahap ini bertujuan untuk mempertimbangkan penggunaan Enhanced Modeling Concept, dimana didalamnya termasuk spesialisasi / generalisasi, agregasi, dan komposisi
4.2.1.7 Validasi Model Konseptual Lokal Terhadap Transaksi Pengguna
Tahapan ini bertujuan untuk memastikan bahwa model konseptual lokal yang dibuat mendukung transaksi-transaksi yang dibutuhkan oleh pengguna. Pendekatan yang dipakai adalah menggunakan jalur arah transaksi (pathways) yang digambarkan dalam diagram ER untuk memeriksa terpenuhinya setiap transaksi. Adapun transaksi tersebut adalah sebagai berikut.
A. M enampilkan data absensi pegawai
B. M enampilkan data-data perkembangan proyek yang ditangani pegawai C. M enampilkan data-data pegawai
D. M enampilkan berita-berita yang dipublikasikan oleh pegawai E. M enampilkan tanggal status cuti pegawai
F. M enampilkan data-data claim pegawai
G. M enampilkan history cuti dan balance cuti pegawai
Dari transaksi-transaksi tersebut, maka dengan menggunakan gambar 4.5. (Diagram ER yang menggambarkan relasi antar entiti dengan penambahan primary key) akan dapat ditentukan pathways dari transaksi-transaksi yang ada. Sehingga model konseptual untuk mendukung transaksi pemakai dengan menggunakan pathways dapat dilihat pada gambar sebagai berikut :
Gambar 4.7 Model Konseptual yang Mendukung Transaksi User dengan Menggunakan Pathways
4.2.2 Perancangan Basis Data Logikal
Pada tahapan ini, model data konseptual yang telah dibuat akan dipetakan ke dalam model data logikal. Keseluruhan proses dari pengembangan pada tahap ini adalah penggunaan teknik normalisasi untuk menguji kebenaran model data logikal. Kemudian dari model data logikal lokal akan dikombinasikan menjadi model data logikal global tunggal. Adapun langkah-langkah dalam tahapan ini adalah sebagai berikut :
4.2.2.1 Menghilangkan Fitur yang Tidak Kompatibel
Tujuan pada langkah ini adalah untuk memperbaiki model data konseptual lokal dengan menghilangkan fitur yang tidak kompatibel dengan model relasional. Cara yang akan digunakan dalam langkah ini adalah dengan menghilangkan hubungan many-to-many (*:*) binary relationship types. Hasilnya dapat dilihat pada gambar diagram ER sebagai berikut :
1. M enghilangkan (*:*) many to many binary relationship
M enangani EmployeeID ProjectID Employee EmployeeID Project ProjectID 1..* 1..*
0..* 1..1 Holiday HolidayID Dimasukkan dalam Dipengaruhi 1..1 0..* 0..* LeaveRequest LeaveRequestID LeaveRequest LeaveRequestID LeaveRequestID HolidayID Holiday HolidayID LeaveHoliday LeaveRequestID HolidayID 0..* Dipengaruhi
(c)LeaveRequest dipengaruhi Holiday *:* relationship
(d) Dekomposisi relasi (c) kedalam 2 relasi (dipengaruhi dan dimasukkan dalam)
Ditangani 1..* 1..1 1..1 0..* ProjectMember EmployeeID ProjectID Employee EmployeeID Project ProjectID T erlibat dalam
1..1 Digunakan dalam 1..* 0..* 0..* Project ProjectID 1..1 1..* Stage StageID Project ProjectID ProjectID StageID Stage StageID ActivityPlan ProjectID StageID Sequence StartDate EndDate M engandung Memiliki
(e) Project mengandung Stage *:* relationship
2. M enghilangkan atribut multivalue Employee LeaveRequest Employee EmployeeID Phone [0…*] PersonalEm ail[0…*]
(a) Entiti Employee dengan atribut Phone dan PersonalEm ail yang multivalue
1..1 Employee EmployeeID EmpPhone EmpPhoneNum 0..* EPMempunyai 1..1 Employee EmployeeID PersonalEm ail EmpPersEmail 0..* EEMempunyai LeaveRequest LeaveRequestID LeaveDate[1…*]
(b) Entiti LeaveRequest dengan atribut LeaveDate yang m ultivalue
1..* 1..1 LeaveRequest LeaveRequestID Leave LeaveDate Dimiliki
Client 1..1 Client ClientID ClientFax ClientFaxNum 0..* CFMempunyai 0..* 1..1 0..* Client ClientID ClientPhone ClientPhoneNum CPMempunyai 1..1 Client ClientID ClientEmail ClientEmailAddr CMempunyai Client ClientID ClientPhone [0…*] ClientEmail[0…*] ClientFax[0…*]
EmployeeID di-post ke dalam Absence sebagai foreign key
4.2.2.2 Mendapatkan Relasi untuk Model Data Logikal Lokal 1. One to Many (1:*) binary relationship types
Untuk tiap-tiap relasi binary one-to-many (1:*), entity pertama dari relasi tersebut menjadi parent entity, dan entity berikutnya menjadi child entity.
Hubungan Employee mengisi Absence
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
Absence(AbsenceID, EmployeeID, AbsDate , AbsenceNotes, AbsenceStatus, AbsClaimStatus, AbsenceReason,
BackDate,AbsActualDate) Primary key AbsenceID , Foreign key EmployeeID
EmployeeID di-post ke dalam LeaveRequest
sebagai foreign key
EmployeeID di-post ke dalam Project
sebagai foreign key
Hubungan Manager mengatur Project
Manager(EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Project(ProjectID, EmployeeID, ProjectName, IsFinished,
CompletedDate)
Primary key ProjectID Foreign key EmployeeID
Primary key EmployeeID
Hubungan Employee memohon LeaveRequest
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
LeaveRequest(LeaveRequestID, EmployeeID, LStartDate, LEndDate, Duration, LeaveNotes, LRequestDate, LeaveDate, LRequestStatus,
LeaveReason, DecisionDate) Primary key LeaveRequestID Foreign key EmployeeID
EmployeeID di-post ke dalam LeaveRequest
sebagai foreign key
EmployeeID di-post ke dalam ClaimRequest
sebagai foreign key
Hubungan Employee LM empunyai LeaveEntitle
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
LeaveEntitle (EmployeeID, EntitleID, LeaveRequestID , Duration, YearEntitle, EntitleStatus, EntitleActualDate)
Primary key EntitleID, Foreign key EmployeeID, LeaveRequestID
Hubungan Employee mengajukan ClaimRequest
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
ClaimRequest (ClaimID, EmployeeID, ClaimType, CRequestDate,
CRequestStatus, ClaimReason) Primary key ClaimID
EmployeeID di-post ke dalam News sebagai
foreign key
DivisionID di-post ke dalam Em ployee
sebagai foreign key
Hubungan Manager mempublikasikan News
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
News (NewsID, EmployeeID, Title, News, InsertedDate, DueDate) Primary key NewsID
Foreign key EmployeeID
Primary key EmployeeID
Hubungan Employee mempunyai Division
Division(DivisionID, DivisionName) Primary key DivisionID
Employee (EmployeeID, DivisionID , Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID Foreign key DivisionID
ClientID di-post ke dalam Project sebagai
foreign key
LeaveRequestID di-post ke dalam
LeaveRequest sebagai foreign key
Hubungan Client memberikan Project
Client (ClientID, ClientName, ClientPhone, ClientFax, ClientEmail, ClientAddress)
Primary key ClientID
Project(ProjectID, ClientID , ProjectName, IsFinished, CompletedDate)
Primary key ProjectID
Foreign key ClientID
Hubungan LeaveEntitle Lmempengaruhi LeaveRequest
LeaveRequest(LeaveRequestID, EmployeeID, LStartDate, LEndDate, Duration, LeaveNotes, LRequestDate, LeaveDate, LRequestStatus,
LeaveReason, DecisionDate) Primary key LeaveRequestID Foreign key EmployeeID
LeaveEntitle (LeaveRequestID , EmployeeID, EntitleID, Duration, YearEntitle, EntitleStatus,
EntitleActualDate) Primary key EntitleID, Foreign key EmployeeID, LeaveRequestID
ProjectID di-post ke dalam Absence sebagai foreign key
StageID di-post ke dalam Absence sebagai foreign key
Hubungan Project dipilih dalam Absence
Project(ProjectID, EmployeeID, ProjectName, IsFinished,
CompletedDate)
Primary key ProjectID Foreign key EmployeeID
Absence(AbsenceID, ProjectID, EmployeeID, AbsDate , AbsenceNotes, AbsenceStatus, AbsClaimStatus, AbsenceReason,
BackDate,AbsActualDate) Primary key AbsenceID
Foreign key EmployeeID, ProjectID
Hubungan Stage Sdipilih dalam Absence
Stage(StageID, StageDescription) Primary key StageID
Absence(AbsenceID, StageID, ProjectID, EmployeeID, AbsDate , AbsenceNotes, AbsenceStatus, AbsClaimStatus,
AbsenceReason,
BackDate,AbsActualDate) Primary key AbsenceID
Foreign key EmployeeID, ProjectID, StageID
AbsT ypeID di-post ke dalam Absence sebagai foreign key
LeaveTypeID di-post ke dalam
LeaveRequest sebagai foreign key
Hubungan AbsenceType dimiliki Absence
AbsenceType(AbsTypeID,
AbsTypeDescription, ClaimPrice) Primary key AbsTypeID
Absence(AbsenceID, AbsTypeID, StageID, ProjectID, EmployeeID, AbsDate , AbsenceNotes, AbsenceStatus, AbsClaimStatus,
AbsenceReason,
BackDate,AbsActualDate) Primary key AbsenceID
Foreign key EmployeeID, ProjectID, StageID
Hubungan LeaveType Ldimiliki LeaveRequest
LeaveType(LeaveTypeID, LeaveTypeDescription) Primary key LeaveTypeID
LeaveRequest(LeaveTypeID , LeaveRequestID, EmployeeID, LStartDate, LEndDate, Duration, LeaveNotes, LRequestDate, LeaveDate, LRequestStatus, LeaveReason,
DecisionDate)
Primary key LeaveRequestID
Hubungan Employee terlibat dalam ProjectMember
Hubungan Project ditangani ProjectMember
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
Project(ProjectID, ProjectName, IsFinished, CompletedDate) Primary key ProjectID
ProjectMember (EmployeeID, ProjectID)
Foreign key EmployeeID references Employee(EmployeeID) Foreign key ProjectID references Project(ProjectID)
Hubungan LeaveRequest dipengaruhi LeaveHoliday
Hubungan Holiday dimasukkan dalam LeaveHoliday
LeaveRequest(LeaveRequestID, LStartDate, LEndDate, Duration, LeaveNotes, LRequestDate, LeaveDate, LRequestStatus, LeaveReason,
DecisionDate)
Primary key LeaveRequestID
Holiday (HolidayID, HolidayDate, Event)
Primary key HolidayID
LeaveHoliday (LeaveRequestID, HolidayID)
Foreign key LeaveRequestID references LeaveRequest(LeaveRequestID) Foreign key HolidayID references Holiday(HolidayID)
EmployeeID di-post ke dalam EmpPhone sebagai foreign key
Hubungan Project Pmemiliki ActivityPlan
Hubungan Stage digunakan dalam ActivityPlan
Project(ProjectID, ProjectName, IsFinished, CompletedDate) Primary key ProjectID
Stage(StageID, StageDescription) Primary key StageID
ActivityPlan (ProjectID, StageID, Sequence, StartDate, EndDate) Foreign key ProjectID references Project(ProjectID)
Foreign key StageID references Stage (StageID)
Hubungan Employee EPmemiliki EmpPhone
Employee (EmployeeID, Username, Password , Name, Gender, Title,
Address, OfficialEmail, PersonalEmail, BirthDate, Color, StartofService,
EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
EmpPhone (EmployeeID , EmpPhoneNum,)
Primary key EmpPhoneNum Foreign key EmployeeID
EmployeeID di-post ke dalam EmpPhone sebagai foreign key
LeaveRequestID di-post ke dalam Leave
sebagai foreign key
Hubungan Employee EEmemiliki PersonalEmail
Employee (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
PersonalEmail (EmployeeID, EmpPersEmail)
Primary key EmpPersEmail Foreign key EmployeeID
Hubungan Leave dimiliki LeaveRequest
LeaveRequest(LeaveRequestID, LStartDate, LEndDate, Duration, LeaveNotes, LRequestDate, LRequestStatus, LeaveReason, DecisionDate)
Primary key LeaveRequestID
Leave (LeaveDate, LeaveRequestID) Primary key LeaveRequestID, LeaveDate
ClientID di-post ke dalam ClientPhone sebagai foreign key
ClientID di-post ke dalam ClientEmail sebagai foreign key
ClientID di-post ke dalam ClientFax sebagai foreign key
Hubungan Client CPmemiliki ClientPhone
Client (ClientID, ClientName,
ClientFax, ClientEmail, ClientAddress) Primary key ClientID
ClientPhone (ClientID, ClientPhoneNum)
Primary key ClientPhoneNum Foreign key ClientID
Hubungan Client Cmemiliki ClientEmail
Client (ClientID, ClientName,
ClientPhone, ClientFax, ClientAddress) Primary key ClientID
ClientEmail (ClientID, ClientEmailAddr)
Primary key ClientEmailAddr Foreign key ClientID
Hubungan Client CFmemiliki ClientFax
Client (ClientID, ClientName, ClientPhone, ClientEmail, ClientAddress)
Primary key ClientID
ClientFax (ClientID, ClientFaxNum) Primary key ClientFaxNum
StatusID di-post ke dalam Project sebagai
foreign key
EmployeeID di-post ke dalamPrivilege
sebagai foreign key
Hubungan ProjectStatus Pdimiliki Project
ProjectStatus (StatusID, StatusProjectDescription) Primary key StatusID
Project (ProjectID, StatusID, ProjectName, IsFinished, CompletedDate)
Primary key ProjectID Foreign key StatusID
2. One toOne (1:1) binary relationship types
Mandatory participation di salah satu sisi dari 1:1 relationship
Hubungan Manager memiliki Privilege
Manager (EmployeeID, Username, Password , Name, Gender, Title, Address, Phone, OfficialEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
Privilege (Payer, EmployeeID ,
AppLeave, AppClaim, VerifierAbsence, SuperUser, NewsEditor, HolidayEditor, ProjectManager)
Primary key EmployeeID Foreign key EmployeeID
AbsenceID di-post ke dalam AllowClaim sebagai foreign key
Hubungan Absence menghasilkan AllowClaim
Absence(AbsenceID, AbsDate , AbsenceNotes, AbsenceStatus, AbsClaimStatus,
AbsenceReason,
BackDate,AbsActualDate) Primary key AbsenceID
AllowClaim (AbsenceID , ClaimID,
AllowClaimPrice,
CRequestDate,CRequestStatus, ClaimReason)
Primary key ClaimID Foreign key AbsenceID
3. Superclass / subclass relationship types
• Mandatory participation disjoint constraint
AllowClaim (EmployeeID, AbsenceID, ClaimID, AllowClaimPrice, CRequestDate, CRequestStatus, ClaimReason)
Primary key ClaimID Foreign key AbsenceID
NonAllowClaim (EmployeeID, ClaimID, NACDescription, Price, CRequestDate, CRequestStatus, ClaimReason)
• Hubungan optional Manager dengan Employee
Tabel 4.19 Tabel Hasil Relasi Sebelum Normalisasi
Employee Employee (EmployeeID, DivisionID ,
Username, Password , Name, Gender, Title, Address, OfficialEmail, BirthDate, Color, StartofService, EmpStatus, NPWP, EmpNotes, ResignDate)
Primary key EmployeeID
Foreign key DivisionID references Division (DivisionID)
Manager Manager (EmployeeID, MgrEmployeeID)
Primary key MgrEmployeeID Foreign key EmployeeID references Employee(EmployeeID)
EmpPhone EmpPhone (EmployeeID ,
EmpPhoneNum)
Primary key EmpPhoneNum
Foreign key EmployeeID references Employee (EmployeeID) 1..1 Manager EmployeeID MgrEmployeeID Employee EmployeeID IS-A 1..1
PersonalEmail PersonalEmail (EmployeeID, EmpPersEmail)
Primary key EmpPersEmail
Foreign key EmployeeID references Employee (EmployeeID)
Division Division (DivisionID, DivisionName)
Primary key DivisionID
Privilege Privilege (MgrEmployeeID,
VerifierAbsence, AppLeave, AppClaim, Payer, NewsEditor, HolidayEditor, ProjectManager, SuperUser) Primary key MgrEmployeeID
Foreign key MgrEmployeeID references Manager (MgrEmployeeID)
LeaveRequest LeaveRequest (LeaveRequestID,
LeaveTypeID, EmployeeID,
MgrEmployeeID LStartDate, LEndDate, Duration, LeaveNotes, LRequestDate, LRequestStatus, LeaveReason,
DecisionDate)
Primary key LeaveRequestID
Foreign key EmployeeID references Employee (EmployeeID)
LeaveType (LeaveTypeID)
Foreign key MgrEmployeeID references Manager (MgrEmployeeID)
Leave Leave (LeaveDate, LeaveRequestID) Primary key LeaveRequestID, LeaveDate Foreign key LeaveRequestID references LeaveRequest (LeaveRequestID)
LeaveEntitle LeaveEntitle (LeaveRequestID ,
EmployeeID, EntitleID, Duration, YearEntitle, EntitleStatus,
EntitleActualDate) Primary key EntitleID
Foreign key EmployeeID references Employee (EmployeeID)
Foreign key LeaveRequestID references LeaveRequest (LeaveRequestID)
LeaveHoliday LeaveHoliday (LeaveRequestID, HolidayID)
Foreign key LeaveRequestID references LeaveRequest(LeaveRequestID)
Foreign key HolidayID references Holiday(HolidayID)
LeaveType LeaveType (LeaveTypeID,
Primary key LeaveTypeID
Absence Absence (AbsenceID, AbsTypeID,
StageID, ProjectID, EmployeeID, MgrEmployeeID, AbsDate , AbsenceNotes, AbsenceStatus, AbsClaimStatus,
AbsenceReason,
BackDate,AbsActualDate) Primary key AbsenceID
Foreign key EmployeeID references Employee (EmployeeID)
Foreign key ProjectID references Project (ProjectID)
Foreign key StageID references Stage (StageID)
Foreign key MgrEmployeeID references Manager (MgrEmployeeID)
Foreign key AbsTypeID references AbsenceType (AbsTypeID)
AbsenceType AbsenceType (AbsTypeID,
AbsTypeDescription, ClaimPrice) Primary key AbsTypeID
AllowClaim AllowClaim (AbsenceID, ClaimID,
CRequestDate, CRequestStatus, ClaimReason)
Primary key ClaimID
Foreign key AbsenceID references Absence (AbsenceID)
Foreign key EmployeeID references Employee (EmployeeID)
NonAllowClaim NonAllowClaim (ClaimID, EmployeeID ,
Sequence, NACDescription, Price, CRequestDate, CRequestStatus, ClaimReason)
Primary key ClaimID
Foreign key EmployeeID references Employee (EmployeeID)
Project Project (ProjectID, MgrEmployeeID ,
ClientID , StatusID, ProjectName, IsFinished, CompletedDate) Primary key ProjectID
Foreign key ClientID references Client (ClientID)
Foreign key StatusID references Status (StatusID)
Foreign key MgrEmployeeID references Manager (MgrEmployeeID)
ProjectMember ProjectMember (EmployeeID, ProjectID) Foreign key EmployeeID references Employee(EmployeeID)
Foreign key ProjectID references Project(ProjectID)
ProjectStatus ProjectStatus (StatusID,
StatusProjectDescription) Primary key StatusID
Client Client (ClientID, ClientName,
ClientAddress) Primary key ClientID
ClientPhone ClientPhone (ClientID, ClientPhoneNum) Primary key ClientPhoneNum
Foreign key ClientID references Client(ClientID)
ClientEmail ClientEmail (ClientID, ClientEmailAddr) Primary key ClientEmailAddr
Foreign key ClientID references Client(ClientID)
ClientFax ClientFax (ClientID, ClientFaxNum) Primary key ClientFaxNum
Client(ClientID)
Stage Stage(StageID, StageDescription) Primary key StageID
News News (NewsID, MgrEmployeeID, Title,
News, InsertedDate, DueDate) Primary key NewsID
Foreign key MgrEmployeeID references Manager(MgrEmployeeID)
Holiday Holiday (HolidayID, HolidayDate, Event) Primary key HolidayID
ActivityPlan ActivityPlan (ProjectID, StageID, Sequence, StartDate, EndDate) Foreign key ProjectID references Project(ProjectID)
Foreign key StageID references Stage (StageID)
4.2.2.3 Normalisasi
Tujuan dari normalisasi adalah untuk memvalidasi relasi-relasi dalam model data logikal lokal dengan menggunakan teknik-teknik normalisasi.
Semua relasi telah memenuhi 1NF karena tidak ditemukan field yang mengalami redundansi data.
• Pada entitas Employee
Employee = (@EmployeeID + DivisionID +Username+ Password + Name + Gender + Title + Address + OfficialEmail + BirthDate + Color + StartofService + EmpStatus + NPWP + EmpNotes + ResignDate) 2NF
Di dalam entitas Employee, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas Employee, tidak terdapat ketergantungan transitif.
• Pada entitas Manager
Manager = (@MgrEmployeeID + EmployeeID) 2NF
Di dalam entitas Manager, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
• Pada Entitas EmpPhone
EmpPhone = (@EmpPhoneNum + EmployeeID) 2NF
Di dalam entitas EmpPhone, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas EmpPhone, tidak terdapat ketergantungan transitif.
• Pada Entitas PersonalEmail
PersonalEmail = (@EmpPersEmail + EmployeeID)
2NF
Di dalam entitas PersonalEmail, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas PersonalEmail, tidak terdapat ketergantungan transitif.
• Pada Entitas Division
Division = (@DivisionID + DivisionName)
2NF
Di dalam entitas Division, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Division, tidak terdapat ketergantungan transitif
• Pada Entitas Privilege
Privilege = (@MgrEmployeeID + VerifierAbsence + AppLeave + AppClaim + Payer + NewsEditor + HolidayEditor + ProjectManager + SuperUser)
2NF
Di dalam entitas Privilege, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Privilege, tidak terdapat ketergantungan transitif
• Pada Entitas LeaveRequest
LeaveRequest = (@LeaveRequestID + LeaveTypeID + EmployeeID + MgrEmployeeID + LStartDate + LEndDate + Duration + LeaveNotes + LRequestDate + LRequestStatus + LeaveReason + DecisionDate)
2NF
Di dalam entitas LeaveRequest, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas LeaveRequest, tidak terdapat ketergantungan transitif
• Pada Entitas Leave
2NF
Di dalam entitas Leave, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Leave, tidak terdapat ketergantungan transitif
• Pada Entitas LeaveEntitle
LeaveEntitle = (@LeaveRequestID + EmployeeID + EntitleID + Duration + YearEntitle + EntitleStatus + EntitleActualDate)
2NF
Di dalam entitas LeaveEntitle, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas LeaveEntitle, tidak terdapat ketergantungan transitif
• Pada Entitas LeaveHoliday
LeaveHoliday = (@LeaveRequestID + HolidayID)
2NF
Di dalam entitas LeaveHoliday, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
• Pada Entitas LeaveType
LeaveType = (@LeaveTypeID, LeaveTypeDescription)
2NF
Di dalam entitas LeaveType, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas LeaveType, tidak terdapat ketergantungan transitif
• Pada Entitas Absence
Absence = (@AbsenceID + AbsTypeID + StageID + ProjectID + EmployeeID + MgrEmployeeID + AbsDate + AbsenceNotes + AbsenceStatus + AbsClaimStatus + AbsenceReason + BackDate + AbsActualDate)
2NF
Di dalam entitas Absence, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Absence, tidak terdapat ketergantungan transitif
• Pada Entitas AbsenceType
AbsenceType = (@AbsTypeID + AbsTypeDescription + ClaimPrice) 2NF
Di dalam entitas AbsenceType, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas AbsenceType, tidak terdapat ketergantungan transitif
• Pada Entitas AllowClaim UNF
AllowClaim= (EmployeeID + MgrEmployeeID + ClaimID+{ AllowClaimPrice+
AbsenceID}+ CRequestDate+CRequestStatus+ ClaimReason) 1NF
AllowClaim= @EmployeeID + MgrEmployeeID + @ClaimID+AllowClaimPrice+ @AbsenceID+
CRequestDate+CRequestStatus+ ClaimReason 2NF
AllowClaimDetail =@ClaimID+AllowClaimPrice+ @AbsenceID AllowClaimHeader=@EmployeeID + MgrEmployeeID + @ClaimID+
CRequestDate+CRequestStatus+ ClaimReason 3NF
AllowClaimDetail =@ClaimID+AllowClaimPrice+ @AbsenceID
Employee=@EmployeeID Manager = @MgrEmployeeID
AllowClaimHeader= EmployeeID + MgrEmployeeID + @ClaimID+CRequestDate+ CRequestStatus+ ClaimReason Absence=@AbsenceID
• Pada Entitas NonAllowClaim UNF
NonAllowClaim = (EmployeeID + MgrEmployeeID + ClaimID + Sequence + {NACDescription + Price}+ CRequestDate + CRequestStatus + ClaimReason)
1NF
NonAllowClaim= @EmployeeID+ MgrEmployeeID + @ClaimID + @Sequence + NACDescription+ Price+ CRequestDate+ CRequestStatus+ ClaimReason
2NF
NonAllowClaimDetail = @ClaimID + NACDescription+ @Sequence+ Price
NonAllowClaimHeader= @EmployeeID + MgrEmployeeID + @ClaimID +
CRequestDate + CRequestStatus + ClaimReason 3NF
NonAllowClaimDetail = @ClaimID + NACDescription + @Sequence + Price Employee=@EmployeeID
Manager = @MgrEmployeeID
NonAllowClaimHeader==EmployeeID + MgrEmployeeID + @ClaimID +
CRequestDate + CRequestStatus + ClaimReason
• Pada Entitas Project
Project = (@ProjectID + MgrEmployeeID + ClientID + ProjectName + IsFinished + CompletedDate)
2NF
Di dalam entitas Project , semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Project, tidak terdapat ketergantungan transitif
• Pada Entitas ProjectMember
ProjectMember = (@EmployeeID + ProjectID)
2NF
Di dalam entitas ProjectMember, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas ProjectMember, tidak terdapat ketergantungan transitif
• Pada Entitas ProjectStatu s
ProjectStatus = (@StatusID + StatusProjectDescription)
2NF
Di dalam entitas ProjectStatus, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas ProjectStatus, tidak terdapat ketergantungan transitif
Client = (@ClientID + ClientName + ClientAddress)
2NF
Di dalam entitas Client, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Client, tidak terdapat ketergantungan transitif
• Pada Entitas Stage
Stage = (@StageID + StageDescription)
2NF
Di dalam entitas Stage, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Stage, tidak terdapat ketergantungan transitif
• Pada Entitas News
News = (@NewsID + EmployeeID + MgrEmployeeID + Title + News + InsertedDate + DueDate)
2NF
Di dalam entitas News, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
Di dalam entitas News, tidak terdapat ketergantungan transitif
• Pada Entitas Holiday
Holiday = (@HolidayID + HolidayDate + Event)
2NF
Di dalam entitas Holiday, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak diperlukan normalisasi 2NF.
3NF
Di dalam entitas Holiday, tidak terdapat ketergantungan transitif
• Pada Entitas ActivityPlan
ActivityPlan = (@ProjectID + StageID + Sequence + StartDate + EndDate)
2NF
Di dalam entitas ActivityPlan, semua atribut yang ada pada entitas tersebut sudah full-functional dependency sehingga tidak
diperlukan normalisasi 2NF. 3NF
Di dalam entitas ActivityPlan, tidak terdapat ketergantungan transitif
4.2.2.4 Mendefinisikan Integrity Constraint • Kebutuhan data
Beberapa atribut tertentu dari entitas ataupun relasi haruslah memiliki nilai yang valid, dengan kata lain atribut-atribut ini tidak diperkenankan memiliki nilai null.
Aturan-aturan seperti ini telah diidentifikasikan pada saat atribut didokumentasikan di kamus data.
• Kendala Atribut domain
Setiap atribut memiliki sebuah domain, yaitu kumpulan dari nilai yang legal. Aturan-aturan seperti ini harus telah diidentifikasikan pada saat memilih atribut-atribut domain untuk data model.
• Entity Integrity
Primary key dari suatu entitas tidak boleh memiliki nilai null. Aturan-aturan seperti ini harus telah dipertimbangkan pada saat mengidentifikasikan primary key untuk setiap entitas.
• Referential Integrity
Employee (EmployeeID, DivisionID, Username, Password , Name , Gender , Title , Address , OfficialEmail , BirthDate , Color , StartofService , EmpStatus , NPWP , EmpNotes , ResignDate)
Primary key EmployeeID
Foreign key DivisionID references Division (DivisionID) ON UPDATE CASCADE ON DELETE NO ACTION
Manager (EmployeeID, MgrEmployeeID)
Primary key MgrEmployeeID
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
EmpPhone (EmployeeID, EmpPhoneNum) Primary key EmpPhoneNum
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
PersonalEmail (EmployeeID, EmpPersEmail) Primary key EmpPersEmail
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
Division (DivisionID, DivisionName) Primary key DivisionID
Privilege (MgrEmployeeID , VerifierAbsence , AppLeave , AppClaim , Payer , NewsEditor , HolidayEditor , ProjectManager , SuperUser)
Primary key EmployeeID
Foreign key MgrEmployeeID references Manager (MgrEmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
LeaveRequest (LeaveRequestID , LeaveTypeID , EmployeeID , MgrEmployeeID , LStartDate , LEndDate , Duration , LeaveNotes , LRequestDate , LRequestStatus , LeaveReason , DecisionDate)
Primary key LeaveRequestID
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
Foreign key LeaveTypeID references LeaveType (LeaveTypeID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key MgrEmployeeID references Manager (MgrEmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
Leave (LeaveRequestID , LeaveDate) Primary key LeaveRequestID, LeaveDate
Foreign key LeaveRequestID references LeaveRequest (LeaveRequestID) ON UPDATE CASCADE ON DELETE CASCADE
LeaveEntitle (LeaveRequestID , EmployeeID , EntitleID , Duration , YearEntitle , EntitleStatus , EntitleActualDate)
Primary key EntitleID
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
Foreign key LeaveRequestID references LeaveRequest (LeaveRequestID) ON UPDATE CASCADE ON DELETE CASCADE
LeaveHoliday (LeaveRequestID , HolidayID)
Foreign key LeaveRequestID references LeaveRequest(LeaveRequestID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key HolidayID references Holiday(HolidayID) ON UPDATE CASCADE ON DELETE NO ACTION
LeaveType (LeaveTypeID, LeaveTypeDescription) Primary key LeaveTypeID
Absence (AbsenceID , AbsTypeID , StageID , ProjectID , EmployeeID , MgrEmployeeID , AbsDate , AbsenceNotes , AbsenceStatus , AbsClaimStatus , AbsenceReason , BackDate , AbsActualDate)
Primary key AbsenceID
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
Foreign key ProjectID references Project (ProjectID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key StageID references Stage (StageID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key MgrEmployeeID references Manager (MgrEmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key AbsTypeID references AbsenceType (AbsTypeID) ON UPDATE CASCADE ON DELETE NO ACTION
AbsenceType (AbsTypeID , AbsTypeDescription , ClaimPrice) Primary key AbsTypeID
AllowClaimDetail (ClaimID,AllowClaimPrice, AbsenceID) Primary key ClaimID
Foreign key AbsenceID references Absence (AbsenceID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key ClaimID references AllowClaimHeader (ClaimID) ON UPDATE CASCADE ON DELETE CASCADE
AllowClaimHeader (EmployeeID, MgrEmployeeID , ClaimID,CRequestDate, CRequestStatus, ClaimReason)
Primary key ClaimID
Foreign key MgrEmployeeID references Manager (MgrEmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
NonAllowClaimDetail (ClaimID , NACDescription, Sequence, Price)
Primary key ClaimID, Sequence
Foreign key ClaimID references AllowClaimHeader (ClaimID) ON UPDATE CASCADE ON DELETE CASCADE
NonAllowClaimHeader (EmployeeID, MgrEmployeeID , ClaimID,
CRequestDate,CRequestStatus, ClaimReason)
Primary key ClaimID
Foreign key EmployeeID references Employee (EmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key MgrEmployeeID references Manager (MgrEmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
Project (ProjectID , ClientID , MgrEmployeeID, ProjectName , IsFinished , CompletedDate)
Primary key ProjectID
Foreign key ClientID references Client (ClientID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key StatusID references Status (StatusID) ON UPDATE CASCADE ON DELETE NO ACTION
Foreign key MgrEmployeeID references Manager (MgrEmployeeID) ON UPDATE CASCADE ON DELETE NO ACTION
ProjectMember (EmployeeID , ProjectID)
Foreign key EmployeeID references Employee(EmployeeID) ON UPDATE CASCADE ON DELETE CASCADE
Foreign key ProjectID references Project(ProjectID) ON UPDATE CASCADE ON DELETE CASCADE
ProjectStatus (StatusID , StatusProjectDescription) Primary key StatusID
Client (ClientID , ClientName, ClientAddress ) Primary key ClientID
ClientPhone (ClientID, ClientPhoneNum)