246 Lampiran 1 – Implementasi Struktur Tabel CREATE DATABASE Cantata GO USE Cantata GO EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC EXEC
sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype
KodeMurid, ‘CHAR(6)’ KodeGuru, ‘CHAR(11)’ KodeKaryawan, ‘CHAR(3)’ KodeRuang, ‘CHAR(2)’ KodeJurusan, ‘CHAR(2)’ KodeGrade, ‘CHAR(2)’ KodeLevel, ‘CHAR(3)’ KodeKelas, ‘CHAR(13)’ KodeUjian, ‘CHAR(6)’ KodeJadwal, int NoBayarUjian, ‘CHAR(6)’ NoBayarPembayaranBulanan, ‘CHAR(7)’ KodeCabang, ‘CHAR(2)’ KodeJabatan, ‘CHAR(2)’ Nama, ‘VARCHAR(30)’ TempatLahir, ‘VARCHAR(30)’ Alamat, ‘VARCHAR(70)’ Kota, ‘VARCHAR(15)’ KodePos, ‘CHAR(5)’ JenisKelamin, ‘CHAR(1)’ Kewarganegaraan, ‘CHAR(3)’ Agama, ‘CHAR(1)’ PekerjaanMurid, ‘CHAR(1)’ TeleponHandphone, ‘VARCHAR(15)’ YaTidak, ‘CHAR(1)’ StatusSiswa, ‘CHAR(1)’ Email, ‘VARCHAR(30)’ StatusNikah, ‘CHAR(1)’ Tahun, smallint Bulan, tinyint Pertemuan, tinyint Instrumen, ‘VARCHAR(15)’ Grade, ‘VARCHAR(5)’ LamaTahun, tinyint TempatBelajar, ‘VARCHAR(20)’ Waktu, ‘CHAR(4)’ Nilai, tinyint Hari, ‘CHAR(1)’ StatusAbsensi, ‘CHAR(1)’ Tanggal, datetime NamaRuang, ‘VARCHAR(15)’ NamaJurusan, ‘VARCHAR(10)’ NamaCabang, ‘VARCHAR(20)’ NamaJabatan, ‘VARCHAR(35)’ Merk, ‘VARCHAR(15)’ Seri, ‘VARCHAR(5)’ Relasi, ‘VARCHAR(10)’ Pekerjaan, ‘VARCHAR(25)’
247 EXEC EXEC EXEC EXEC EXEC
sp_addtype sp_addtype sp_addtype sp_addtype sp_addtype
PendidikanFormal, ‘VARCHAR(15)’ NamaSekolah, ‘VARCHAR(25)’ KotaSekolah, ‘VARCHAR(20)’ NegaraSekolah, ‘VARCHAR(20)’ NamaPenghargaan, ‘VARCHAR(30)’
CREATE RULE KodeMurid_Rule AS ((LEFT (@kode, 2) BETWEEN ‘00’ AND ‘99’) AND (RIGHT (@kode, 4) BETWEEN ‘0001’ AND ‘9999’)) CREATE RULE KodeGuru_Rule AS ((LEFT (@kode, 5) BETWEEN ‘00001’ AND ‘99999’) AND (SUBSTRING (@kode, 8, 2) BETWEEN ‘01’ AND ‘12’) AND (RIGHT (@kode, 2) BETWEEN ‘00’ AND ‘99’)) CREATE RULE KodeKaryawan_Rule AS (@kode BETWEEN ‘000’ AND ‘999’) CREATE RULE KodeRuang_Rule AS (@kode LIKE ‘[A-Z][0-9]’) CREATE RULE KodeJurusan_Rule AS (@kode LIKE ‘[A-Z][A-Z]’) CREATE RULE KodeGrade_Rule AS (@kode LIKE ‘[A-Z][0-9]’) CREATE RULE KodeLevel_Rule AS (@kode BETWEEN ‘001’ AND ‘999’)
CREATE RULE KodeKelas_Rule AS (LEFT(@kode,5) BETWEEN ‘00001’ AND ‘99999’) AND (SUBSTRING(@kode,10,2) BETWEEN ‘01’ AND ‘12’) AND (RIGHT(@kode,2) BETWEEN ‘00’ AND ‘99’)
CREATE RULE KodeUjian_Rule AS (LEFT(@kode,2) BETWEEN ‘00’ AND ‘99’) AND (RIGHT(@kode,4) BETWEEN ‘0001’ AND ‘9999’)
CREATE RULE NoBayarUjian_Rule AS (LEFT(@kode,2) BETWEEN ‘00’ AND ‘99’) AND (RIGHT(@kode,4) BETWEEN ‘0001’ AND ‘9999’)
248 CREATE RULE NoBayarPembayaranBulanan_Rule AS (LEFT(@kode,2) BETWEEN ‘00’ AND ‘99’) AND (RIGHT(@kode,5) BETWEEN ‘00001’ AND ‘99999’) CREATE RULE KodeCabang_Rule AS (@kode LIKE ‘[A-Z][A-Z]’) CREATE RULE KodePos_Rule AS (@value LIKE ‘[0-9][0-9][0-9][0-9][0-9]’) CREATE RULE JenisKelamin_Rule AS (@value IN (‘P’,’W’)) CREATE RULE Kewarganegaraan_Rule AS (@value IN (‘WNI’,’WNA’)) CREATE RULE Agama_Rule AS (@value IN (‘I’,’K’,’X’,’B’,’H’,’L’)) CREATE RULE PekerjaanMurid_Rule AS (@value IN (‘A’,’B’,’C’,’D’)) CREATE RULE YaTidak_Rule AS (@value IN (‘Y’,’T’)) CREATE RULE StatusSiswa_Rule AS (@value IN (‘B’,’C’,’H’,’A’)) CREATE RULE StatusNikah_Rule AS (@value IN (‘B’,’M’,’C’,’D’)) CREATE RULE Waktu_Rule AS ((LEFT(@value,2) BETWEEN ‘00’ AND ‘23’) AND (RIGHT(@value,2) BETWEEN ‘00’ AND ‘59’)) CREATE RULE Nilai_Rule AS (@value >= 0 AND @value <= 100) CREATE RULE Hari_Rule AS (@value LIKE ‘[1-7]’)
249 CREATE RULE StatusAbsensi_Rule AS (@value IN (‘M’,’T’))
EXEC SP_BINDRULE ‘KodeMurid_Rule’, ‘KodeMurid’ EXEC SP_BINDRULE ‘KodeGuru_Rule’, ‘KodeGuru’ EXEC SP_BINDRULE ‘KodeKaryawan_Rule’, ‘KodeKaryawan’ EXEC SP_BINDRULE ‘KodeRuang_Rule’, ‘KodeRuang’ EXEC SP_BINDRULE ‘KodeJurusan_Rule’, ‘KodeJurusan’ EXEC SP_BINDRULE ‘KodeGrade_Rule’, ‘KodeGrade’ EXEC SP_BINDRULE ‘KodeLevel_Rule’, ‘KodeLevel’ EXEC SP_BINDRULE ‘KodeKelas_Rule’, ‘KodeKelas’ EXEC SP_BINDRULE ‘KodeUjian_Rule’, ‘KodeUjian’ EXEC SP_BINDRULE ‘NoBayarUjian_Rule’, ‘NoBayarUjian’ EXEC SP_BINDRULE ‘NoBayarPembayaranBulanan_Rule’, ‘NoBayarPembayaranBulanan’ EXEC SP_BINDRULE ‘KodeCabang_Rule’, ‘KodeCabang’ EXEC SP_BINDRULE ‘KodePos_Rule’, ‘KodePos’ EXEC SP_BINDRULE ‘JenisKelamin_Rule’, ‘JenisKelamin’ EXEC SP_BINDRULE ‘Kewarganegaraan_Rule’, ‘Kewarganegaraan’ EXEC SP_BINDRULE ‘Agama_Rule’, ‘Agama’ EXEC SP_BINDRULE ‘PekerjaanMurid_Rule’, ‘PekerjaanMurid’ EXEC SP_BINDRULE ‘YaTidak_Rule’, ‘YaTidak’ EXEC SP_BINDRULE ‘StatusSiswa_Rule’, ‘StatusSiswa’ EXEC SP_BINDRULE ‘StatusNikah_Rule’, ‘StatusNikah’ EXEC SP_BINDRULE ‘Waktu_Rule’, ‘Waktu’ EXEC SP_BINDRULE ‘Nilai_Rule’, ‘Nilai’ EXEC SP_BINDRULE ‘Hari_Rule’, ‘Hari’ EXEC SP_BINDRULE ‘StatusAbsensi_Rule’, ‘StatusAbsensi’
250 CREATE TABLE Cabang ( kodeCabang KodeCabang NOT NULL, namaCabang NamaCabang NOT NULL, Primary Key (kodeCabang) ) CREATE TABLE Jabatan ( kodeJabatan KodeJabatan NOT NULL, namaJabatan NamaJabatan NOT NULL, Primary Key (kodeJabatan) ) CREATE TABLE Jurusan ( kodeJurusan kodeJurusan NOT NULL, namaJurusan namaJurusan NOT NULL, Primary Key (kodeJurusan) ) CREATE TABLE Grade ( kodeGrade KodeGrade NOT NULL, namaGrade Grade NOT NULL, Primary Key (kodeGrade) ) CREATE TABLE Level ( kodeLevel KodeLevel NOT NULL, kodeJurusan KodeJurusan NOT NULL, kodeGrade KodeGrade NOT NULL, harga Money NOT NULL, Primary Key (kodeLevel), Foreign Key (kodeJurusan) references Jurusan (kodeJurusan) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeGrade) references Grade (kodeGrade) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE Ruang ( kodeRuang KodeRuang NOT NULL, namaRuang NamaRuang NOT NULL, kodeCabang KodeCabang NOT NULL, Primary Key kodeRuang, Foreign Key kodeCabang references Cabang (kodeCabang) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE Guru ( kodeGuru KodeGuru NOT NULL, namaGuru Nama NOT NULL, tempatLahir TempatLahir NOT NULL, tanggalLahir Tanggal NOT NULL, jenisKelamin JenisKelamin NOT NULL, kewarganegaraan Kewarganegaraan NOT NULL DEFAULT ‘WNI’, agama Agama NOT NULL, alamat Alamat NOT NULL, kota Kota NOT NULL, kodePos KodePos,
251 email Email, statusNikah StatusNikah NOT NULL, kodeCabang KodeCabang NOT NULL, Primary Key (kodeGuru), Foreign Key (kodeCabang) references Cabang (kodeCabang) ON UPDATE CASCADE ON DELETE NO ACTION )
CREATE TABLE RuangJurusan ( kodeRuang KodeRuang NOT NULL, kodeJurusan KodeJurusan NOT NULL, Primary Key (kodeRuang, kodeJurusan), Foreign Key (kodeRuang) references Ruang (kodeRuang) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (kodeJurusan) references Jurusan (kodeJurusan) ON UPDATE CASCADE ON DELETE CASCADE )
CREATE TABLE GuruLevel ( kodeGuru KodeGuru NOT NULL, kodeLevel KodeLevel NOT NULL, Primary Key (kodeGuru, kodeLevel), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (kodeLevel) references Level (kodeLevel) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE LevelCabang ( kodeLevel KodeLevel NOT NULL, kodeCabang KodeCabang NOT NULL, Primary Key (kodeLevel, kodeCabang), Foreign Key (kodeLevel) references Level (kodeLevel) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (kodeCabang) references Cabang (kodeCabang) ON UPDATE CASCADE ON DELETE CASCADE )
CREATE TABLE Murid ( kodeMurid CHAR(6) NOT NULL, namaMurid VARCHAR(30) NOT NULL, tempatLahir VARCHAR(25) NOT NULL, tanggalLahir DATETIME NOT NULL, jenisKelamin CHAR(1) NOT NULL, Kewarganegaraan CHAR(3) NOT NULL, agama CHAR(1) NOT NULL, alamat VARCHAR(70) NOT NULL, kota VARCHAR(15) NOT NULL, kodePos CHAR(5) NULL, pekerjaanMurid CHAR(1) NOT NULL, namaAyah VARCHAR(30) NOT NULL, namaIbu VARCHAR(30) NOT NULL, statusSiswa CHAR(1) NOT NULL,
252 tanggalRegistrasi Tanggal NOT NULL, kodeKaryawan KodeKaryawan NOT NULL, nominal Money NOT NULL, kodeKaryawanPembayaran KodeKaryawan NOT NULL, Primary Key (kodeMurid), Foreign Key (KodeKaryawan) references Karyawan (KodeKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION Foreign Key (KodeKaryawanPembayaran) references Karyawan (KodeKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE Karyawan ( kodeKaryawan KodeKaryawan NOT NULL, namaKaryawan Nama NOT NULL, tempatLahir TempatLahir NOT NULL, tanggalLahir Tanggal NOT NULL, jenisKelamin JenisKelamin NOT NULL, kewarganegaraan Kewarganegaraan NOT NULL DEFAULT ‘WNI’, agama Agama NOT NULL, alamat Alamat NOT NULL, kota Kota NOT NULL, kodePos KodePos, kodeCabang KodeCabang NOT NULL, kodeJabatan KodeJabatan NOT NULL, Primary Key (kodeKaryawan), Foreign Key (kodeCabang) references Cabang (kodeCabang) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeJabatan) references Jabatan (kodeJabatan) ON UPDATE CASCADE ON DELETE NO ACTION )
CREATE TABLE Kelas ( kodeKelas KodeKelas NOT NULL, bulanMulai Bulan NOT NULL, tahunMulai Tahun NOT NULL, kodeGuru KodeGuru NOT NULL, KodeMurid KodeMurid NOT NULL, kodeLevel KodeLevel NOT NULL, kodeCabang KodeCabang NOT NULL, Primary Key (kodeKelas), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (KodeMurid) references Murid (KodeMurid) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (kodeLevel) references Level (kodeLevel) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (kodeCabang) references Cabang (kodeCabang) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE PembayaranBulanan ( noBayar NoBayarPembayaranBulanan NOT NULL, tanggalBayar Tanggal NOT NULL, tahun Tahun NOT NULL, bulan Bulan NOT NULL,
253 nominal Money NOT NULL, kodeKaryawan KodeKaryawan NOT NULL, kodeKelas KodeKelas NOT NULL, Primary Key (noBayar), Foreign Key (kodeKaryawan) references Karyawan (kodeKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeKelas) references Kelas (kodeKelas) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE Ujian ( kodeUjian KodeUjian NOT NULL, kodeKelas KodeKelas NOT NULL, kodeRuang KodeRuang NOT NULL, tanggalUjian Tanggal NOT NULL, waktuMulai Waktu NOT NULL, waktuAkhir Waktu NOT NULL, nilaiUjian Nilai NULL, kodeKaryawan KodeKaryawan NOT NULL, kodeLevel KodeLevel NOT NULL, Primary Key (kodeUjian), Foreign Key (kodeKaryawan) references Karyawan (kodeKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeKelas) references Kelas (kodeKelas) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeRuang) references Ruang (kodeRuang) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeLevel) references Level (kodeLevel) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE PembayaranUjian ( noBayar NoBayarUjian NOT NULL, tanggalBayar Tanggal NOT NULL, nominal Money NOT NULL, kodeKaryawanPembayaran KodeKaryawan NOT NULL, kodeUjian KodeUjian NOT NULL, Primary Key (noBayar), Foreign Key (kodeKaryawanPembayaran) references Karyawan (kodeKaryawan) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeUjian) references Ujian (kodeUjian) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE JadwalMengajar ( kodeJadwal KodeJadwal NOT NULL, kodeGuru KodeGuru NOT NULL, kodeCabang KodeCabang NOT NULL, Primary Key (kodeJadwal), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE, Foreign Key (kodeCabang) references Cabang (kodeCabang) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE JadwalMengajarDetail ( kodeJadwal KodeJadwal NOT NULL, hari Hari NOT NULL,
254 waktuMulai Waktu NOT NULL, waktuSelesai Waktu NOT NULL, Primary Key (kodeJadwal, hari, waktuMulai, waktuSelesai) Foreign Key (kodeJadwal) references JadwalMengajar (kodeJadwal) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE Absensi ( kodeKelas KodeKelas NOT NULL, tanggalAbsen Tanggal NOT NULL, tahun Tahun NOT NULL, bulan Bulan NOT NULL, pertemuan Pertemuan NOT NULL, waktuMulai Waktu NOT NULL, waktuSelesai Waktu NOT NULL, statusAbsensi StatusAbsensi NOT NULL, Primary Key (kodeKelas, tahun, bulan, pertemuan), Foreign Key (kodeKelas) references Kelas (kodeKelas) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE PenggunaanRuang ( kodeRuang KodeRuang NOT NULL, kodeKelas KodeKelas NOT NULL, hari Hari NOT NULL, waktuMulai Waktu NOT NULL, waktuAkhir Waktu NOT NULL, Primary Key (kodeRuang, kodeKelas, hari, waktuMulai, waktuAkhir), Foreign Key (kodeRuang) references Ruang (kodeRuang) ON UPDATE CASCADE ON DELETE NO ACTION, Foreign Key (kodeKelas) references Kelas (kodeKelas) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE TeleponMurid ( kodeMurid KodeMurid NOT NULL, telepon TeleponHandphone NOT NULL, Primary Key (kodeMurid, telepon), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE HandphoneMurid ( kodeMurid KodeMurid NOT NULL, handphone TeleponHandphone NOT NULL, Primary Key (kodeMurid, handphone), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE ContactNoAyahMurid ( kodeMurid KodeMurid NOT NULL, contactNoAyah TeleponHandphone NOT NULL, Primary Key (kodeMurid, contactNoAyah), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE )
255 CREATE TABLE ContactNoIbuMurid ( kodeMurid KodeMurid NOT NULL, contactNoIbu TeleponHandphone NOT NULL, Primary Key (kodeMurid, contactNoIbu), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE DataSaudaraMurid ( kodeMurid KodeMurid NOT NULL, namaSaudara Nama NOT NULL, belajarMusik YaTidak NOT NULL, subjek Instrumen, diLMC YaTidak, tempatBelajarSaudara TempatBelajar, Primary Key (kodeMurid, namaSaudara), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE LatarBelakangMusikMurid ( kodeMurid KodeMurid NOT NULL, instrumen Instrumen NOT NULL, grade Grade NOT NULL, lamaBelajar LamaTahun NOT NULL, tempatBelajar TempatBelajar NOT NULL, guruPengajar Nama NOT NULL, Primary Key (kodeMurid, instrumen), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE AlatMusikDimilikiMurid ( kodeMurid KodeMurid NOT NULL, tipe Instrumen NOT NULL, merk Merk NOT NULL, seri Seri, Primary Key (kodeMurid, tipe, merk), Foreign Key (kodeMurid) references Murid (kodeMurid) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE TeleponGuru ( kodeGuru KodeGuru NOT NULL, telepon TeleponHandphone NOT NULL, Primary Key (kodeGuru, telepon), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE HandphoneGuru ( kodeGuru KodeGuru NOT NULL, handphone TeleponHandphone NOT NULL, Primary Key (kodeGuru, handphone), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE )
256
CREATE TABLE DataKeluargaGuru ( kodeGuru KodeGuru NOT NULL, relasi Relasi NOT NULL, namaKeluarga Nama NOT NULL, tempatLahir TempatLahir, tanggalLahir Tanggal, pekerjaan Pekerjaan, contactNoKeluarga TeleponHandphone, Primary Key (kodeGuru, relasi, namaKeluarga), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE )
CREATE TABLE LatarBelakangPendidikanGuru ( kodeGuru KodeGuru NOT NULL, pendidikanFormal PendidikanFormal NOT NULL, namaSekolah NamaSekolah NOT NULL, kota KotaSekolah NOT NULL, negara NegaraSekolah NOT NULL, jurusan NamaJurusan NOT NULL, tahunWisuda Tahun NOT NULL, Primary Key (kodeGuru, pendidikanFormal), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE LatarBelakangMusikGuru ( kodeGuru KodeGuru NOT NULL, instrumen Instrumen NOT NULL, grade Grade NOT NULL, lamaBelajar LamaTahun NOT NULL, tempatBelajar TempatBelajar NOT NULL, guruPengajar Nama NOT NULL, Primary Key (kodeGuru, instrumen), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE Penghargaan ( kodeGuru KodeGuru NOT NULL, namaPenghargaan NamaPenghargaan NOT NULL, namaInstitusi NamaSekolah NOT NULL, tanggalPenghargaan Tanggal NOT NULL, Primary Key (kodeGuru, namaPenghargaan, tanggalPenghargaan), Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE PengalamanMengajar ( kodeGuru KodeGuru NOT NULL, mengajar Instrumen NOT NULL, namaInstitusi NamaSekolah NOT NULL , lamaKerja LamaTahun NOT NULL, Primary Key (kodeGuru, mengajar, namaInstitusi),
257 Foreign Key (kodeGuru) references Guru (kodeGuru) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE TeleponKaryawan ( kodeKaryawan KodeKaryawan NOT NULL, telepon TeleponHandphone NOT NULL, Primary Key (kodeKaryawan, telepon), Foreign Key (kodeKaryawan) references Karyawan (kodeKaryawan) ON UPDATE CASCADE ON DELETE CASCADE ) CREATE TABLE HandphoneKaryawan ( kodeKaryawan KodeKaryawan NOT NULL, handphone TeleponHandphone NOT NULL, Primary Key (kodeKaryawan, handphone), Foreign Key (kodeKaryawan) references Karyawan (kodeKaryawan) ON UPDATE CASCADE ON DELETE CASCADE )
258 Lampiran 2 – Implementasi Enterprise Constraints 1. Validitas data waktuMulai dan waktuSelesai. Nilai dari waktuMulai haruslah lebih kecil dari waktuSelesai. Constraint ini ditambahkan di setiap tabel yang mengandung kedua atribut ini. ALTER TABLE Ujian ADD CONSTRAINT UjianValidWaktu CHECK ( waktuMulai < waktuSelesai )
ALTER TABLE Absensi ADD CONSTRAINT AbsensiValidWaktu CHECK ( waktuMulai < waktuSelesai )
ALTER TABLE PenggunaanRuang ADD CONSTRAINT PenggunaanRuangValidWaktu CHECK ( waktuMulai < waktuSelesai )
ALTER TABLE JadwalMengajarDetail ADD CONSTRAINT UjianValidWaktu CHECK ( waktuMulai < waktuSelesai )
259 2. Validitas JadwalMengajar guru, setiap guru memiliki jadwal mengajar di tiap cabang, dalam hal ini jadwal-jadwal tersebut tidak boleh terjadi tabrakan. CREATE TRIGGER ValidJadwalMengajar ON JadwalMengajar FOR INSERT, UPDATE AS IF EXISTS ( SELECT * FROM inserted i LEFT JOIN JadwalMengajar j ON i.kodeGuru=j.kodeGuru AND i.kodeCabang=j.kodeCabang) BEGIN ROLLBACK TRAN END
CREATE TRIGGER ValidJadwalMengajarDetail ON JadwalMengajarDetail FOR INSERT, UPDATE AS IF EXISTS ( SELECT * FROM inserted i LEFT JOIN JadwalMengajarDetail j ON j.kodeJadwal=i.kodeJadwal AND i.Hari=j.Hari WHERE ( i.waktuMulai > j.waktuMulai ) OR (i.waktuMulai=j.waktuMulai)) AND ( i.waktuMulai < j.waktuSelesai ) ) BEGIN ROLLBACK TRAN END
260 3. Validitas jadwal penggunaan ruang. Seorang guru tidak boleh mengajar di beda ruang dalam waktu yang bersamaan. Suatu ruang tidak boleh digunakan lebih dari satu kelas dalam kurun waktu tertentu. CREATE TRIGGER ValidPenggunaanRuang ON PenggunaanRuang FOR INSERT, UPDATE AS IF NOT EXISTS ( SELECT * FROM inserted i LEFT JOIN Kelas k ON i.kodeKelas=k.kodeKelas ON k.kodeKelas=p.kodeKelas
LEFT JOIN PenggunaanRuang p WHERE
( i.waktuMulai > p.waktuMulai ) OR (i.waktuMulai=p.waktuMulai)) AND ( i.waktuMulai < p.waktuSelesai ) ) OR EXISTS ( SELECT * FROM inserted i LEFT JOIN PenggunaanRuang p ON i.kodeRuang=p.kodeRuang WHERE i.Hari=p.Hari AND ( i.waktuMulai > p.waktuMulai ) OR (i.waktuMulai=p.waktuMulai)) AND ( i.waktuMulai < p.waktuSelesai ) ) BEGIN ROLLBACK TRAN END
261 4. Validitas kode guru. Digit ke-6 dari Kode guru yang dimasukan harus sesuai dengan kode lokasi tempat guru tersebut terdaftar. CREATE TRIGGER ValidKodeGuru ON Guru FOR INSERT, UPDATE AS IF NOT EXISTS (SELECT * FROM inserted WHERE inserted.KodeCabang = SUBSTRING(inserted.KodeGuru,6,2) ) BEGIN ROLLBACK TRAN END
5. Validitas kode kelas. Digit ke-6 dari Kode Kelas yang dimasukan harus sesuai dengan kode jurusan, dan digit ke-8 dari Kode Kelas yang dimasukkan harus sesuai dengan Kode Cabang tempat kelas tersebut berjalan. CREATE TRIGGER ValidKodeKelas ON Kelas FOR INSERT, UPDATE AS IF NOT EXISTS (SELECT * FROM inserted A JOIN [Level] B on A.KodeLevel = B.KodeLevel WHERE B.KodeJurusan = SUBSTRING(inserted.KodeKelas,6,2) and inserted.KodeCabang = SUBSTRING(inserted.KodeKelas,8,2) ) BEGIN ROLLBACK TRAN END
262
6. Validitas kode murid. Digit pertama dari Kode Murid yang dimasukan harus sesuai dengan tahun dari tanggal registrasi. CREATE TRIGGER ValidKodeMurid ON Murid FOR INSERT, UPDATE AS IF NOT EXISTS (SELECT * FROM inserted WHERE SUBSTRING(KodeMurid,1,2) = SUBSTRING(CONVERT(char(4),YEAR(TanggalRegistrasi)), 3, 2)) BEGIN ROLLBACK TRAN END
7. Validitas kode ujian. Digit pertama dari Kode Ujian yang dimasukan harus sesuai dengan tahun dari tanggal Ujian. CREATE TRIGGER ValidKodeUjian ON Ujian FOR INSERT, UPDATE AS IF NOT EXISTS (SELECT * FROM inserted WHERE SUBSTRING(KodeUjian,1,2) = SUBSTRING(CONVERT(char(4),YEAR(TanggalUjian)), 3, 2)) BEGIN ROLLBACK TRAN END
263
8. Validitas no bayar ujian. Digit pertama dari No bayar yang dimasukan harus sesuai dengan tahun dari tanggal bayar ujian. CREATE TRIGGER ValidNoBayarUjian ON PembayaranUjian FOR INSERT, UPDATE AS IF NOT EXISTS (SELECT * FROM inserted WHERE SUBSTRING(NoBayar,1,2) = SUBSTRING(CONVERT(char(4),YEAR(TanggalBayar)), 3, 2)) BEGIN ROLLBACK TRAN END
9. Validitas no bayar bulanan. Digit pertama dari No bayar yang dimasukan harus sesuai dengan tahun dari tanggal bayar bulanan. CREATE TRIGGER ValidNoBayarBulanan ON PembayaranBulanan FOR INSERT, UPDATE AS IF NOT EXISTS (SELECT * FROM inserted WHERE SUBSTRING(NoBayar,1,2) = SUBSTRING(CONVERT(char(4),YEAR(TanggalBayar)), 3, 2)) BEGIN ROLLBACK TRAN END
264
10. Validitas waktu mulai dan waktu selesai harus sesuai dengan jam operasional yaitu dari jam 10.00 sampai jam 20.00. ALTER TABLE Ujian ADD CONSTRAINT UjianValidWaktu CHECK waktuMulai >= ’1000’ AND waktuSelesai <= ’2000’
ALTER TABLE Absensi ADD CONSTRAINT AbsensiValidWaktu CHECK waktuMulai >= ’1000’ AND waktuSelesai >= ’2000’
ALTER TABLE PenggunaanRuang ADD CONSTRAINT PenggunaanRuangValidWaktu CHECK waktuMulai >= ’1000’ AND waktuSelesai <= ’2000’
ALTER TABLE JadwalMengajarDetail ADD CONSTRAINT UjianValidWaktu CHECK waktuMulai >= ’1000’ AND waktuSelesai <=’2000’
265 Lampiran 3 – Implementasi Indeks CREATE UNIQUE CLUSTERED INDEX IdxMurid_KodeMurid ON Murid (KodeMurid) CREATE INDEX IdxMurid_NamaMurid ON Murid (NamaMurid) CREATE INDEX IdxMurid_TanggalRegistrasi ON Murid (TanggalRegistrasi) CREATE INDEX IdxMurid_KodeCabang ON Murid (KodeCabang) CREATE UNIQUE CLUSTERED INDEX IdxGuru_KodeGuru ON Guru(KodeGuru) CREATE INDEX IdxGuru_NamaGuru ON Guru (NamaGuru) CREATE INDEX IdxGuru_KodeCabang ON Guru (KodeCabang) CREATE UNIQUE CLUSTERED INDEX IdxKaryawan_KodeKaryawan ON Karyawan(KodeKaryawan) CREATE INDEX IdxKaryawan_NamaKaryawan ON Karyawan (NamaKaryawan) CREATE UNIQUE CLUSTERED INDEX IdxRuang_KodeRuang ON Ruang(KodeRuang) CREATE INDEX IdxRuang_NamaRuang ON Ruang (NamaRuang) CREATE UNIQUE CLUSTERED INDEX IdxJurusan_KodeJurusan ON Jurusan(KodeJurusan) CREATE INDEX IdxJurusan_NamaJurusan ON Jurusan (NamaJurusan) CREATE UNIQUE CLUSTERED INDEX IdxGrade_KodeGrade ON Grade(KodeGrade) CREATE INDEX IdxGrade_NamaGrade ON Grade (NamaGrade) CREATE UNIQUE CLUSTERED INDEX IdxLevel_KodeLevel ON Level(KodeLevel) CREATE INDEX IdxLevel_KodeJurusan ON Level (KodeJurusan) CREATE UNIQUE CLUSTERED INDEX IdxKelas_KodeKelas ON Kelas(KodeLevel)
266 CREATE INDEX IdxKelas_KodeGuru ON Kelas (KodeGuru) CREATE INDEX IdxKelas_KodeLevel ON Kelas (KodeLevel) CREATE UNIQUE CLUSTERED INDEX IdxPembBulanan_NoBayar ON PembayaranBulanan(NoBayar) CREATE INDEX IdxPembBulanan_TanggalBayarBulanan ON PembayaranBulanan (TanggalBayar) CREATE INDEX IdxPembBulanan_KodeKelas ON PembayaranBulanan (KodeKelas) CREATE UNIQUE CLUSTERED INDEX IdxUjian_KodeUjian ON Ujian(KodeUjian) CREATE INDEX IdxUjian_KodeKelas ON Ujian (KodeKelas) CREATE UNIQUE CLUSTERED INDEX IdxPembUjian_NoBayar ON PembayaranUjian(KodeUjian) CREATE INDEX IdxPembUjian_TanggalBayar ON PembayaranUjian (KodeKelas) CREATE UNIQUE CLUSTERED INDEX IdxCabang_KodeCabang ON Cabang(KodeCabang) CREATE INDEX IdxCabang_NamaCabang ON Cabang (NamaCabang) CREATE UNIQUE CLUSTERED INDEX IdxJabatan_KodeJabatan ON Jabatan(KodeJabatan) CREATE INDEX IdxJabatan_NamaJabatan ON Jabatan (NamaJabatan) CREATE INDEX IdxAbsensi_KodeKelas ON Absensi(KodeKelas) CREATE INDEX IdxAbsensi_TanggalAbsensi ON Absensi (TanggalAbsensi) CREATE CLUSTERED INDEX IdxJadwalMengajar_KodeGuruKodeCabang ON JadwalMengajar(KodeGuru,KodeCabang) CREATE INDEX idxJadwal_KodeGuru ON JadwalMengajar (KodeGuru) CREATE INDEX idxJadwal_KodeCabang ON JadwalMengajar (KodeCabang) CREATE CLUSTERED INDEX IdxDetailKodeJadwalHariWaktuMulaiWaktuSelesai ON JadwalMengajarDetail(KodeJadwal, Hari, WaktuMulai, WaktuSelesai)
267 CREATE INDEX idxDetailKodeJadwalHari ON JadwalMengajarDetail(KodeJadwal, Hari) CREATE INDEX idxDetailHari ON JadwalMengajarDetail (Hari) CREATE INDEX idxDetailKodeJadwal ON JadwalMengajarDetail (KodeJadwal) CREATE CLUSTERED INDEX idxPenggunaan_KodeKelasKodeRuang ON PenggunaanRuang(KodeKelas, KodeRuang) CREATE INDEX idxPenggunaan_Hari ON PenggunaanRuang(Hari) CREATE INDEX idxPenggunaan_Ruang ON PenggunaanRuang (KodeRuang) CREATE INDEX idxPenggunaan_Kelas ON PenggunaanRuang (KodeKelas)
268 Lampiran 4 – Estimasi Disk Space Menghitung ukuran tabel 1. Number of rows in the table = Num_Rows 2. Number of columns = Num_Cols Sum of bytes in all fixed-length columns = Fixed_Data_Size Number of variable-length columns = Num_Variable_Cols Maximum size of all variable-length columns = Max_Var_Size 3. Null Bitmap (Null_Bitmap) = 2 + (( Num_Cols + 7) / 8 ), dibulatkan ke bawah. 4. Total size of variable-length columns (Variable_Data_Size) = 2 + (Num_Variable_Cols x 2) + Max_Var_Size Jika tidak ada variable-length columns, nilai Variable_Data_Size adalah 0. 5. Menghitung row size: Total row size (Row_Size) = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap +4 Penambahan 4 di belakang adalah untuk row header. 6. Menghitung number of rows per page (8096 free bytes per page): Number of rows per page (Rows_Per_Page) = ( 8096 ) / (Row_Size + 2) Menggunakan pembulatan ke bawah. 7. Number of free rows per page (Free_Rows_Per_Page) = 8096 x ((100 Fill_Factor) / 100) / (Row_Size + 2) Nilai Fill_Factor secara default adalah 100. 8. Menghitung jumlah page yang dibutuhkan: Number of pages (Num_Pages) = Num_Rows / (Rows_Per_Page Free_Rows_Per_Page) Dilakukan pembulatan ke atas.
269 9. Menghitung jumlah byte yang dibutuhkan (8192 total bytes per page): Table size (bytes) = 8192 x Num_Pages Menghitung penggunaan space oleh Clustered Index 1. Number of columns in index key = Num_CKey_Cols Sum of bytes in all fixed-length key columns = Fixed_CKey_Size Number of variable-length columns in index key = Num_Variable_CKey_Cols Maximum size of all variable-length key columns = Max_Var_CKey_Size 2. Index Null Bitmap (CIndex_Null_Bitmap) = 2 + (( Num_CKey_Cols + 7) / 8 ) Dilakukan pembulatan ke bawah. 3. Total size of variable length columns (Variable_CKey_Size) = 2 + (Num_Variable_CKey_Cols x 2) + Max_Var_CKey_Size Jika tidak ada variable-length columns, nilai Variable_CKey_Size adalah 0. 4. Menghitung row size: Total index row size (CIndex_Row_Size) = Fixed_CKey_Size + Variable_CKey_Size + CIndex_Null_Bitmap + 1 + 8 5. Menghitung number of index rows per page (8096 free bytes per page): Number of index rows per page (CIndex_Rows_Per_Page) = ( 8096 ) / (CIndex_Row_Size + 2) Dilakukan pembulatan ke bawah. 6. Menghitung jumlah page yang dibutuhkan untuk masing-masing level indeks. Number of pages (level 0) (Num_Pages_CLevel_0) = (Data_Space_Used / 8192) / CIndex_Rows_Per_Page Number of pages (level 1) (Num_Pages_CLevel_1) = Num_Pages_CLevel_0 / CIndex_Rows_Per_Page
Setiap level akan dihitung hingga Number of pages mencapai nilai 1 (root page).
270 Number of pages (level 2) (Num_Pages_CLevel_2) = Num_Pages_CLevel_1 / CIndex_Rows_Per_Page Setiap perhitungan dilakukan pembulatan ke atas. Menghitung total page untuk keseluruhan level: Total number of pages (Num_CIndex_Pages) = Num_Pages_CLevel_0 + Num_Pages_CLevel_1 + Num_Pages_CLevel_2 + ... + Num_Pages_CLevel_n 7. Menghitung ukuran space untuk clustered index (8192 total bytes per page): Clustered index size (bytes) = 8192 x Num_CIndex_Pages Calculate the Space Used to Store Each Additional Nonclustered Index 1. Number of columns in index key = Num_Key_Cols Sum of bytes in all fixed-length key columns = Fixed_Key_Size Number of variable-length columns in index key = Num_Variable_Key_Cols Maximum size of all variable-length key columns = Max_Var_Key_Size 2. Index Null Bitmap (Index_Null_Bitmap) = 2 + (( Num_Key_Cols + 7) / 8 ) Dilakukan pembulatan ke bawah. 3. Total size of variable length columns (Variable_Key_Size) = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size Jika tidak variable-length columns, nilai Variable_Key_Size adalah 0. 4. Menghitung nonleaf index row size: Total nonleaf index row size (NL_Index_Row_Size) = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8 5. Menghitung number of nonleaf index rows per page: Number of nonleaf index rows per page (NL_Index_Rows_Per_Page) = ( 8096 ) / (NL_Index_Row_Size + 2) Dilakukan pembulatan ke bawah.
271 6. Menghitung leaf index row size: Total leaf index row size (Index_Row_Size) = CIndex_Row_Size + Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 Penambahan 1 adalah untuk index row header. 7. Menghitung number of leaf level index rows per page: Number of leaf level index rows per page (Index_Rows_Per_Page) = ( 8096 ) / (Index_Row_Size + 2) Dilakukan pembulatan ke bawah. 8. Number of free index rows per page (Free_Index_Rows_Per_Page) = 8096 x ((100 - Fill_Factor) / 100) / Index_Row_Size Dilakukan pembulatan ke bawah. 9. Menghitung jumlah page untuk semua level indeks: Number of pages (level 0) (Num_Pages_Level_0) = Num_Rows / (Index_Rows_Per_Page - Free_Index_Rows_Per_Page) Number of pages (level 1) (Num_Pages_Level_1) = Num_Pages_Level_0 / NL_Index_Rows_Per_Page Setiap level akan dihitung hingga Number of pages mencapai nilai 1 (root page). Setiap perhitungan dilakukan pembulatan ke atas. Total number of pages (Num_Index_Pages) = Num_Pages_Level_0 + Num_Pages_Level_1 +Num_Pages_Level_2 + ... + Num_Pages_Level_n 10. Menghitung ukuran space untuk nonclustered index: Nonclustered index size (bytes) = 8192 x Num_Index_Pages (Sumber dari Anonim, Books Online, Microsoft SQL Server 2000)
272 Lampiran 5 – Implementasi View CREATE VIEW ViewProfileMurid As Select A.KodeMurid, A.NamaMurid, A.TempatLahir, A.TanggalLahir, A.JenisKelamin, A.Kewarganegaraan, A.Agama, A.Alamat, A.Kota, A.KodePos, A.PekerjaanMurid, A.NamaAyah, A.NamaIbu, A.StatusSiswa, B.NamaCabang From Murid A Left Join Cabang B on A.KodeCabang = B.KodeCabang
CREATE VIEW ViewTeleponHandphoneMurid As ( Select A.KodeMurid, A.NamaMurid, Contact = B.Telepon From Murid A Left Join TeleponMurid B on A.KodeMurid = B.KodeMurid ) union ( Select A.KodeMurid, A.NamaMurid, Contact = C.Handphone From Murid A Left Join HandphoneMurid C on A.KodeMurid = C.KodeMurid ) CREATE VIEW ViewContactOrangTuaMurid As ( Select A.KodeMurid, A.NamaMurid, Contact = B.ContactNoAyah From Murid A Left Join ContactNoAyahMurid B on A.KodeMurid = B.KodeMurid ) union ( Select A.KodeMurid, A.NamaMurid, Contact = C.ContactNoIbu From Murid A Left Join ContactNoIbuMurid C on A.KodeMurid = C.KodeMurid )
CREATE VIEW ViewDataSaudaraMurid As Select A.KodeMurid, A.NamaMurid, Contact = B.ContactNoAyah From Murid A Left Join DataSaudaraMurid B on A.KodeMurid = B.KodeMurid
CREATE VIEW ViewLatarBelakangMusikMurid As Select A.KodeMurid, A.NamaMurid, B.Instrumen, B.Grade, B.LamaBelajar, B.TempatBelajar, B.GuruPengajar From Murid A Left Join LatarBelakangMusikMurid B on A.KodeMurid = B.KodeMurid
273 CREATE VIEW ViewAlatMusikMurid As Select A.KodeMurid, A.NamaMurid, B.Tipe, B.Merk, B.Seri From Murid A Left Join AlatMusikDimilikiMurid B on A.KodeMurid = B.KodeMurid CREATE VIEW ViewProfileKaryawan As Select A.KodeKaryawan, A.NamaKaryawan, A.TempatLahir, A.TanggalLahir, A.JenisKelamin, A.Kewarganegaraan, A.Agama, A.Alamat, A.Kota, A.KodePos, A.KodeCabang, A.KodeJabatan, B.NamaJabatan, C.NamaCabang From Karyawan A Left Join Jabatan B on A.KodeJabatan = B.KodeJabatan Left Join Cabang C on A.KodeCabatan = C.KodeCabatan CREATE VIEW ViewTeleponHandphoneKaryawan As ( Select A.KodeKaryawan, A.NamaKaryawan, Contact = B.Telepon From Karyawan A Left Join TeleponKaryawan B on A.KodeKaryawan = B.KodeKaryawan ) union ( Select A. KodeKaryawan, A.NamaKaryawan, Contact = C.Handphone From Karyawan A Left Join HandphoneKaryawan C on A.KodeKaryawan = C.KodeKaryawan ) CREATE VIEW ViewProfileGuru As Select A.KodeGuru, A.NamaGuru, A.TempatLahir, A.TanggalLahir, A.JenisKelamin, A.Kewarganegaraan, A.Agama, A.Alamat, A.Kota, A.KodePos, A.Email, A.StatusNikah, B.NamaCabang From Guru A Left Join Cabang B on A.KodeCabang = B.KodeCabang CREATE VIEW ViewTeleponHandphoneGuru As ( Select A.KodeGuru, A.NamaGuru, Contact = B.Telepon From Guru A Left Join TeleponGuru B on A.KodeGuru = B.KodeGuru ) union ( Select A.KodeGuru, A.NamaGuru, Contact = C.Handphone From Guru A Left Join HandphoneGuru C on A.KodeGuru = C.KodeGuru )
274 CREATE VIEW ViewDataKeluargaGuru As Select A.KodeGuru, A.NamaGuru, B.Relasi, B.NamaKeluarga, B.TempatLahir, B.TanggalLahir, B.Pekerjaan, B.ContactNoKeluarga From Guru A Left Join DataKeluargaGuru B on A.KodeGuru = B.KodeGuru CREATE VIEW ViewLatarBelakangPendidikanGuru As Select A.KodeGuru, A.NamaGuru, B.PendidikanFormal, B.NamaSekolah, B.Kota, B.Negara, B.Jurusan, B.TahunWisuda From Guru A Left Join LatarBelakangPendidikanGuru B on A.KodeGuru = B.KodeGuru CREATE VIEW ViewLatarBelakangMusikGuru As Select A.KodeGuru, A.NamaGuru, B.Instrumen, B.Grade, B.LamaBelajar, B.TempatBelajar, B.GuruPengajar From Guru A Left Join LatarBelakangMusikGuru B on A.KodeGuru = B.KodeGuru CREATE VIEW ViewPenghargaanGuru As Select A.KodeGuru, A.NamaGuru, B.NamaPenghargaan, B.NamaInstitusi, B.TanggalPenghargaan From Guru A Left Join Penghargaan B on A.KodeGuru = B.KodeGuru CREATE VIEW ViewPengalamanMengajarGuru As Select A.KodeGuru, A.NamaGuru, B.Mengajar, B.NamaInstitusi, B.LamaKerja From Guru A Left Join PengalamanMengajar B on A.KodeGuru = B.KodeGuru
CREATE VIEW ViewRegistrasiMurid As Select A.KodeMurid, A.NamaMurid, A.TanggalRegistrasi, B.NamaCabang ,B.NamaKaryawan From Murid A Left Join Cabang B on A.KodeCabang = B.KodeCabang Left Join Karyawan C on A.KodeKaryawan=C.KodeKaryawan
CREATE VIEW ViewPembayaranRegistrasi As Select A.KodeMurid, A.NamaMurid, A.TanggalRegistrasi,A.Nominal, A. KodeKaryawanPembayaran ,B.NamaKaryawan,C.NamaCabang From Murid A Left Join Karyawan B on A.KodeKaryawan=B.KodeKaryawan Left Join Cabang C on A.KodeCabang = C.KodeCabang
275 CREATE VIEW ViewPembayaran Bulanan As Select A.NoBayar, A.TanggalBayar, A.Tahun, A.Bulan, A.Nominal, A.KodeKelas, A.KodeKaryawan,B.NamaKaryawan, A.KodeCabang,D.KodeCabang, ,E.KodeMurid,E.NamaMurid From PembayaranBulanan Left Join Karyawan B on A.KodeKaryawan=B.KodeKaryawan Join Kelas C on A.KodeKelas=C.KodeKelas Left Join Cabang D on C.KodeCabang = D.KodeCabang Left Join Murid E on C.KodeMurid=E.KodeMurid CREATE VIEW ViewUjian As Select A. KodeUjian, A.KodeKelas, A. KodeRuang, A.TanggalUjian, A.WaktuMulai, A.WaktuAkhir, A.NilaiUjian, A. KodeKaryawan, A.KodeLevel,C.KodeMUrid,C.namaMurid,D.namaCabang, F.NamaJurusan,G.NamaGrade,H.NamaRuang From Ujian A Join Kelas B on A.kodeKelas =B.KodeKelas Join Murid C on B.KodeMurid=C.KodeMurid Join cabang D on B..KodeCabang=D.Kodecabang Join Level E on B.Kodelevel=E.Kodelevel Join Jurusan F on F.KodeJurusan=E.Kodejurusan Join Grade G on G.KOdeGrade=E.KodeGrade Join Ruang H on A.kodeRuang=H.KOdeRuang Create view ViewPembayaranUjian As Select A.NoBayar, A.TanggalBayar, A.Nominal, A.KodeKaryawanPembayaran, A.KodeUjian ,B.KodeKelas, D.Kodemurid, D.namaMurid,E.NamaCabang,F.NamaKaryawan From PembayaranUjianUjian A Join Ujian B on A.kodeujian=B.KodeUjian Join Kelas C on B.kodeKelas =C.KodeKelas Join Murid D on C.KodeMurid=D.KodeMurid Join cabang E on C.KodeCabang=E.Kodecabang Join Karyawan F on A. KodeKaryawanPembayaran=F.KodeKaryawan
CREATE VIEW ViewJadwalKesediaanGuruPerCabang As Select A.KodeJadwal, A.KodeGuru, A.KodeCabang,B.NamaGuru,C.NamaCabang, D.Hari, D.WaktuMulai, D.WaktuSelesai From JadwalMengajar A Join Guru B on A.kodeGuru=B.KodeGuru Join cabang C on A.KodeCabang=C.Kodecabang Join JadwalMengajarDetail D on A. KodeJadwal=D.KodeJadwal CREATE VIEW ViewGuruyangtersediauntukTiaplevel As Select A.KodeGuru, A.KodeLevel, A.KodeCabang,B.NamaGuru,D.namaJurusan, E.NamaGrade, F.NamaCabang From GuruLevel A Join Guru B on A.kodeGuru=B.KodeGuru Join Level C on A.KodeLevel=C.KodeLevel
276 Join Jurusan D on C. KodeJurusan=D.KodeJurusan Join Grade E on C.kodeGrade=E.KodeGrade Join Cabang F on A.kodeCabang=F.KodeCabang CREATE VIEW ViewLevelyangtersediaPadacabang As Select A.KodeLevel, A.KodeCabang,B.NamaCabang,C.Harga,D.Namajurusan,E.namaGrade From LevelCabang A Join Cabang B on A.kodeCabang=B.KodeCabang Join Level C on A.KodeLevel=C.KodeLevel Join Jurusan D on C. KodeJurusan=D.KodeJurusan Join Grade E on C.kodeGrade=E.KodeGrade
CREATE VIEW ViewKelas As Select A.KodeKelas, A.BulanMulai, A.TahunMulai, A.KodeGuru, A.KodeLevel,B.KodeMurid,B.NamaMurid,B.StatusSiswa,C.Harga, D.NamaJurusan,E.NamaGrade, F.NamaCabang,G.NamaGuru, H.KodeRuang, H.Hari, H.WaktuMulai, H.WaktuSelesai, I.NamaRuang From Kelas A Join Murid B on A.KodeMurid=B.KodeMurid Join Level C on A.KodeKelas=C.KodeKelas Join Jurusan D on C.KodeJurusan=D.KodeJurusan Join Grade E on C.kodeGrade=E.KodeGrade Join Cabang F on A.KodeCabang=F.KodeCabang Join Guru G on A.KodeGuru=G.KodeGuru Join PenggunaanRuang H on A.KodeKelas=H.KodeKelas Join Ruang I on H.KodeRuang=I.KodeRuang
CREATE VIEW ViewAbsensiKelas As Select A.KodeKelas, B.TanggalAbsen, B.Tahun, B.Bulan, B.Pertemuan, B.WaktuMulai, B.WaktuSelesai, B.StatusAbsensi C.NamaGuru,D.KodeMurid, D.NamaMurid,E.NamaCabang From Kelas A Join Absensi B on A.KodeKelas=B.KodeKelas Join Guru C on A.KodeGuru=C.KodeGuru Join Murid D on A.KodeMurid=D.KodeMurid Join Cabang E on A.KodeCabang=E.KodeCabang CREATE VIEW ViewPenggunaanRuang As Select A.KodeRuang, A.KodeKelas, A.Hari, A.WaktuMulai, A.WaktuAkhir, B.NamaRuang, C.KodeCabang, D.NamaCabang From PenggunaanRuang A Join Ruang B on A.KodeRuang=B.KodeRuang Join Kelas C on A.KodeKelas=C.KodeKelas Join Cabang D on C.KodeCabang=D.KodeCabang
277 Lampiran 6 – Implementasi user dan hak aksesnya EXEC EXEC EXEC EXEC EXEC EXEC EXEC
sp_addrole sp_addrole sp_addrole sp_addrole sp_addrole sp_addrole sp_addrole
‘Principal’ ‘Management’ ‘KaBagAdmin’ ‘AdminManagement’ ‘AdminEducation’ ‘KaCab’ ‘AdminCab’
GRANT SELECT ON Murid TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Guru TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Karyawan TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Ruang TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Jurusan TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab
GRANT SELECT ON Grade TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Level TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Kelas TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON PembayaranBulanan TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON Ujian TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON PembayaranUjian TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON Cabang TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab
278 GRANT SELECT ON Jabatan TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON Absensi TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON JadwalMengajar TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON JadwalMengajarDetail TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON PenggunaanRuang TO Principal, Management, KaBagAdmin, AdminEducation, KaCab, AdminCab GRANT SELECT ON RuangJurusan TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON GuruLevel TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON LevelCabang TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON TeleponMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab, AdminCab GRANT SELECT ON HandphoneMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab, AdminCab GRANT SELECT ON ContactNoAyahMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab, AdminCab GRANT SELECT ON ContactNoIbuMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab, AdminCab GRANT SELECT ON DataSaudaraMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON LatarBelakangMusikMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON AlatMusikDimilikiMurid TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON TeleponGuru TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON HandphoneGuru TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab
279 GRANT SELECT ON DataKeluargaGuru TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON LatarBelakangPendidikanGuru TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON LatarBelakangMusikGuru TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON Penghargaan TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON PengalamanMengajar TO Principal, Management, KaBagAdmin, AdminManagement, KaCab GRANT SELECT ON TeleponKaryawan TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT SELECT ON HandphoneKaryawan TO Principal, Management, KaBagAdmin, AdminManagement, AdminEducation, KaCab, AdminCab GRANT INSERT, UPDATE ON Murid TO AdminManagement GRANT UPDATE ON Murid (TanggalRegistrasi, KodeKaryawan, KodeCabang, Nominal, KodeKaryawanPembayaran) TO AdminCab GRANT INSERT, UPDATE ON Guru TO AdminManagement GRANT INSERT, UPDATE ON Karyawan TO AdminManagement GRANT INSERT, UPDATE ON Ruang TO AdminManagement GRANT INSERT, UPDATE ON Jurusan TO AdminManagement GRANT INSERT, UPDATE ON Grade TO AdminManagement GRANT INSERT, UPDATE ON Level TO AdminManagement GRANT INSERT, UPDATE ON Kelas TO AdminEducation GRANT INSERT, UPDATE ON PembayaranBulanan TO AdminCab GRANT INSERT, UPDATE ON Ujian TO AdminEducation GRANT INSERT ON PembayaranUjian TO AdminCab GRANT INSERT, UPDATE ON Cabang TO AdminManagement GRANT INSERT, UPDATE ON Jabatan TO AdminManagement GRANT INSERT, UPDATE, DELETE ON Absensi TO AdminEducation GRANT INSERT ON JadwalMengajar TO AdminEducation GRANT INSERT ON JadwalMengajarDetail TO AdminEducation
280
GRANT INSERT ON PenggunaanRuang TO AdminEducation GRANT INSERT, UPDATE, DELETE ON RuangJurusan TO AdminManagement GRANT INSERT, UPDATE, DELETE ON GuruLevel TO AdminManagement GRANT INSERT, UPDATE, DELETE ON LevelCabang TO AdminManagement GRANT INSERT, UPDATE, DELETE ON TeleponMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON HandphoneMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON ContactNoAyahMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON ContactNoIbuMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON DataSaudaraMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON LatarBelakangMusikMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON AlatMusikDimilikiMurid TO AdminManagement GRANT INSERT, UPDATE, DELETE ON TeleponGuru TO AdminManagement GRANT INSERT, UPDATE, DELETE ON HandphoneGuru TO AdminManagement GRANT INSERT, UPDATE, DELETE ON DataKeluargaGuru TO AdminManagement GRANT INSERT, UPDATE, DELETE ON LatarBelakangPendidikanGuru TO AdminManagement GRANT INSERT, UPDATE, DELETE ON LatarBelakangMusikGuru TO AdminManagement GRANT INSERT, UPDATE, DELETE ON Penghargaan TO AdminManagement GRANT INSERT, UPDATE, DELETE ON PengalamanMengajar TO AdminManagement GRANT INSERT, UPDATE, DELETE ON TeleponKaryawan TO AdminManagement GRANT INSERT, UPDATE, DELETE ON HandphoneKaryawan TO AdminManagement
281 Lampiran 7 – Hasil wawancara sebagai analisis kebutuhan informasi
Hasil Wawancara
Setelah melalui analisis kebutuhan informasi dalam perusahaan, berikut ini kami dokumentasikan kebutuhan-kebutuhan yang ada dalam perusahaan. Dalam perusahaan membutuhkan data registrasi murid, profil murid, profil guru, profil karyawan, kelas yang berjalan , penggunaan ruang, pendataan ujian, pencatatan absensi, hingga pencataan\\tan pembayarannya. Berikut ini dilampirkan hasil wawancara yang dilakukan dalam proses penelitian.
1. Tanya: Data murid tidak pernah dihapus? Jawab: Tidak Pernah. 2. Tanya: Apakah ada status antara murid yang aktif dengan yang tidka aktif? Jawab: Di sini status siswa dibedakan menjadi Baru, Cuti, Berhenti, dan Aktif. 3. Tanya: Berapa banyak jumlah pendaftar rata-rata dalam satu bulan? Jawab: Kurang lebih 50-100 orang. 4. Tanya: Adakah pendaftar yang registrasi, kemudian tidak membayar biaya registrasi tersebut? Bagaimana pencatatannya? Jawab: Tidak ada. Pada saat registrasi pendaftar harus langsung membayar biaya registrasi pada hari yang sama, termasuk pembayaran kelas untuk bulan pertama. 5. Tanya: Dalam setahun kira-kira berapa pertambahan rata-rata jumlah guru? Jawab: Kurang lebih 10 orang. 6. Tanya: Berapa kali maksimal jumlah pembayaran yang dilakukan untuk registrasi? Jawab: Untuk pembayaran registrasi harus langsung dibayarkan lunas pada saat registrasi. 7. Tanya: Bagaimana sistem absensi yang berjalan saat ini? Bagaimana pencatatannya?
282 Jawab: Absensi dicatat dalam form yang diisi oleh guru yang bersangkutan. Tiap murid untuk masing-masing kelas yang diambil akan memiliki absennya masingmasing. 8. Tanya: Untuk pembayaran bulanan bagaimana sistem pembayarannya? Apakah boleh dicicil? Jawab: Untuk pembayaran bulanan dibayar sekali setiap bulannya. Tidak ada cicilan. 9. Tanya: Bagaimana sistem pembayarannya? Tunai/Debit/Transfer? Jawab: Semua pembayaran dalam bentuk Tunai. 10. Tanya: Bagaimana sistem ujian di Cantata? Jawab: Ujian diadakan untuk kenaikan level murid. Setiap murid untuk setiap kelas yang diambil akan diadakan ujian. Jadi mungkin saja seorang murid ikut dua ujian misalkan untuk piano dan biola. 11. Tanya: Berapa kali ujian diadakan dalam setahun. Apakah waktunya tetap? Jawab: Kurang lebih 1-2 kali. Waktunya biasanya awal tahun dan tengah tahun. 12. Tanya: Apa syarat murid agar boleh ikut ujian? Jawab: Sebelum ujian akan ada proses persiapan ujian di mana masing-masing guru diberikan daftar murid yang diajarnya, kemudian guru yang berhak menentukan mana murid yang berhak ikut ujian. 13. Tanya: Bagaimana jika murid gagal ujian? Jawab: Murid bersangkutan tidak naik level, dan tetap pada levelnya. Murid boleh ikut ujian yang berikutnya. 14. Tanya: Penyelenggaraan ujian diadakan bersamaan dengan kelas berjalan atau kelas liburkan? Jawab: Ujian dilakukan tidak bersamaan dengan kelas agar tidak menggangu jalannya ujian.
283 15. Tanya: Bagaimana sistem penggunaan ruangan untuk ujian? Jawab: Setiap ujian diadakan di masing-masing ruangannya sesuai dengan jurusan. Pada saat ujian dibagi mana yang untuk ujian piano, biola, dan sebagainya. 16. Tanya: Berapa jumlah jurusan yang ada saat ini? Jawab: Sampai saat ini jurusan yang ada adalah Classic Piano, Jazz Piano, Biola, Viola, Flute, Cello, Classic Gitar, Electric Guitar, Drum, Keyboard, Vokal. 17. Tanya: Berapa jumlah pengajar yang ada saat ini? Jawab: Kurang lebih 30 orang. 18. Tanya: Berapa jumlah murid sampai saat ini? Jawab: Kurang lebih 3000 orang yang tercatat namun yang masih aktif kurang lebih 800 orang. 19. Tanya: Dalam satu minggu berapa shift yang berjalan rata-rata? Jawab: Untuk seluruh cabang jika digabungkan bisa mencapai 700 shift per minggu. 20. Tanya: Berapa jumlah yang ikut ujian rata-rata? Jawab: Dalam satu kali periode ujian jumlah yang ikut ujian kurang lebih 100 orang. 21. Tanya: Dari jam berapa sampai jam berapa operasional berjalan di Cantata? Jawab: Operasional dimulai dari jam 10 pagi hingga jam 8 malam.
Ms.Annalely B.A Pimpinan Lembaga Musik Cantata
284 Lampiran 8 - Perancangan Form Input
Menu Utama
Form View Registrasi Murid
285
Form Input Registrasi Murid
Form View Data Pengajar
286
Form Input Data Pengajar
287
Form View Data Karyawan
Form Input Data Karyawan
288
Form View Cabang
Form Input Cabang
Form View Data Jabatan
289
Form Input Data Jabatan
Form View Ruang
Form Input Ruang
290
Form View Jurusan
Form Input Jurusan
Form View Grade
291
Form Input Grade
Form View Data Level
Form Input Data Level
292
Form Input Data Ruang Jurusan
Form Input Data Level Cabang
293
Form View Data Penggunaan Ruang
Form Input Data Penggunaan Ruang
294
Form View Data Kelas
Form Input Data Kelas
295
Form View Data Ujian
Form Input Data Ujian
296
Form Input Data Pembayaran Bulanan
Form Input Data Pembayaran Ujian
297 Lampiran 9 - Validasi Relasi dengan Normalisasi Tahap normalisasi 1NF 1. Murid (KodeMurid, NamaMurid, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, PekerjaanMurid, NamaAyah, NamaIbu, StatusSiswa, TanggalRegistrasi, KodeKaryawan, KodeCabang, Nominal, KodeKaryawanPembayaran) 2. Guru (KodeGuru, NamaGuru, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, Email, StatusNikah, KodeCabang) 3. Karyawan (KodeKaryawan, NamaKaryawan, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, KodeCabang, KodeJabatan) 4. Ruang (KodeRuang, NamaRuang, KodeCabang) 5. Jurusan (KodeJurusan, NamaJurusan) 6. Grade (KodeGrade, NamaGrade) 7. Level (KodeLevel, KodeJurusan, KodeGrade, Harga) 8. Kelas (KodeKelas, BulanMulai, TahunMulai, KodeGuru, KodeMurid, KodeLevel, KodeCabang) 9. PembayaranBulanan (NoBayar, TanggalBayar, Tahun, Bulan, Nominal, KodeKaryawan, KodeKelas) 10. Ujian (KodeUjian, KodeKelas, KodeRuang, TanggalUjian, WaktuMulai, WaktuAkhir, NilaiUjian, KodeKaryawan, KodeLevel)
298 11. PembayaranUjian (NoBayar, TanggalBayar, Nominal, KodeKaryawanPembayaran, KodeUjian) 12. Cabang (KodeCabang, NamaCabang) 13. Jabatan (KodeJabatan, NamaJabatan) 14. Absensi (KodeKelas, TanggalAbsen, Tahun, Bulan, Pertemuan, WaktuMulai, WaktuSelesai, StatusAbsensi) 15. JadwalMengajar(KodeJadwal,KodeGuru,KodeCabang) 16. JadwalMengajarDetail (KodeJadwal, Hari, WaktuMulai, WaktuSelesai) 17. PenggunaanRuang (KodeRuang, KodeKelas, Hari, WaktuMulai, WaktuAkhir) 18. RuangJurusan (KodeRuang, KodeJurusan) 19. GuruLevel (KodeGuru, KodeLevel) 20. LevelCabang (KodeLevel, KodeCabang) 21. TeleponMurid (KodeMurid, Telepon) 22. HandphoneMurid (KodeMurid, Handphone) 23. ContactNoAyahMurid (KodeMurid, ContactNoAyah) 24. ContactNoIbuMurid (KodeMurid, ContactNoIbu) 25. DataSaudaraMurid (KodeMurid, NamaSaudara, BelajarMusik, Subjek, DiLMC, TempatBelajarSaudara) 26. LatarBelakangMusikMurid (KodeMurid, Instrumen, Grade, LamaBelajar, TempatBelajar, GuruPengajar) 27. AlatMusikDimilikiMurid (KodeMurid,Tipe,Merk,Seri) 28. TeleponGuru (KodeGuru, Telepon) 29. HandphoneGuru (KodeGuru, Handphone)
299 30. DataKeluargaGuru (KodeGuru, Relasi, NamaKeluarga, TempatLahir, TanggalLahir, Pekerjaan, ContactNoKeluarga) 31. LatarBelakangPendidikanGuru (KodeGuru, PendidikanFormal, NamaSekolah, Kota, Negara, Jurusan, TahunWisuda) 32. LatarBelakangMusikGuru (KodeGuru, Instrumen, Grade, LamaBelajar, TempatBelajar, GuruPengajar) 33. Penghargaan (KodeGuru, NamaPenghargaan, NamaInstitusi, TanggalPenghargaan) 34. PengalamanMengajar (KodeGuru, Mengajar, NamaInstitusi, LamaKerja) 35. TeleponKaryawan (KodeKaryawan, Telepon) 36. HandphoneKaryawan (KodeKaryawan, Handphone)
Tahap normalisasi 2NF 1. Murid (KodeMurid, NamaMurid, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, PekerjaanMurid, NamaAyah, NamaIbu, StatusSiswa, TanggalRegistrasi, KodeKaryawan, KodeCabang, Nominal, KodeKaryawanPembayaran) 2. Guru (KodeGuru, NamaGuru, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, Email, StatusNikah, KodeCabang) 3. Karyawan (KodeKaryawan, NamaKaryawan, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, KodeCabang, KodeJabatan)
300 4. Ruang (KodeRuang, NamaRuang, KodeCabang) 5. Jurusan (KodeJurusan, NamaJurusan) 6. Grade (KodeGrade, NamaGrade) 7. Level (KodeLevel, KodeJurusan, KodeGrade, Harga) 8. Kelas (KodeKelas, BulanMulai, TahunMulai, KodeGuru, KodeMurid, KodeLevel, KodeCabang) 9. PembayaranBulanan (NoBayar, TanggalBayar, Tahun, Bulan, Nominal, KodeKaryawan, KodeKelas) 10. Ujian (KodeUjian, KodeKelas, KodeRuang, TanggalUjian, WaktuMulai, WaktuAkhir, NilaiUjian, KodeKaryawan, KodeLevel) 11. PembayaranUjian (NoBayar, TanggalBayar, Nominal, KodeKaryawanPembayaran, KodeUjian) 12. Cabang (KodeCabang, NamaCabang) 13. Jabatan (KodeJabatan, NamaJabatan) 14. Absensi (KodeKelas, TanggalAbsen, Tahun, Bulan, Pertemuan, WaktuMulai, WaktuSelesai, StatusAbsensi) 15. JadwalMengajar(KodeJadwal,KodeGuru,KodeCabang) 16. JadwalMengajarDetail (KodeJadwal, Hari, WaktuMulai, WaktuSelesai) 17. PenggunaanRuang (KodeRuang, KodeKelas, Hari, WaktuMulai, WaktuAkhir) 18. RuangJurusan (KodeRuang, KodeJurusan) 19. GuruLevel (KodeGuru, KodeLevel) 20. LevelCabang (KodeLevel, KodeCabang) 21. TeleponMurid (KodeMurid, Telepon)
301 22. HandphoneMurid (KodeMurid, Handphone) 23. ContactNoAyahMurid (KodeMurid, ContactNoAyah) 24. ContactNoIbuMurid (KodeMurid, ContactNoIbu) 25. DataSaudaraMurid (KodeMurid, NamaSaudara, BelajarMusik, Subjek, DiLMC, TempatBelajarSaudara) 26. LatarBelakangMusikMurid (KodeMurid, Instrumen, Grade, LamaBelajar, TempatBelajar, GuruPengajar) 27. AlatMusikDimilikiMurid (KodeMurid,Tipe,Merk,Seri) 28. TeleponGuru (KodeGuru, Telepon) 29. HandphoneGuru (KodeGuru, Handphone) 30. DataKeluargaGuru (KodeGuru, Relasi, NamaKeluarga, TempatLahir, TanggalLahir, Pekerjaan, ContactNoKeluarga) 31. LatarBelakangPendidikanGuru (KodeGuru, PendidikanFormal, NamaSekolah, Kota, Negara, Jurusan, TahunWisuda) 32. LatarBelakangMusikGuru (KodeGuru, Instrumen, Grade, LamaBelajar, TempatBelajar, GuruPengajar) 33. Penghargaan (KodeGuru, NamaPenghargaan, NamaInstitusi, TanggalPenghargaan) 34. PengalamanMengajar (KodeGuru, Mengajar, NamaInstitusi, LamaKerja) 35. TeleponKaryawan (KodeKaryawan, Telepon) 36. HandphoneKaryawan (KodeKaryawan, Handphone)
302 Tahap normalisasi 3NF 1. Murid (KodeMurid, NamaMurid, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, PekerjaanMurid, NamaAyah, NamaIbu, StatusSiswa, TanggalRegistrasi, KodeKaryawan, KodeCabang, Nominal, KodeKaryawanPembayaran) 2. Guru (KodeGuru, NamaGuru, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, Email, StatusNikah, KodeCabang) 3. Karyawan (KodeKaryawan, NamaKaryawan, TempatLahir, TanggalLahir, JenisKelamin, Kewarganegaraan, Agama, Alamat, Kota, KodePos, KodeCabang, KodeJabatan) 4. Ruang (KodeRuang, NamaRuang, KodeCabang) 5. Jurusan (KodeJurusan, NamaJurusan) 6. Grade (KodeGrade, NamaGrade) 7. Level (KodeLevel, KodeJurusan, KodeGrade, Harga) 8. Kelas (KodeKelas, BulanMulai, TahunMulai, KodeGuru, KodeMurid, KodeLevel, KodeCabang) 9. PembayaranBulanan (NoBayar, TanggalBayar, Tahun, Bulan, Nominal, KodeKaryawan, KodeKelas) 10. Ujian (KodeUjian, KodeKelas, KodeRuang, TanggalUjian, WaktuMulai, WaktuAkhir, NilaiUjian, KodeKaryawan, KodeLevel) 11. PembayaranUjian (NoBayar, TanggalBayar, Nominal, KodeKaryawanPembayaran, KodeUjian)
303 12. Cabang (KodeCabang, NamaCabang) 13. Jabatan (KodeJabatan, NamaJabatan) 14. Absensi (KodeKelas, TanggalAbsen, Tahun, Bulan, Pertemuan, WaktuMulai, WaktuSelesai, StatusAbsensi) 15. JadwalMengajar(KodeJadwal,KodeGuru,KodeCabang) 16. JadwalMengajarDetail (KodeJadwal, Hari, WaktuMulai, WaktuSelesai) 17. PenggunaanRuang (KodeRuang, KodeKelas, Hari, WaktuMulai, WaktuAkhir) 18. RuangJurusan (KodeRuang, KodeJurusan) 19. GuruLevel (KodeGuru, KodeLevel) 20. LevelCabang (KodeLevel, KodeCabang) 21. TeleponMurid (KodeMurid, Telepon) 22. HandphoneMurid (KodeMurid, Handphone) 23. ContactNoAyahMurid (KodeMurid, ContactNoAyah) 24. ContactNoIbuMurid (KodeMurid, ContactNoIbu) 25. DataSaudaraMurid (KodeMurid, NamaSaudara, BelajarMusik, Subjek, DiLMC, TempatBelajarSaudara) 26. LatarBelakangMusikMurid (KodeMurid, Instrumen, Grade, LamaBelajar, TempatBelajar, GuruPengajar) 27. AlatMusikDimilikiMurid (KodeMurid,Tipe,Merk,Seri) 28. TeleponGuru (KodeGuru, Telepon) 29. HandphoneGuru (KodeGuru, Handphone) 30. DataKeluargaGuru (KodeGuru, Relasi, NamaKeluarga, TempatLahir, TanggalLahir, Pekerjaan, ContactNoKeluarga)
304 31. LatarBelakangPendidikanGuru (KodeGuru, PendidikanFormal, NamaSekolah, Kota, Negara, Jurusan, TahunWisuda) 32. LatarBelakangMusikGuru (KodeGuru, Instrumen, Grade, LamaBelajar, TempatBelajar, GuruPengajar) 33. Penghargaan (KodeGuru, NamaPenghargaan, NamaInstitusi, TanggalPenghargaan) 34. PengalamanMengajar (KodeGuru, Mengajar, NamaInstitusi, LamaKerja) 35. TeleponKaryawan (KodeKaryawan, Telepon) 36. HandphoneKaryawan (KodeKaryawan, Handphone)