如何为企业或客户群分开数据?

时间:2013-02-24 01:49:19

标签: php mysql laravel

我已经完成了对小规模个人项目的php / mysql的一些编程。但是我正在开发我的第一个商业应用程序,它将允许客户或企业登录并执行CRUD操作。我觉得自己像一个总菜鸟问这个问题,但我以前从来没有这样做过,也无法在网上找到任何相关信息。

基本上,我已经创建了这个应用程序,并在我的数据库上设置了基于角色的系统。我遇到的问题是如何分离和获取相关业务或组的数据。

例如,我不能像这样设置我的查询:从示例表中获取所有记录,其中user id = user id,因为这只会返回该用户的数据而不是所有其他相关的用户对那个行业。我需要一种方法来获取特定业务用户创建的所有记录。

我在想,也许业务应该有一个id,我应该像这样形成我的查询:从示例中获取所有记录,其中business id = business id。但我甚至不确定这是否是一个好方法。

此排序数据存储/获取和分组是否有最佳实践或约定? 注意:安全性是一个很大的问题,因为我正在存储合法数据。

另外,如果有任何相关性,我正在使用最新版本的laravel 4.

我希望听到人们对此之前遇到过这种问题的想法,以及他们如何设计数据库和查询以获取和存储与该特定业务相关的数据。

编辑:我喜欢阅读和学习但无法找到有关此主题的任何有用信息 - 也许我没有使用正确的搜索字词。因此,如果您知道有关此主题的任何好链接,请发布它们。

1 个答案:

答案 0 :(得分: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,因为这种情况属于用户和业务,如果这是所有功能的话你需要的。

假设进一步探索关系数据库的想法,您希望将多个用户分配给案例,但您希望将一个用户选为“组长”,您可以按如下方式解决问题:< / p>

  • 创建一个表“case”来存储案例
  • 创建一个表“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表,您可以通过使用相对较短的查询找出给定用户(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;

如果您需要更多示例,请随时留言。