Diperbarui:22 Januari 2018 oleh Richard Holowczak
Materi berikut mendokumentasikan desain dan pengembangan aplikasi database untuk mendukung salon rambut kecil. Proyek dimulai dengan deskripsi bisnis dan dilanjutkan melalui pemodelan konseptual (ER), pemodelan logis (Relasional), pemodelan fisik dan akhirnya implementasi aplikasi database. Catatan (Komentar) disediakan di akhir setiap bagian untuk menjelaskan beberapa fitur khusus dari langkah-langkah yang dilakukan.
Daftar Isi
Aku. Skenario Bisnis
II. Model ER menggunakan Notasi UML
III. Konversi ke Model Relasional
IV. Normalisasi
V. Membuat Skema Database dengan SQL
VI. Aplikasi Basis Data
VII. Kesimpulan
.
Aku. Skenario Bisnis
Perusahaan kami telah memiliki dan mengoperasikan salon rambut dan kuku di tengah kota Manhattan selama 7 tahun. Kami telah menggunakan spreadsheet dan buku catatan kertas untuk melacak pelanggan, janji temu, dan pembayaran. Kami ingin mengganti metode manual pelacakan bisnis ini dengan database.
Dalam bisnis kami, Pelanggan membuat Janji dengan penata rambut favorit mereka (orang yang memotong dan menata rambut pelanggan) atau karyawan lain dan dapat menikmati sejumlah Layanan seperti potong/styling rambut dasar, warna rambut, highlight, perm, facial, manikur, pedikur, dll. Kita perlu melacak bahan (sampo, warna rambut) dan waktu yang dibutuhkan untuk menyelesaikan setiap layanan. Meskipun setiap layanan memiliki harga standar, promosi dan faktor lainnya dapat memengaruhi harga sebenarnya yang diberikan kepada Pelanggan untuk layanan yang diberikan.
Kita juga perlu melacak Karyawan kita termasuk alamat rumah mereka, informasi kontak, dan tingkat pembayaran. Kami perlu melacak informasi kontak setiap Pelanggan serta jenis kelamin mereka. Untuk Janji Temu, kami perlu mengetahui tanggal dan waktu janji temu dan untuk pelanggan mana janji temu tersebut.
Komentar
Berdasarkan uraian di atas, buat model Entity Relationship menggunakan notasi UML yang akan menangkap semua kebutuhan data bisnis.
II. Model ER menggunakan Notasi UML
Berdasarkan uraian di atas, kami mengembangkan model Entity Relationship berikut menggunakan notasi UML.
Komentar
Apa yang kami sukai dari model ini:
- Semua garis hubungan berada dalam posisi horizontal atau vertikal. Tidak ada garis yang dilintasi.
- Nama atribut dieja tanpa spasi pada namanya. Tidak ada singkatan yang digunakan.
- Setiap hubungan memiliki dua frasa yang darinya kita dapat membuat kalimat hubungan (lihat bagian berikutnya).
- Diagram juga memiliki “legenda” di pojok kanan atas sehingga kita dapat mengetahui apa yang diwakili diagram dan siapa yang terakhir memodifikasi diagram.
Kalimat Hubungan
Satu Pelanggan mungkin membuat satu atau beberapa Janji Temu
Satu Janji Temu harus reservasi untuk satu dan hanya satu Pelanggan
Satu Layanan Salon mungkin layanan yang diberikan sebagai satu atau beberapa ServiceRendered
Satu Layanan Diberikan harus rendering dari satu dan hanya satu SalonService
Satu Karyawan mungkin rendering satu atau lebih ServiceRendered
Satu Layanan Diberikan harus diberikan oleh satu dan hanya satu Karyawan
Satu Janji Temu mungkin reservasi untuk menyediakan satu atau lebih ServiceRendered
Satu Layanan Diberikan harus layanan tertentu yang diberikan selama satu dan hanya satu Janji Temu
Komentar
Kalimat hubungan harus masuk akal. Dalam contoh ini, frasa kata kerja digarisbawahi. Nama entitas dicetak tebal. Kardinalitas minimum (mungkin untuk 0 dan harus untuk 1) ditulis miring. Kardinalitas maksimum ditulis sebagai “satu atau lebih” untuk * dan “satu dan hanya satu” untuk 1.
Dengan model ER selesai, kami melanjutkan ke langkah berikutnya – untuk mengubah model ER konseptual menjadi model relasional logis.
III. Konversi ke Model Relasional
Langkah selanjutnya adalah Mengkonversi diagram Entity Relationship menjadi Model Relasional. Selama langkah ini, Identifier dalam Entitas menjadi Kunci dalam Relasi. Hubungan Satu-ke-Banyak menghasilkan kunci asing yang disalin dari sisi Satu ke sisi Banyak hubungan.
Pelanggan ( ID Pelanggan (kunci), Nama Depan, Nama Belakang, Nomor Telepon, Jalan, Kota, Negara Bagian, Kode Pos )
Layanan Salon ( ServiceID (kunci), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials )
Karyawan ( EmployeeID (key), FirstName, LastName, Street, City, State, ZipCode, PayRate )
Janji Temu ( AppointmentID (key), AppointmentDate, AppotinmentTime, CustomerID (fk) )
Layanan Diberikan ( AppointmentID (fk)(key), LineItemNumber(key), ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk))
Ini adalah "kumpulan hubungan awal".
Komentar
- Perhatikan bahwa ServiceRendered entitas dari model ER adalah ID-Dependent yang berarti memerlukan atribut selain LineItemNumber untuk membentuk kunci komposit.
- Kunci ditunjukkan dengan penunjukan (kunci) dan kunci asing ditunjukkan dengan penunjukan (fk).
Langkah selanjutnya adalah menormalkan himpunan relasi awal.
IV. Normalisasi
Langkah selanjutnya adalah Menormalkan Hubungan.
Langkah-langkah yang harus diikuti untuk setiap relasi adalah:
- Tulis relasi termasuk semua nama atribut. Tunjukkan kunci dan kunci asing.
- Berikan beberapa contoh data untuk relasi tersebut.
- Nyatakan Kunci untuk relasi dan tuliskan semua Ketergantungan Fungsional .
- Pelajari definisi setiap bentuk normal yang dimulai dengan 1NF dan naik ke BCNF (atau 3NF tergantung pada persyaratan proyek Anda).
- Jika suatu relasi memenuhi definisi bentuk normal, pindah ke bentuk normal berikutnya yang lebih tinggi.
- Jika suatu relasi gagal memenuhi definisi bentuk normal (misalnya, mengandung dependensi kunci parsial atau mengandung ketergantungan transitif), maka bagi relasi menjadi dua relasi baru.
Mulailah proses normalisasi dari awal dengan masing-masing dari dua hubungan baru ini.
Hubungan Pelanggan
Pelanggan ( CustomerID (kunci) , Nama Depan, Nama Belakang, CustPhone, Jalan, Kota, Negara Bagian, Kode Pos, Jenis Kelamin )
Contoh Data
ID Pelanggan | Nama Depan | Nama Belakang | Nomor Telepon | Jalan | Kota | Negara | Kode Pos | Jenis Kelamin |
---|---|---|---|---|---|---|---|---|
C101 | Elia | Fawcett | 201-222-2222 | 8989 Smith Rd | Garfield | NJ | 07026 | B |
C102 | Ishwarya | Robert | 201-222-3333 | 65 Jalan Harapan | Garfield | NJ | 07026 | M |
C103 | Frederic | Fawcett | 201-222-2222 | 8989 Smith Rd | Garfield | NJ | 07026 | M |
C104 | Goldie | Montand | 201-222-4321 | 5235 Kayu Besi Ln | Garfield | NJ | 07026 | B |
C105 | Dheeraj | Alexander | 201-222-4545 | 666 22nd Ave | Bergenfield | NJ | 07621 | M |
C106 | Josie | Davis | 201-333-6789 | 4200 Bluejay Ave | Bergenfield | NJ | 07621 | B |
C107 | Faye | Glenn | 201-333-4242 | 1522 Jalan Utama | Taman Tebing | NJ | 07010 | B |
C108 | Lauren | Hershey | 2014444-1313 | 2360 Maxon Rd | Englewood | NJ | 07631 | B |
Kunci:ID Pelanggan
FD1:ID Pelanggan -> Nama Depan, Nama Belakang, Nomor Telepon, Jalan, Kota, Negara Bagian, Kode Pos, Jenis Kelamin
FD2:Kode Pos -> Kota, Negara Bagian
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Ada ketergantungan transitif:CustomerID -> ZipCode dan ZipCode -> Kota, Negara Bagian
Solusi:Pisahkan relasi Pelanggan menjadi dua relasi baru bernama CustomerData dan ZipCodes:
Data Pelanggan (ID Pelanggan (kunci), Nama Depan, Nama Belakang, CustPhone, Jalan, Kode Pos (fk), Jenis Kelamin )
Kunci:ID Pelanggan
FD1:ID Pelanggan -> Nama Depan, Nama Belakang, Nomor Telepon, Jalan, Kode Pos (fk), Jenis Kelamin
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Tidak ada dependensi Transitif
BCNF:Semua determinan adalah kunci kandidat
ZipCodes( ZipCode (kunci), Kota, Negara Bagian)
Kunci:Kode Pos
FD1:Kode Pos -> Kota, Negara Bagian
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Tidak ada dependensi Transitif
BCNF:Semua determinan adalah kunci kandidat
Hubungan Layanan Salon
SalonService ( ServiceID (kunci), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials )
Contoh Data:
ServiceID | DurasiLayanan | HargaLayanan | Bahan Layanan | |
---|---|---|---|---|
SV101 | Potongan Rambut Pria | 20 | 22.00 | Tidak ada |
SV102 | Potongan Rambut Wanita | 30 | 32.00 | Tidak ada |
SV103 | Potongan Rambut Anak | 20 | 15.00 | Tidak ada |
SV104 | Warna Rambut Wanita | 60 | 76.00 | Warna, Reagen, Sarung Tangan, Kuas Reagen, Foil |
SV105 | Gaya Rambut Wanita | 45 | 56.00 | Sampo, Kondisioner |
SV106 | Gaya Rambut Pria | 45 | 46.00 | Sampo, Kondisioner |
Kunci:ServiceID
FD1:ServiceID -> ServiceName, ServiceDuration, ServicePrice, ServiceMaterials
1NF:ServiceMaterials dapat diperlakukan sebagai atribut multi-nilai. Dalam hal ini SalonService tidak dalam 1NF.
Solusi:Pisahkan ServiceMaterials menjadi relasi terpisah.
Untuk contoh ini, bagaimanapun, kami akan menyimpan ServiceMaterials sebagai atribut dari relasi SalonService.
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Tidak ada dependensi Transitif
BCNF:Semua determinan adalah kunci kandidat
Hubungan Karyawan
Karyawan( EmployeeID (key), FirstName, LastName, Street, City, State, ZipCode, PayRate )
KaryawanID | Nama Depan | Nama Belakang | Jalan | Kota | Negara | Kode Pos | PayRate |
---|---|---|---|---|---|---|---|
E300 | Kegembiraan | Aveda | 46 Easton Ave. | Garfield | NJ | 07026 | 18.00 |
E400 | Geraldo | Geraldo | 12 Fortis Blvd. Tepat. 2A | Garfield | NJ | 07026 | 22.00 |
E500 | Koy | Petruzzio | 70 Wilard St. | Garfield | NJ | 07026 | 20.00 |
E600 | Tanah | Monroe | 73 Teras Holly | Taman Tebing | NJ | 07010 | 18.00 |
E700 | Tetap | Reese | 2 Tempat Lincoln | Taman Tebing | NJ | 07010 | 23.00 |
E800 | Musim Dingin | Pewarna Kulit | 215 Elm Ave | Teaneck | NJ | 07665 | 23.00 |
Kunci:EmployeeID
FD1:EmployeeID -> FirstName, LastName, Street, City, State, ZipCode, PayRate
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Ada ketergantungan transitif:EmployeeID -> ZipCode dan ZipCode -> Kota, Negara Bagian
Solusi:Pisahkan relasi Pelanggan menjadi dua relasi baru bernama EmployeeData dan ZipCodes:
EmployeeData(EmployeeID (key), FirstName, LastName, Street, ZipCode (fk), PayRate )
Kunci:EmployeeID
FD1:EmployeeID -> FirstName, LastName, Street, ZipCode (fk), PayRate
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Tidak ada ketergantungan transitif
BCNF:Semua determinan adalah kunci kandidat
Catatan:Kami sudah memiliki relasi ZipCodes sejak relasi Pelanggan dipecah. Jadi kami menggunakan kembali relasi ZipCodes tersebut. Tidak perlu membuat relasi ZipCodes kedua.
Hubungan Janji Temu
Janji Janji ( AppointmentID (key), AppointmentDate, AppotinmentTime, CustomerID (fk) )
Contoh Data:
AppointmentID | Tanggal Janji | Waktu Janji Temu | ID Pelanggan |
---|---|---|---|
A400 | 22/10/2017 | 11:00:00 | C101 |
A401 | 11/6/2017 | 12:45:00 | C102 |
A402 | 12/7/2017 | 2:00:00 WIB | C106 |
A403 | 18/12/2017 | 15:30:00 | C106 |
A404 | 21/12/2017 | 11:30:00 | C108 |
A405 | 31/12/2017 | 10:00:00 | C107 |
A406 | 1/11/2018 | 15:15:00 | C103 |
A407 | 1/12/2018 | 14:30:00 | C104 |
A408 | 22/1/2018 | 4:00:00 WIB | C105 |
Kunci:ID Janji Temu
FD1:AppointmentID -> AppointmentDate, AppotinmentTime, CustomerID (fk)
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Tidak ada dependensi Transitif
BCNF:Semua determinan adalah kunci kandidat
Relasi ServiceRendered
ServiceRendered ( AppointmentID (fk)(key), LineItemNumber(key), ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk) )
Contoh Data:
AppointmentID | LineItemNumber | ID Layanan | HargaPerpanjanganLayanan | ID Karyawan |
---|---|---|---|---|
A400 | 1 | SV104 | 75,00 | E400 |
A400 | 2 | SV102 | 25.00 | E400 |
A401 | 1 | SV101 | 22.00 | E500 |
A402 | 1 | SV104 | 75,00 | E600 |
A402 | 2 | SV102 | 30.00 | E800 |
A403 | 1 | SV105 | 50,00 | E300 |
A404 | 1 | SV105 | 55,00 | E300 |
A405 | 1 | SV102 | 30.00 | E700 |
A405 | 2 | SV104 | 70.00 | E700 |
A405 | 3 | SV105 | 50,00 | E700 |
Kunci:AppointmentID, LineItemNumber
FD1:AppointmentID, LineItemNumber -> ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk)
1NF:Memenuhi definisi relasi
2NF:Tidak ada ketergantungan Key parsial
3NF:Tidak ada dependensi Transitif
BCNF:Semua determinan adalah kunci kandidat
Set Hubungan Terakhir
Pelanggan ( ID Pelanggan (kunci) , Nama Depan, Nama Belakang, Nomor Telepon, Jalan, Kode Pos (fk), Jenis Kelamin )
Kode Pos (Kode Pos (kunci), Kota, Negara Bagian)
Layanan Salon ( ServiceID (kunci), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials )
Karyawan ( EmployeeID (key), FirstName, LastName, Street, ZipCode (fk), PayRate )
Janji Temu ( AppointmentID (key), AppointmentDate, AppotinmentTime, CustomerID (fk) )
Layanan Diberikan ( AppointmentID (fk)(key), LineItemNumber(key), ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk))
Komentar
- Perhatikan bahwa hanya satu relasi ZipCodes yang diperlukan. Ini dibagikan dengan hubungan Pelanggan dan Karyawan.
- Seperti disebutkan sebelumnya, atribut ServiceMaterials belum dinormalisasi dalam contoh ini. Mungkin bisa dilakukan di masa depan tugas atau peningkatan model.
Sekarang setelah relasi dinormalisasi, skema dapat dibuat dalam sistem manajemen basis data menggunakan bahasa kueri terstruktur (SQL).
V. Membuat Skema Basis Data dengan Bahasa Query Terstruktur
Buat tabel dalam database untuk masing-masing relasi di set akhir relasi.
Kode SQL berikut membuat enam tabel dan menambahkan batasan PRIMARY KEY ke masing-masing tabel:
CREATE TABLE ZipCodes( zipcode VARCHAR(12) NOT NULL, city VARCHAR(36), state VARCHAR(4), CONSTRAINT pk_zipcodes PRIMARY KEY (zipcode))CREATE TABLE Customer( CustomerID VARCHAR(10) NOT NULL, FirstName VARCHAR( 35), LastName VARCHAR(35), PhoneNumber VARCHAR(15), Street VARCHAR(35), ZipCode VARCHAR(12), Gender VARCHAR(2), CONSTRAINT pk_customer PRIMARY KEY (CustomerID))CREATE TABLE Appointment( AppointmentID VARCHAR(10) NOT NULL, AppointmentDateTime DATE, CustomerID VARCHAR(10) NOT NULL, CONSTRAINT pk_appointment PRIMARY KEY (AppointmentID))CREATE TABLE SalonService( ServiceID VARCHAR(10) NOT NULL, ServiceName VARCHAR(35), ServiceDuration INTEGER, ServiceHARMaterials NUMBER ), CONSTRAINT pk_salonservice PRIMARY KEY (ServiceID))CREATE TABLE Employee ( EmployeeID VARCHAR(10) NOT N ULL, FirstName VARCHAR(35), LastName VARCHAR(25), Street VARCHAR(45), ZipCode VARCHAR(12), PayRate NUMBER, CONSTRAINT pk_employee PRIMARY KEY (EmployeeID))CREATE TABLE ServiceRendered ( AppointmentID VARCHAR(10) BUKAN NULL, INTEGER NOT NULL, ServiceID VARCHAR(10) NOT NULL, ServiceExtendedPrice NUMBER, EmployeeID VARCHAR(10) NOT NULL, CONSTRAINT pk_ServiceRendered PRIMARY KEY (AppointmentID, LineItemNumber))
Menambahkan Kunci Asing
Kode SQL berikut menambahkan batasan FOREIGN KEY untuk menghubungkan tabel bersama:
ALTER TABLE Pelanggan TAMBAHKAN KONSTRAIN fk_customer_zipcodes KUNCI ASING (Kode Pos) REFERENSI Kode Pos (Kode Pos)ALTER TABLE Karyawan TAMBAHKAN KONSTRAINT fk_employee_zipcodes KUNCI ASING (Kode Pos) REFERENCES REFERENCES ZipCodespointer FORID_Customer Appointment_Kode Pos Pelanggan ) Alter Table Servicerendered Add Constraint fk_servicerendered_service Kunci asing (serviceId) Referensi salonservice (serviceId) mengubah tabel servicerender add Constraint fk_servicerendered_employee Kunci Asing (Pegawai Referensi) REFERENSI PEKERJAAN (PEKERJAAN) PERLANJANGAN TABEL PERVICERENDERED PEMBAYARAN ADD PROGISIONEDED) /pra>Komentar tentang SQL:
- Kebanyakan DBMS akan menyimpan DATE dan TIME di kolom yang sama. Jadi AppointmentDate dan AppointmentTime digabungkan menjadi satu kolom di database bernama AppointmentDateTime
- Kunci dan kunci Asing harus memiliki nama dan tipe data yang sama persis. Misalnya, Key CustomerID adalah VARCHAR(10) di tabel Customer dan juga VARCHAR(10) di tabel Appointment.
- Pembatasan diberi nama yang bermakna seperti pk_customer untuk kunci utama dan fk_customer_zipcodes untuk kunci asing.
- Kolom seperti Nomor Telepon dan Kode Pos harus menggunakan tipe data VARCHAR. Jika tipe data NUMBER atau INTEGER digunakan, nol di depan akan hilang.
Setelah membuat tabel dan menambahkan batasan kunci asing, skema database sekarang terlihat seperti berikut:
Tampilan Hubungan
Menggunakan Tampilan Hubungan di bawah Alat Database, kita dapat melihat hubungan (kunci asing) antar tabel:
Menambahkan Data ke Tabel menggunakan Pernyataan SQL INSERT
INSERT INTO ZipCodes VALUES ('07026', 'Garfield', 'NJ');INSERT INTO ZipCodes VALUES ('07621', 'Bergenfield', 'NJ');INSERT INTO ZipCodes NILAI ('07010', 'Cliffside Park', 'NJ');INSERT INTO ZipCodes VALUES ('07631', 'Englewood', 'NJ');INSERT INTO ZipCodes VALUES ('07665', 'Teaneck', 'NJ');INSERT INTO Customer VALUES (' C101', 'Elia', 'Fawcett', '201-222-2222', '8989 Smith Rd', '07026', 'F');MASUKKAN KE NILAI Pelanggan ('C102', 'Ishwarya', 'Roberts' , '201-222-3333', '65 Hope Rd', '07026', 'M');MASUKKAN KE NILAI Pelanggan ('C103', 'Frederic', 'Fawcett', '201-222-2222', ' 8989 Smith Rd', '07026', 'M');MASUKKAN KE NILAI Pelanggan ('C104', 'Goldie', 'Montand', '201-222-4321', '5235 Ironwood Ln', '07026', ' F');INSERT INTO Customer VALUES ('C105', 'Dheeraj', 'Alexander', '201-222-4545', '666 22nd Ave', '07621', 'M');INSERT INTO Customer VALUES (' C106', 'Josie', 'Davis', '201-333-6789', '4200 Bluejay Ave', '07621', 'F');MASUKKAN KE NILAI Pelanggan ('C107', 'Faye', 'Glenn' , '201-333-4242', '1 522 Main St', '071010', 'F');MASUKKAN KE NILAI Pelanggan ('C108', 'Lauren', 'Hershey', '201-444-1313', '2360 Maxon Rd', '07631', ' F');INSERT INTO SalonService VALUES ('SV101', 'Pria's Haircut', 20, 22, 'None');INSERT INTO SalonService VALUES ('SV102', 'Women's Haircut', 30, 32 , 'Tidak Ada');INSERT INTO SalonService VALUES ('SV103', 'Child Haircut', 20, 15, 'None');INSERT INTO SalonService VALUES ('SV104', 'Warna Rambut Wanita', 60, 76 , 'Warna, Reagen, Sarung Tangan, Kuas Reagen, Foil');INSERT INTO SalonService VALUES ('SV105', 'Gaya Rambut Wanita', 45, 56, 'Shampoo, Conditioner');INSERT INTO SalonService VALUES (' SV106', 'Gaya Rambut Pria', 45, 46, 'Shampoo, Kondisioner');INSERT INTO Employee VALUEs ('E300', 'Joy', 'Aveda', '46 Easton Ave.', '07026' , 18);MASUKKAN KE NILAI Karyawan ('E400', 'Geraldo', 'Geraldo', '12 Fortis Blvd. Tepat. 2A', '07026', 22);INSERT INTO Employee VALUES ('E500', 'Koy', 'Petruzzio', '70 Wilard St. ', '07026', 20);INSERT INTO Employee VALUEs ('E600', 'Landry', 'Monroe', '73 Holly Terrace', '07010', 18);INSERT INTO Employee VALUES ('E700', 'Pat', 'Reese', '2 Lincoln Place', '07010', 23);INSERT INTO Employee VALUES ('E800', 'Winter', 'Tanner', '215 Elm Ave', '07665', 23);INSERT INTO Appointment VALUES ('A400', '10/22/2017 11:00:00 AM', 'C101');MASUKKAN KE NILAI Janji Temu ('A401', '11/06/2017 12:45:00 PM', 'C102');MASUKKAN KE NILAI Janji Temu ('A402', '12/07 /2017 02:00:00 PM', 'C106');INSERT INTO Appointment VALUES ('A403', '12/18/2017 03:30:00 PM', 'C106');INSERT INTO Appointment VALUES ('A404 ', '21/12/2017 11:30:00', 'C108');MASUKKAN KE NILAI Janji Temu ('A405', '31/12/2017 10:00:00', 'C107');INSERT INTO NILAI Janji Temu ('A406', '01/11/2018 03:15:00', 'C103');MASUKKAN KE NILAI Janji Temu ('A407', '01/12/2018 02:30:00', 'C104');MASUKKAN KE NILAI Janji Temu ('A408', '0 22/2/2018 04:00:00 PM', 'C105');INSERT INTO ServiceRendered VALUES ('A400', 1, 'SV104', 75, 'E400');INSERT INTO ServiceRendered VALUES ('A400', 2 , 'SV102', 25, 'E400');INSERT INTO ServiceRendered VALUES ('A401', 1, 'SV101', 22, 'E500');INSERT INTO ServiceRendered VALUES ('A402', 1, 'SV104', 75 , 'E600');INSERT INTO ServiceRendered VALUES ('A402', 2, 'SV102', 30, 'E800');INSERT INTO ServiceRendered VALUES ('A403', 1, 'SV105', 50, 'E300'); INSERT INTO ServiceRendered VALUES ('A404', 1, 'SV105', 55, 'E300');INSERT INTO ServiceRendered VALUES ('A405', 1, 'SV102', 30, 'E700');INSERT INTO ServiceRendered VALUES (' A405', 2, 'SV104', 70, 'E700');INSERT INTO ServiceRendered VALUES ('A405', 3, 'SV105', 50, 'E700');
Komentar tentang Sampel Data
- Kami menambahkan data yang cukup untuk dapat menguji hubungan antara tabel dan memberi pengembang aplikasi sesuatu untuk dikerjakan.
- Berhati-hatilah dengan urutan penambahan data. Misalnya, semua ZipCode harus dimasukkan terlebih dahulu, sebelum Pelanggan atau Karyawan (yang keduanya menggunakan ZipCode sebagai kunci asing) dapat dimasukkan.
- Saat menambahkan data VARCHAR dengan tanda kutip yang disematkan, gunakan dua tanda kutip bersamaan. misalnya, 'Gaya Rambut Wanita'
- Pada titik ini, skema database siap bagi pengembang aplikasi untuk mulai mendesain formulir, laporan, dan kueri.
Sekarang skema database telah dibuat dan diisi dengan beberapa data sampel, aplikasi database dapat dikembangkan.
VI. Aplikasi Basis Data
Aplikasi database terdiri dari sekumpulan Formulir, Laporan, dan Kueri yang dihubungkan bersama pada Formulir Navigasi.
Form Navigasi adalah form pertama yang muncul ketika database dibuka.
Formulir Navigasi
Formulir dan laporan entri data yang berbeda dapat ditampilkan dengan mengklik pilihan di sisi kiri.
Formulir Entri Data Pelanggan
Formulir Entri Data Pelanggan digunakan untuk mencari pelanggan yang sudah ada dan untuk memasukkan informasi pelanggan baru. Bidang Kota dan Negara Bagian secara otomatis diisi dengan memilih kode pos dari Kotak Kombo. Formulir memiliki beberapa kode VBA khusus untuk mengonversi Nama Depan dan Belakang menjadi huruf besar dan untuk menghasilkan ID pelanggan baru yang unik ketika bidang ID Pelanggan kosong muncul setelah membuat rekor baru.
Formulir Entri Data Layanan Salon
Formulir Entri Data Layanan Salon digunakan untuk menanyakan, memperbarui, dan menambahkan layanan salon baru.
Formulir Entri Data Janji Temu
Formulir entri data janji temu digunakan untuk membuat janji temu baru untuk pelanggan. Seperti formulir Pelanggan, ID Janji Temu baru dapat dibuat dengan mengklik di bidang ID Janji Temu kosong setelah catatan baru dibuat. Pelanggan dapat dipilih dari kotak kombo ID Pelanggan seperti yang ditunjukkan di bawah ini:
Jika ini adalah Pelanggan baru yang membuat janji, pengguna dapat mengklik tombol Pelanggan Baru untuk membuka formulir Entri Data Pelanggan. Setelah informasi pelanggan baru disimpan, pengguna dapat kembali ke formulir Entri Data Janji Temu dan membuat janji.
Formulir Janji Temu dan Layanan
Tujuan formulir ini adalah untuk memasukkan layanan berbeda yang terkait dengan janji temu. Formulir ini juga dapat digunakan untuk membuat tagihan untuk pelanggan. Layanan dan Karyawan dapat dipilih dari kotak kombo masing-masing seperti yang ditunjukkan di bawah ini:
Laporan Total Janji Temu Pelanggan
Laporan ini memberikan ringkasan jumlah janji temu dan jumlah total yang dihabiskan oleh setiap pelanggan.
Berdasarkan kueri:
SELECT Customer.CustomerID, FirstName, LastName, SUM(q.TotalSpent) AS TotalSpent, COUNT(q.AppointmentID) AS NumberOfAppointmentsFROM Customer, Appointment, Query_Total_Spent_Each_Appointment AS qWHERE Customer.CustomerID =Appointment.CustomerID AND Appointment ID =.q. AppointmentIDGROUP BY Customer.CustomerID, FirstName, LastNameORDER BY LastName, FirstName;
Dan Kueri Total_Spent_Each_Appointment
SELECT Appointment.AppointmentID, SUM(ServiceExtendedPrice) AS TotalSpentFROM Appointment, ServiceRenderedWHERE Appointment.AppointmentID =ServiceRendered.AppointmentIDGROUP BY Appointment.AppointmentIDORDER BY Appointment.AppointmentID;
Laporan Layanan dan Diskon
Laporan ini menunjukkan setiap layanan dengan total harga layanan reguler, harga perpanjangan, dan indikasi jumlah diskon yang diterapkan pada layanan yang diberikan di masa lalu.
Berdasarkan kueri:
SELECT SalonService.ServiceID, ServiceName, SUM(ServicePrice) AS TotalServicePrice, SUM(ServiceExtendedPrice) AS TotalExtPrice, FORMAT(1.0 - (SUM(ServiceExtendedPrice) / SUM(ServicePrice)), "0,00%") SEBAGAI DiscountFROM SalonService, ServiceRenderedWHERE SalonService.ServiceID =ServiceRendered.ServiceIDGROUP OLEH SalonService.ServiceID, ServiceNameORDER OLEH SalonService.ServiceID, ServiceName;
Laporan Alamat Pelanggan
Laporan ini menunjukkan nama dan alamat lengkap setiap Pelanggan.
VII. Kesimpulan
Mengembangkan aplikasi database mengikuti siklus hidup pengembangan sistem yang dimulai dengan pemodelan konseptual dan dipindahkan melalui serangkaian langkah terstruktur yang mencakup pemodelan logis, normalisasi, implementasi fisik, dan pengembangan aplikasi. Contoh proyek Hair Salon mengilustrasikan setiap langkah utama ini. Namun beberapa detail belum sepenuhnya didokumentasikan. Misalnya, beberapa pekerjaan tambahan mungkin diperlukan untuk menormalkan hubungan Layanan Salon untuk memperhitungkan bahan berbeda yang digunakan untuk setiap layanan. Detail implementasi Aplikasi tambahan seperti kode VBA lainnya dan deskripsi yang lebih detail tentang penggunaan setiap formulir dan laporan juga dapat ditambahkan.