我已经在小规模的个人项目上放弃了使用php/mysql的一些编程。然而,我正在开发我的第一个商业应用程序,它将允许客户或企业登录并执行CRUD操作。我觉得自己完全是个问这个问题的新手,但我以前从来没有这样做过,在网上找不到任何相关的信息。
基本上,我已经创建了这个应用程序,并在我的数据库上建立了一个基于角色的系统。我遇到的问题是如何为相关的业务或组分离和获取数据。
例如,我不能像这样设置我的查询:从用户id = user id的示例表中获取所有记录,因为这只会返回该用户的数据,而不是与该业务相关的所有其他用户的数据。我需要一种方法来获取由特定业务的用户创建的所有记录。
我在想,也许业务应该有一个id,我应该像这样构建我的查询:从例中获取所有的记录,其中的business id = business。但我甚至不确定这是不是个好办法。
这种类型的数据存储/获取和分组是否有最佳实践或约定?注意:这里的安全性是一个很大的问题,因为我正在存储合法数据。
此外,我正在使用的最新版本的拉拉4,如果这是相关的。
我想听听以前遇到过这类问题的人们对此的想法,以及他们如何设计那里的数据库和查询,以便只获取和存储与该特定业务相关的数据。
编辑:我喜欢阅读和学习,但是找不到关于这个主题的任何有用的信息--也许我没有使用正确的搜索词。因此,如果你知道任何好的链接与这个主题,请张贴他们也。
发布于 2013-02-24 02:14:04
如果我正确理解,在您的系统中,业务被定义为“用户组”,整个系统引用属于用户的数据,而不是属于企业的数据。您希望引用属于某一特定业务的所有用户的数据。在这种情况下,最好和最可扩展的方法是再创建两个表来包含业务和业务用户关系。
例如,假设您有以下表:
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我希望这能帮到你!
===============================================================
关于“案例”的增编按您在评论中的答复。。
可以为案例创建一个新的表,然后在其中的不同列中引用业务和用户if,因为如果这是您所需要的所有功能,那么这个案例将同时属于用户和业务。
不过,假设进一步探讨关系数据库的概念,即希望为一个案例分配多个用户,但您希望一个用户当选为“组组长”,那么您可以按照以下方式处理这个问题:
按照以下方式定义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表可以有多大的灵活性,您可以使用一个相对较短的查询(例如:
SELECT `role`.`name` FROM `role` RIGHT JOIN `user_case` ON (`user_case`.`role_id` = `role`.`id`) WHERE `user_case`.`user_id` = 6;如果你需要更多的例子,请随时评论。
https://stackoverflow.com/questions/15047810
复制相似问题