บริษัทต้องการออกแบบฐานข้อมูลสำหรับระบบสิทธิ์การเข้าถึง (RBAC - Role-Based Access Control) โดย ผู้ใช้มีได้หลาย Role, Role มีได้หลาย Permission, Permission กำหนดได้บน Resource ต่างๆ การออกแบบที่ถูกต้องและยืดหยุ่นที่สุดควรเป็นอย่างไร
กสร้างตาราง UserPermission เดียวที่มี UserID, PermissionName, ResourceName โดยไม่ต้องมีตาราง Role
ขสร้างตาราง User, Role, Permission, Resource และตารางเชื่อม UserRole(UserID, RoleID), RolePermission(RoleID, PermissionID, ResourceID) เพื่อรองรับการมอบสิทธิ์ที่ยืดหยุ่น
คสร้างตาราง User ที่มีคอลัมน์ IsAdmin, IsEditor, IsViewer เป็น Boolean
งสร้างตาราง User ที่มีคอลัมน์ Permissions เป็น TEXT เก็บรายการสิทธิ์คั่นด้วยจุลภาค
เฉลยอธิบาย
RBAC ที่สมบูรณ์ต้องการโครงสร้างที่ยืดหยุ่น: ตาราง User, Role, Permission, Resource แยกกัน และตารางเชื่อม UserRole และ RolePermission การออกแบบนี้ทำให้สามารถ: กำหนด Permission บน Resource เฉพาะเจาะจงได้, เพิ่ม Role ใหม่ได้โดยไม่ต้องเปลี่ยนโครงสร้าง, และ Audit สิทธิ์ได้ง่าย ตัวเลือก A ละเมิด 1NF ตัวเลือก C ไม่ยืดหยุ่น ถ้าต้องการเพิ่ม Role ใหม่ต้องเพิ่มคอลัมน์ ตัวเลือก D ไม่มี Role ทำให้การจัดการสิทธิ์หมู่คนยุ่งยาก