246 Lampiran 1 Implementasi Struktur Tabel CREATE DATABE Cantata GO USE Cantata GO EXEC sp_addtype KodeMurid, CHAR(6 EXEC sp_addtype KodeGuru, CHAR(11 EXEC sp_addtype KodeKaryawan, CHAR(3 EXEC sp_addtype KodeRuang, CHAR(2 EXEC sp_addtype KodeJurusan, CHAR(2 EXEC sp_addtype KodeGrade, CHAR(2 EXEC sp_addtype KodeLevel, CHAR(3 EXEC sp_addtype KodeKelas, CHAR(13 EXEC sp_addtype KodeUjian, CHAR(6 EXEC sp_addtype KodeJadwal, int EXEC sp_addtype NoBayarUjian, CHAR(6 EXEC sp_addtype NoBayarPembayaranBulanan, CHAR(7 EXEC sp_addtype KodeCabang, CHAR(2 EXEC sp_addtype KodeJabatan, CHAR(2 EXEC sp_addtype Nama, VARCHAR(30 EXEC sp_addtype TempatLahir, VARCHAR(30 EXEC sp_addtype Alamat, VARCHAR(70 EXEC sp_addtype Kota, VARCHAR(15 EXEC sp_addtype KodePos, CHAR(5 EXEC sp_addtype JenisKelamin, CHAR(1 EXEC sp_addtype Kewarganegaraan, CHAR(3 EXEC sp_addtype Agama, CHAR(1 EXEC sp_addtype PekerjaanMurid, CHAR(1 EXEC sp_addtype TeleponHandphone, VARCHAR(15 EXEC sp_addtype YaTidak, CHAR(1 EXEC sp_addtype StatusSiswa, CHAR(1 EXEC sp_addtype Email, VARCHAR(30 EXEC sp_addtype StatusNikah, CHAR(1 EXEC sp_addtype Tahun, smallint EXEC sp_addtype Bulan, tinyint EXEC sp_addtype Pertemuan, tinyint EXEC sp_addtype Instrumen, VARCHAR(15 EXEC sp_addtype Grade, VARCHAR(5 EXEC sp_addtype LamaTahun, tinyint EXEC sp_addtype TempatBelajar, VARCHAR(20 EXEC sp_addtype Waktu, CHAR(4 EXEC sp_addtype Nilai, tinyint EXEC sp_addtype Hari, CHAR(1 EXEC sp_addtype StatusAbsensi, CHAR(1 EXEC sp_addtype Tanggal, datetime EXEC sp_addtype NamaRuang, VARCHAR(15 EXEC sp_addtype NamaJurusan, VARCHAR(10 EXEC sp_addtype NamaCabang, VARCHAR(20 EXEC sp_addtype NamaJabatan, VARCHAR(35 EXEC sp_addtype Merk, VARCHAR(15 EXEC sp_addtype Seri, VARCHAR(5 EXEC sp_addtype Relasi, VARCHAR(10 EXEC sp_addtype Pekerjaan, VARCHAR(25
247 EXEC sp_addtype PendidikanFormal, VARCHAR(15 EXEC sp_addtype NamaSekolah, VARCHAR(25 EXEC sp_addtype KotaSekolah, VARCHAR(20 EXEC sp_addtype NegaraSekolah, VARCHAR(20 EXEC sp_addtype NamaPenghargaan, VARCHAR(30 CREATE RULE KodeMurid_Rule ((LEFT (@kode, 2 BETWEEN 00 AND 99 AND (RIGHT (@kode, 4 BETWEEN 0001 AND 9999 CREATE RULE KodeGuru_Rule ((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 (@kode BETWEEN 000 AND 999 CREATE RULE KodeRuang_Rule (@kode LIKE [A-Z][0-9] CREATE RULE KodeJurusan_Rule (@kode LIKE [A-Z][A-Z] CREATE RULE KodeGrade_Rule (@kode LIKE [A-Z][0-9] CREATE RULE KodeLevel_Rule (@kode BETWEEN 001 AND 999 CREATE RULE KodeKelas_Rule (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 (LEFT(@kode,2 BETWEEN 00 AND 99 AND (RIGHT(@kode,4 BETWEEN 0001 AND 9999 CREATE RULE NoBayarUjian_Rule (LEFT(@kode,2 BETWEEN 00 AND 99 AND (RIGHT(@kode,4 BETWEEN 0001 AND 9999
248 CREATE RULE NoBayarPembayaranBulanan_Rule (LEFT(@kode,2 BETWEEN 00 AND 99 AND (RIGHT(@kode,5 BETWEEN 00001 AND 99999 CREATE RULE KodeCabang_Rule (@kode LIKE [A-Z][A-Z] CREATE RULE KodePos_Rule (@value LIKE [0-9][0-9][0-9][0-9][0-9] CREATE RULE JenisKelamin_Rule (@value IN ( P, W CREATE RULE Kewarganegaraan_Rule (@value IN ( WNI, WNA CREATE RULE Agama_Rule (@value IN ( I, K, X, B, H, L CREATE RULE PekerjaanMurid_Rule (@value IN ( A, B, C, D CREATE RULE YaTidak_Rule (@value IN ( Y, T CREATE RULE StatusSiswa_Rule (@value IN ( B, C, H, A CREATE RULE StatusNikah_Rule (@value IN ( B, M, C, D CREATE RULE Waktu_Rule ((LEFT(@value,2 BETWEEN 00 AND 23 AND (RIGHT(@value,2 BETWEEN 00 AND 59 CREATE RULE Nilai_Rule (@value >= 0 AND @value <= 100 CREATE RULE Hari_Rule (@value LIKE [1-7]
249 CREATE RULE StatusAbsensi_Rule (@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 CCADE ON DELETE NO ACTION, Foreign Key (kodegrade references Grade (kodegrade ON UPDATE CCADE 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 CCADE 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 CCADE 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 CCADE ON DELETE CCADE, Foreign Key (kodejurusan references Jurusan (kodejurusan ON UPDATE CCADE ON DELETE CCADE CREATE TABLE GuruLevel ( kodeguru KodeGuru NOT NULL, kodelevel KodeLevel NOT NULL, Primary Key (kodeguru, kodelevel, Foreign Key (kodeguru references Guru (kodeguru ON UPDATE CCADE ON DELETE CCADE, Foreign Key (kodelevel references Level (kodelevel ON UPDATE CCADE ON DELETE CCADE CREATE TABLE LevelCabang ( kodelevel KodeLevel NOT NULL, kodecabang KodeCabang NOT NULL, Primary Key (kodelevel, kodecabang, Foreign Key (kodelevel references Level (kodelevel ON UPDATE CCADE ON DELETE CCADE, Foreign Key (kodecabang references Cabang (kodecabang ON UPDATE CCADE ON DELETE CCADE 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 CCADE ON DELETE NO ACTION Foreign Key (KodeKaryawanPembayaran references Karyawan (KodeKaryawan ON UPDATE CCADE 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 CCADE ON DELETE NO ACTION, Foreign Key (kodejabatan references Jabatan (kodejabatan ON UPDATE CCADE 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 CCADE ON DELETE CCADE, Foreign Key (KodeMurid references Murid (KodeMurid ON UPDATE CCADE ON DELETE CCADE, Foreign Key (kodelevel references Level (kodelevel ON UPDATE CCADE ON DELETE CCADE, Foreign Key (kodecabang references Cabang (kodecabang ON UPDATE CCADE ON DELETE CCADE 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 CCADE ON DELETE NO ACTION, Foreign Key (kodekelas references Kelas (kodekelas ON UPDATE CCADE 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 CCADE ON DELETE NO ACTION, Foreign Key (kodekelas references Kelas (kodekelas ON UPDATE CCADE ON DELETE NO ACTION, Foreign Key (koderuang references Ruang (koderuang ON UPDATE CCADE ON DELETE NO ACTION, Foreign Key (kodelevel references Level (kodelevel ON UPDATE CCADE 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 CCADE ON DELETE NO ACTION, Foreign Key (kodeujian references Ujian (kodeujian ON UPDATE CCADE 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 CCADE ON DELETE CCADE, Foreign Key (kodecabang references Cabang (kodecabang ON UPDATE CCADE ON DELETE CCADE 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 CCADE ON DELETE CCADE 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 CCADE 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 CCADE ON DELETE NO ACTION, Foreign Key (kodekelas references Kelas (kodekelas ON UPDATE CCADE 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 CCADE ON DELETE CCADE CREATE TABLE HandphoneMurid ( kodemurid KodeMurid NOT NULL, handphone TeleponHandphone NOT NULL, Primary Key (kodemurid, handphone, Foreign Key (kodemurid references Murid (kodemurid ON UPDATE CCADE ON DELETE CCADE CREATE TABLE ContactNoAyahMurid ( kodemurid KodeMurid NOT NULL, contactnoayah TeleponHandphone NOT NULL, Primary Key (kodemurid, contactnoayah, Foreign Key (kodemurid references Murid (kodemurid ON UPDATE CCADE ON DELETE CCADE
255 CREATE TABLE ContactNoIbuMurid ( kodemurid KodeMurid NOT NULL, contactnoibu TeleponHandphone NOT NULL, Primary Key (kodemurid, contactnoibu, Foreign Key (kodemurid references Murid (kodemurid ON UPDATE CCADE ON DELETE CCADE 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 CCADE ON DELETE CCADE 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 CCADE ON DELETE CCADE 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 CCADE ON DELETE CCADE CREATE TABLE TeleponGuru ( kodeguru KodeGuru NOT NULL, telepon TeleponHandphone NOT NULL, Primary Key (kodeguru, telepon, Foreign Key (kodeguru references Guru (kodeguru ON UPDATE CCADE ON DELETE CCADE CREATE TABLE HandphoneGuru ( kodeguru KodeGuru NOT NULL, handphone TeleponHandphone NOT NULL, Primary Key (kodeguru, handphone, Foreign Key (kodeguru references Guru (kodeguru ON UPDATE CCADE ON DELETE CCADE
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 CCADE ON DELETE CCADE 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 CCADE ON DELETE CCADE 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 CCADE ON DELETE CCADE 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 CCADE 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 CCADE ON DELETE CCADE CREATE TABLE TeleponKaryawan ( kodekaryawan KodeKaryawan NOT NULL, telepon TeleponHandphone NOT NULL, Primary Key (kodekaryawan, telepon, Foreign Key (kodekaryawan references Karyawan (kodekaryawan ON UPDATE CCADE ON DELETE CCADE CREATE TABLE HandphoneKaryawan ( kodekaryawan KodeKaryawan NOT NULL, handphone TeleponHandphone NOT NULL, Primary Key (kodekaryawan, handphone, Foreign Key (kodekaryawan references Karyawan (kodekaryawan ON UPDATE CCADE ON DELETE CCADE
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 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 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 IF NOT EXISTS ( SELECT * FROM inserted i LEFT JOIN Kelas k ON i.kodekelas=k.kodekelas LEFT JOIN PenggunaanRuang p ON k.kodekelas=p.kodekelas 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 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 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 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 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 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 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 sp_addrole Principal EXEC sp_addrole Management EXEC sp_addrole KaBagAdmin EXEC sp_addrole AdminManagement EXEC sp_addrole AdminEducation EXEC sp_addrole KaCab EXEC sp_addrole 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
Form Input Data Pengajar 286
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