3種類のユーザーがいます。
各ユーザータイプには異なるユーザーインターフェイスがあり、異なるタイプのデータにアクセスします。唯一の類似点は、1つのWebアプリケーションを使用していることですが、まったく異なるものにアクセスします。それらをすべてtbl_usersのように1つのユーザーテーブルに配置する方が良いでしょうか、それともtbl_admins、tbl_suppliers、tbl_employeesを作成する方が良いでしょうか?
テーブルを設計するときに考慮する必要があるのは、必ずしもそれらがアクセスできるものではなく、それがどのように類似/非類似であるかではなく、ユーザーレベル自体がどのように類似/非類似であるかです。
たとえば、ユーザータイプの属性(名前、電子メール、誕生日など)が同じ場合、それらは特権レベルを示す列とともに1つのテーブルに属します。
これにより、ユーザーの特権レベルの変更も容易になります。たとえば、ユーザーテーブルのレコードを更新するだけで、通常の従業員を管理者にすることができます。
サプライヤが他の2つとは異なる属性を持つ異なるタイプのオブジェクトである場合、サプライヤは独自のテーブルに属する可能性があります。
または、もう1つ考慮すべき点は、3つのタイプすべてのユーザーに関する非常に限られた情報のみを保持するusers
テーブルを使用することです。メインusers
テーブルに戻る外部キーを持つ他のテーブルにそれらを保存できます。
3番目の選択肢もあります。すべてのユーザーが共通に持つ列をtbl_users
に入れ、tbl_admins
、tbl_suppliers
、およびtbl_employees
に3つのテーブルを作成して、tbl_users
に1対0..1として参加します。共有列の数が重要な場合は、この選択を代替として考慮する必要があります。
データ構造がどれほど似ているかによります。それらが類似している場合は、おそらくすべてを1つのテーブルに入れることができます。しかし、それらに多くの異なるフィールドがあり、多くのNULL値で終わる場合...そして、それらはすべて別々のテーブルにある方が良いです。
すべてのログイン情報を1か所に保管するのが最善です。ログインプロセスを変更する場合、3つの異なるテーブルがあると、3つの別々の場所でコードを変更する必要があります。
ユーザーが複数のロールに所属できる場合は、UserRolesテーブルの作成を検討してください。そうでない場合は、RoleTypeなどの既存のテーブルにフィールドを追加すると、さまざまなタイプのユーザーを区別するのに役立ちます。
それらを1つのテーブルに含めて、ユーザーが管理者、サプライヤー、または従業員であるかどうかを示すフィールド/属性を作成する必要があります。
そのように集中化する方が簡単です。
どのように/何にアクセスするかについての懸念は、開発するソフトウェアの下にあります。所有するユーザーのタイプに基づいて、UI(またはソフトウェアシステムでアクセスするもの)を取得または制限できます。
私は通常、持っているユーザーのタイプに応じて、ものを隠したり表示したりします
お役に立てれば..