Tabel untuk laporan ini
Laporan ini hanya berfungsi jika 'Michel' mengidentifikasi satu instruktur. Jika tidak, Anda memerlukan beberapa sub-laporan untuk satu persimpangan slot waktu hari kerja atau Anda memerlukan beberapa laporan.
Setiap sub-laporan yang tidak kosong pada baris dan kolom laporan Anda memberi tahu Anda:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
.
Jadi laporan tersebut memberi tahu Anda hal yang sama secara keseluruhan sebagai tabel yang menampung baris di mana:instructor Michel teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Perhatikan bagaimana kita mengambil setiap kolom dan baris dari laporan multi-dimensi seperti ini dan menambahkan kolom untuk itu ke tabel untuk setiap sub-laporan multi-dimensi di mana mereka berpotongan.
Mungkin Anda ingin tabel memberi tahu Anda hal yang sama seperti semua laporan untuk semua instruktur:instructor
I
teaches course
C
in classroom
CR
to section
S
for department
D
in timeslot
TS
on weekday
WD
. Perhatikan bagaimana kita mengambil parameter dalam judul dan menambahkan kolom untuk itu ke tabel.
(Sekarang kita tidak perlu khawatir apakah Michel mengidentifikasi satu instruktur.)
Desain pertama untuk laporan ini
Nama instruktur mungkin tidak unik atau tidak permanen. Jadi tambahkan id ke nama dan judul laporan. Anda mungkin memiliki lebih banyak data tentang instruktur, kursus, dan departemen. Jadi siapkan meja untuk mereka. Rupanya nomor bagian hanya unik dalam suatu kursus.
-- instructor ID is named NAME and ...
Instructor(id, name, ...)
CK(id)
-- course NAME ...
Course(name, ...)
CK (name)
-- department NAME ...
Department(name, ...)
CK (name)
-- course C_NAME has section S_NUMBER
Course_Has_Section(C_name, S_number)
CK (C_name, S_number)
FK(C_name) to Course
-- instructor I_id teaches course C_NAME in classroom CR_NAME to section S_NUMBER
-- for department D_NAME in timeslot TS_NAME on weekday WD_NAME
Weekly_Lecture(I_id, C_name, CR_name, S_number, D_name, TS_name, WD_name)
FK(I_id) to Instructor
FK(C_name, S_number) to Course_Has_Section
FK(D_name) to Department
Detail desain Anda akan berbeda. Mungkin kursus dan/atau departemen memiliki kode unik. Kemudian Anda dapat menggunakannya sebagai FK. Kemudian tambahkan tabel. Tampaknya suatu bagian dapat aktif, apa pun artinya.
CK dan Normalisasi
Instruktur, slot waktu &hari kerja tertentu hanya dapat memiliki satu kuliah mingguan. Tetapi tidak ada bagian yang lebih kecil dari itu. Jadi kita punya Weekly_Lecture CK(I_id, TS_name, WD_name)
. Kursus, bagian, slot waktu &hari kerja tertentu hanya dapat memiliki satu kuliah mingguan. Tetapi tidak ada bagian yang lebih kecil dari itu. Jadi kita memiliki Weekly_Lecture CK(C_name, S_number, TS_name, WD_name)
. Ruang kelas, slot waktu &hari kerja tertentu hanya dapat memiliki satu kuliah mingguan. Tetapi tidak ada bagian yang lebih kecil dari itu. Jadi kami memiliki Weekly_Lecture CK(CR_name, TS_name, WD_name)
.
Mungkinkah mata kuliah yang diberikan hanya bisa diajarkan untuk satu jurusan? Mungkin nomor bagian tertentu hanya bisa diajarkan oleh instruktur tertentu? Dengan mengidentifikasi semua FD (dependensi fungsional) kami menentukan semua CK (kandidat kunci). Kemudian normalisasi menggunakan ini untuk menyarankan pilihan "lebih baik" untuk tabel dasar.