次のシナリオのデータベーススキームを作成しています。
- ユーザーがいます
- ユーザーには役割があります(「開発者」や「CEO」など)
- ロールにはアプリケーションがあります(「Topdesk」など)
- アプリケーションには権限があります(「ナレッジベースの更新」など)
- ロールがアプリケーションへのアクセス権をすでに持っている場合、ロールは権限を持つことができます
高性能環境がない(速度を最適化する必要がない)と仮定すると、このスキーマを実装する最良の方法は何でしょうか?データベース環境には、MySQL、MSSQLを使用できます。リレーショナルデータベースの設計が重要です。
私自身は次のことを考え出しました:
もちろん、最も不確かな部分は、Applications_Permissions_Rolesテーブルです。これは、リンクテーブルですの上に別のリンクテーブル。これまで使用したことも、見たこともありません。それを行う別の方法は、それを役割と権限の間のリンクテーブルで置き換え、次にコードまたは制約を使用して必要な関係を確認することです...しかし、それは私にとって良い解決策のようではありません。これらのことは、コードレベルではなく、可能な限り(可能であると思われる場合)データベースレベルで実施する必要があります。
次に、Permissions.ApplicationとApplications.Idの間のリンクが必要ですか?Roles_Applicationsに行がない可能性があるため(新しいアプリケーションを追加した直後など)、どの権限がどのアプリケーションに属しているかを判別することができないため、これを使用します。また、権限が属するアプリケーションを検索するための単一の参照ポイントでもあります。これは正しいと思いますが、それはまた、データベース設計において円を描くものです。ON_DELETEまたはON_UPDATEをカスケードに設定しようとすると、MSSQLエラーが発生します。
何か提案、またはこれはどのように行われることになっていますか?命名規則などに関するその他の提案も(おそらくコメントとして)歓迎されます。
ありがとう、
Luc
編集:タイトルを変更しました。以前のものはより包括的でしたが、おそらく複雑すぎます。
Roles_Applications
が本当のことだとは思いません。すべての権限がアプリケーション固有であることを考えると、Applications_Permissions
(あなたがラベル付けしたものPermissions
)が存在するようであり、その後、のレコードを介して特定のロールに割り当てることができApplications_Permissions_Roles
ます。 Roles_Applications
は、実際には、最も基本的なアプリケーションの許可、つまり単純なアクセスを記述しているようです。または、ロールにはアプリケーションに対するある程度の権限があることを表明していますが、他の場所を調べてどの権限を決定する必要があります。