Saya sedang dalam proses membuat skema database untuk skenario berikut:
- Ada pengguna
- Pengguna memiliki peran (seperti "Pengembang" atau "CEO")
- Peran memiliki aplikasi (seperti "Topdesk")
- Aplikasi memiliki izin (seperti "Perbarui Knowledgebase")
- Peran dapat memiliki izin, jika peran tersebut sudah memiliki akses ke aplikasi
Dengan asumsi tidak ada lingkungan berkinerja tinggi (tidak perlu mengoptimalkan kecepatan), apa cara terbaik untuk mengimplementasikan skema ini? Lingkungan basis data dapat berupa MySQL, MSSQL ... lebih tentang desain basis data relasional.
Saya sendiri telah membuat yang berikut ini:
Bagian yang paling tidak pasti tentang saya adalah tabel Applications_Permissions_Roles. Ini adalah tabel penautan di atas tabel penautan lainnya. Saya belum pernah menggunakan atau melihat ini sebelumnya. Cara lain untuk melakukannya adalah menggantinya dengan tabel penautan antara Peran dan Izin, dan kemudian menggunakan kode atau batasan untuk memastikan hubungan yang diperlukan ... tapi itu sepertinya bukan solusi yang baik bagi saya. Hal-hal ini harus ditegakkan pada tingkat basis data jika memungkinkan (dan tampaknya memungkinkan), bukan pada tingkat kode.
Kedua, apakah tautan antara Izin. Aplikasi dan Aplikasi. Apakah diperlukan? Saya menggunakannya karena mungkin tidak ada baris di Roles_Applications (seperti ketika Anda baru saja menambahkan aplikasi baru) dan kemudian tidak mungkin untuk menentukan izin mana yang termasuk dalam aplikasi mana. Ini juga merupakan titik referensi tunggal untuk mencari aplikasi yang memiliki izin. Saya kira ini benar, tetapi juga membuat lingkaran dalam desain basis data. Kesalahan MSSQL saat mencoba mengatur ON_DELETE atau ON_UPDATE ke kaskade.
Ada saran, atau apakah ini yang seharusnya dilakukan? Setiap saran lain mengenai konvensi penamaan dan semacamnya juga disambut baik (mungkin sebagai komentar).
Terima kasih,
Luc
Sunting: Judul diubah, mudah-mudahan membuatnya lebih jelas. Yang sebelumnya lebih komprehensif, tetapi mungkin terlalu berbelit-belit.
Roles_Applications
adalah hal yang nyata. Mengingat bahwa semua izin adalah khusus aplikasi, tampaknya ada Applications_Permissions
(apa yang Anda beri label Permissions
), yang kemudian dapat ditugaskan ke peran tertentu melalui catatan di Applications_Permissions_Roles
. Roles_Applications
, pada kenyataannya, tampaknya menggambarkan izin aplikasi paling dasar - akses sederhana. Atau, itu menyatakan bahwa peran memiliki beberapa tingkat izin untuk aplikasi, tetapi Anda harus mencari di tempat lain untuk menentukan yang mana.