Latar belakang saya lebih pada pemrograman web daripada administrasi basis data, jadi tolong perbaiki saya jika saya menggunakan terminologi yang salah di sini. Saya mencoba mencari cara terbaik untuk mendesain database untuk aplikasi yang akan saya koding.
Situasi: Saya punya Laporan di satu meja dan Rekomendasi di meja lain. Setiap Laporan dapat memiliki banyak Rekomendasi. Saya juga memiliki tabel terpisah untuk Kata Kunci (untuk menerapkan penandaan). Namun, saya ingin memiliki hanya satu set kata kunci yang diterapkan pada Laporan dan Rekomendasi sehingga pencarian pada kata kunci memberi Anda Laporan dan Rekomendasi sebagai hasil.
Inilah struktur yang saya mulai dengan:
Reports
----------
ReportID
ReportName
Recommendations
----------
RecommendationID
RecommendationName
ReportID (foreign key)
Keywords
----------
KeywordID
KeywordName
ObjectKeywords
----------
KeywordID (foreign key)
ReportID (foreign key)
RecommendationID (foreign key)
Secara naluriah, saya merasa seperti ini tidak optimal dan saya harus memiliki objek taggable saya mewarisi dari orang tua yang sama, dan meminta orang tua komentar itu ditandai, yang akan memberikan struktur berikut:
BaseObjects
----------
ObjectID (primary key)
ObjectType
Reports
----------
ObjectID_Report (foreign key)
ReportName
Recommendations
----------
ObjectID_Recommendation (foreign key)
RecommendationName
ObjectID_Report (foreign key)
Keywords
----------
KeywordID (primary key)
KeywordName
ObjectKeywords
----------
ObjectID (foreign key)
KeywordID (foreign key)
Haruskah saya pergi dengan struktur kedua ini? Apakah saya melewatkan masalah penting di sini? Juga, jika saya menggunakan yang kedua, apa yang harus saya gunakan sebagai nama non-generik untuk menggantikan "Objek"?
Memperbarui:
Saya menggunakan SQL Server untuk proyek ini. Ini adalah aplikasi internal dengan sejumlah kecil pengguna non-konkuren, jadi saya tidak mengantisipasi beban tinggi. Dalam hal penggunaan, kata kunci kemungkinan akan digunakan hemat. Cukup banyak hanya untuk keperluan pelaporan statistik. Dalam hal itu, solusi apa pun yang saya gunakan mungkin hanya akan memengaruhi pengembang mana pun yang perlu mempertahankan sistem ini di masa depan ... tapi saya pikir sebaiknya menerapkan praktik yang baik kapan pun saya bisa. Terima kasih atas semua wawasannya!