私が正しく理解していれば、ビジネスはシステム内で「ユーザーのグループ」として定義され、システム全体がビジネスに属するデータではなく、ユーザーに属するデータを参照します。特定のビジネスに属するすべてのユーザーに属するデータを参照しようとしています。この場合、これを行うための最良かつ最も拡張可能な方法は、ビジネスとビジネスユーザー関係を含む2つのテーブルを作成することです。
たとえば、次のテーブルがあるとします。
business => Defines a business entity
id (primary)
name
Entry: id=4, name=CompanyCorp
user => Defines each user in the system
id (primary)
name
Entry: id=1, name=Geoff
Entry: id=2, name=Jane
business_user => Links a user to a particular business
user_id (primary)
business_id (primary)
Entry: user_id=1, business_id=4
Entry: user_id=2, business_id=4
基本的に、business_user
テーブルは関係を定義します。たとえば、GeoffはCompanyCorpに関連しているため、テーブルにはそれらid
の'と一致する行が存在します。これはリレーショナルデータベースモデルと呼ばれ、データベース開発の世界で理解するための重要な概念です。ユーザーが複数の異なる会社に所属することを許可することもできます。
ユーザーのすべての名前と会社の名前を検索するには、会社のID = 4 .. ..
SELECT `user`.`name` as `username`, `business`.`name` as `businessname` FROM `business_user` LEFT JOIN `user` ON (`user`.`id` = `business_user`.`user_id`) LEFT JOIN `business` ON (`business`.`id` = `business_user`.`business_id`) WHERE `business_user`.`business_id` = 4;
結果は次のようになります。
username businessname
-> Geoff CompanyCorp
-> Jane CompanyCorp
これがお役に立てば幸いです。
================================================== =============
コメントでの回答ごとの「ケース」に関する補遺。
ケースの新しいテーブルを作成し、そこにある別々の列でビジネスIDとユーザーIDの両方を参照できます。これは、ケースが必要なすべての機能である場合、ケースがユーザーとビジネスの両方に属するためです。
ただし、リレーショナルデータベースのアイデアをさらに詳しく調べて、1つのケースに複数のユーザーを割り当てたいが、1人のユーザーを「グループリーダー」として選出したい場合は、次のように問題に取り組むことができます。
- ケースを保存するためのテーブル「ケース」を作成します
- business_userテーブルと同様に、ケースとユーザーの関係を格納するテーブル「user_case」を作成します。
user_case
次のようにテーブルを定義します。
user_case => Defines a user -> case relationship
user_id (primary)
case_id (primary)
role
Entry: user_id=1, case_id=1, role="leader"
Entry: user_id=2, case_id=1, role="subordinate"
さらに進んで、ユーザーが引き受けることができる役割の定義を含むテーブルを定義することもできます。次に、テーブルを変更して、さらに別のテーブルのデータを結合する代わりuser_case
に使用することもできます。role_id
role
user_case
非常に小さなテーブルのスキーマがどんどん深くなっているように聞こえるかもしれませんが、リレーショナルテーブルに列を追加したことに注意してください。アプリケーションが大きくなるほど、テーブルは横方向に大きくなり、列が増えます。私を信じてください、あなたは最終的に関係を定義するためだけに新しいテーブルを追加するのをやめます。
これがどれほど柔軟であるかを簡単に示す例として、テーブルを使用すると、次のような比較的短いクエリを使用してrole
、特定のユーザー(ここで)が持つすべての役割を把握できます。user_id = 6
SELECT `role`.`name` FROM `role` RIGHT JOIN `user_case` ON (`user_case`.`role_id` = `role`.`id`) WHERE `user_case`.`user_id` = 6;
さらに例が必要な場合は、コメントを続けてください。