web-dev-qa-db-ja.com

データベースの設計:4種類のユーザーですが、機能は異なりますが、個別ですか、それとも1つのテーブルですか

私には4種類のユーザーがいます:

管理者、一般ユーザー、会社、サービスプロバイダー

管理者と通常のユーザーはいくつかの属性(id .first name、last name、phone、mail)を共有します会社とサービスプロバイダーもいくつかの属性を共有します(id .company name、phone、fax、mail)

アプリケーションの他のエンティティとも相互作用して、ポストジョブやイベントなどの機能にアクセスしたり、申請したりします

それらすべてをtbl_usersのような1つのユーザーテーブルに置く方が良いですか、それとも、それぞれに個別のテーブルを作成する方が良いですか?または、(管理者と通常のユーザー)と(会社とサービスプロバイダー)の2つのテーブルに追加します。

これはエンティティの属性に関する詳細です。

enter image description here

1
ramyMorad
2
Yannick Müller

私はそれらすべてを1つのテーブルに保持し、それがどのタイプのユーザーであるかを示すフィールドを追加します。いくつかの空白のフィールドがあります(たとえば、管理者と通常のユーザーにはFAX番号がない)が、これは、多くのユーザーがいて、一部のフィールドがごく一部にしか使用されていない限り、問題にはなりません。 。また、通常のユーザーがFAX番号を取得できない理由や、サービスプロバイダーが姓名を取得できない理由がないため、空白を埋めることもできます。

必要に応じて、「ユーザー」テーブルと「ユーザー属性」テーブルを用意することもできますが、少数(つまり、数百人)のユーザーにとってはおそらく価値がありません。

0
Dan F

スキーマで異なるユーザータイプが実際に異なるロールを持たない限り、それらを1つのテーブルに保持します。次のようなフィールドがあります。

  • ユーザーの種類(ユーザー、管理者、会社、プロバイダー)
  • 名前と苗字
  • 会社名

電話番号と住所を他のテーブルに分けて、1人のユーザーが多くの電話番号と住所を使用できるようにすることもできます(おそらく、会社に複数のオフィスがあり、ユーザーは自宅、携帯電話、勤務先の電話番号などを持っています)。技術的には問題の一部ではありません。

覚えておくべき重要なことは、ユーザータイプがテーブルのフィールドとして簡単に表現され、他のテーブルが任意のユーザーをポイントできるようにすることです。これにより、単一の関係タイプが適用されます。さらに、ユーザーはテーブル間のデータのマッピング、外部キーの更新などを行うことなくタイプを変更できます。通常のユーザーが管理者になった場合はどうなりますか?もし彼が彼の家の外で働いていて、組み込まれているなら、多分追加の労働者を雇うでしょうか?ユーザーが現実の世界でタイプを変更することは非常に現実的です。もちろん、ビジネスルールは異なる場合があります。

0
user22815