私があなたの質問を正しく理解していれば、データベースにはすでに2つのテーブルがあります。
Users
とのテーブルUserID, Name, AccessRights
Customers
とのテーブルCustomerID, Name, OtherSTuff
次に、これらのテーブル間に関係を作成します。ここで質問するのは、1人の顧客に対して何人のユーザーが存在する可能性があり、特定のユーザーに何人の顧客が関係している可能性があるかです。
個人的には、1人の顧客が複数の従業員をデータベースにアクセスさせる可能性があると思いますが、すべての(管理者以外の)ユーザーは1人の顧客にしか関連付けられません。これは1:Nの関係になります。1人の顧客にはN人のユーザーがいます。それに応じてデータベースモデルを変更するには、テーブルにCustomerID
列が必要です。Users
私の推測が間違っていて、1人のユーザーにN人の顧客がいた場合、1人のユーザーが複数の顧客にアクセスする場合はUserID
、テーブルに列が必要になりますCustomers
。
3番目のテーブルが必要になるのは、N人の顧客にM人のユーザーがいる場合だけです。つまり、1人のユーザーが複数の顧客にアクセスでき、1人の顧客に複数のユーザーがアクセスできる場合です。
編集:データベースの整合性の部分を完全に省略して適用しました。
MySQLはFOREIGN KEY
句をサポートしています-少なくともInnoDBなどの一部のストレージエンジンで使用する場合、MyISAMはまだサポートしていないと思います。外部キー句を使用すると、その列の値を外部テーブルの既存の値と一致させるか、にすることができますNULL
。この動作が望ましくない場合は、列をとして宣言する必要がありますNOT NULL
。
通常のユーザーが設定している間CustomerID
、管理者が使用できるようにユーザーを設定できます。ただし、これには注意点があります。この句を使用しないでください。使用しないと、顧客を削除すると、対応するユーザーが管理者になります。代わりに使用してください。NULL
CustomerID
ON DELETE SET NULL
ON DELETE CASCASE