Tôi đang trong quá trình tạo sơ đồ cơ sở dữ liệu cho kịch bản sau:
- Có người dùng
- Người dùng có vai trò (chẳng hạn như "Nhà phát triển" hoặc "CEO")
- Vai trò có các ứng dụng (chẳng hạn như "Topdesk")
- Các ứng dụng có quyền (chẳng hạn như "Cập nhật kiến thức")
- Một vai trò có thể có quyền, nếu vai trò đã có quyền truy cập vào ứng dụng
Giả sử không có môi trường hiệu năng cao (không cần tối ưu hóa tốc độ), cách tốt nhất để thực hiện lược đồ này là gì? Môi trường cơ sở dữ liệu có thể là MySQL, MSSQL ... đó là về thiết kế cơ sở dữ liệu quan hệ.
Bản thân tôi đã đưa ra những điều sau đây:
Tất nhiên, phần tôi không chắc chắn nhất là bảng Application_Permissions_Roles. Nó là một bảng liên kết trên đầu bảng liên kết khác. Tôi chưa bao giờ sử dụng hoặc nhìn thấy điều này trước đây. Một cách khác để làm điều đó là thay thế nó bằng một bảng liên kết giữa Vai trò và Quyền, sau đó sử dụng mã hoặc các ràng buộc để đảm bảo các mối quan hệ cần thiết ... nhưng đó dường như không phải là một giải pháp tốt cho tôi. Những điều này nên được thi hành ở cấp cơ sở dữ liệu nếu có thể (và dường như có thể), chứ không phải ở cấp mã.
Thứ hai, là liên kết giữa Quyền. Ứng dụng và Ứng dụng. Tôi có cần thiết không? Tôi sử dụng nó bởi vì có thể không có bất kỳ hàng nào trong Roles_Applecting (chẳng hạn như khi bạn vừa thêm một ứng dụng mới) và sau đó không thể tìm ra quyền nào thuộc về ứng dụng nào. Nó cũng là một điểm tham chiếu duy nhất để tra cứu ứng dụng nào thuộc quyền. Tôi đoán điều này là đúng, nhưng nó cũng tạo ra một vòng tròn trong thiết kế cơ sở dữ liệu. Lỗi MSSQL trên đó khi cố gắng đặt ON_DELETE hoặc ON_UPDATE thành xếp tầng.
Bất kỳ đề xuất, hoặc đây là cách nó phải được thực hiện? Bất kỳ đề xuất nào khác liên quan đến quy ước đặt tên và như vậy cũng được hoan nghênh (có lẽ là nhận xét).
Cảm ơn,
Lục
Chỉnh sửa: Thay đổi tiêu đề, hy vọng làm cho nó rõ ràng hơn. Cái trước là toàn diện hơn, nhưng có lẽ quá phức tạp.
Roles_Applications
là một điều có thật. Cho rằng tất cả các quyền là dành riêng cho ứng dụng, có vẻ như có Applications_Permissions
(những gì bạn đã gắn nhãn Permissions
), sau đó có thể được gán cho các vai trò cụ thể thông qua một bản ghi trong Applications_Permissions_Roles
. Roles_Applications
, trên thực tế, dường như đang mô tả sự cho phép ứng dụng cơ bản nhất - truy cập đơn giản. Hoặc, nó đang khẳng định rằng một vai trò có một số mức cấp phép cho một ứng dụng, nhưng bạn phải tìm ở nơi khác để xác định vai trò nào.