如果我理解正确,企业在您的系统中被定义为“用户组”,并且您的整个系统引用属于用户的数据而不是属于企业的数据。您正在寻找属于属于特定企业的所有用户的参考数据。在这种情况下,最好和最可扩展的方法是再创建两个表来包含业务和业务-用户关系。
例如,假设您有以下表格:
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,因为如果这是您需要的所有功能,案例将属于用户和业务。
假设进一步探索关系数据库的概念,您希望将多个用户分配给一个案例,但您希望一个用户被选为“组长”,您可以按如下方式解决问题:
- 创建一个表“案例”来存储案例
- 创建一个表“user_case”来存储案例-用户关系,就像在 business_user 表中一样。
定义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
来找出给定用户(where)具有的所有角色,例如: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;
如果您需要更多示例,请随时发表评论。