首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为企业或客户组保持数据分离?

如何为企业或客户组保持数据分离?
EN

Stack Overflow用户
提问于 2013-02-24 01:49:19
回答 1查看 386关注 0票数 1

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

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

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

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

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

此外,我正在使用的最新版本的拉拉4,如果这是相关的。

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

编辑:我喜欢阅读和学习,但是找不到关于这个主题的任何有用的信息--也许我没有使用正确的搜索词。因此,如果你知道任何好的链接与这个主题,请张贴他们也。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 02:14:04

如果我正确理解,在您的系统中,业务被定义为“用户组”,整个系统引用属于用户的数据,而不是属于企业的数据。您希望引用属于某一特定业务的所有用户的数据。在这种情况下,最好和最可扩展的方法是再创建两个表来包含业务和业务用户关系。

例如,假设您有以下表:

代码语言:javascript
复制
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.

代码语言:javascript
复制
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;

结果将是:

代码语言:javascript
复制
   username    businessname
-> Geoff       CompanyCorp
-> Jane        CompanyCorp

我希望这能帮到你!

===============================================================

关于“案例”的增编按您在评论中的答复。

可以为案例创建一个新的表,然后在其中的不同列中引用业务和用户if,因为如果这是您所需要的所有功能,那么这个案例将同时属于用户和业务。

不过,假设进一步探讨关系数据库的概念,即希望为一个案例分配多个用户,但您希望一个用户当选为“组组长”,那么您可以按照以下方式处理这个问题:

  • 创建一个表"case“来存储这些案例
  • 创建一个表"user_case“来存储case-用户关系,就像在business_user表中一样。

按照以下方式定义user_case表:

代码语言:javascript
复制
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表可以有多大的灵活性,您可以使用一个相对较短的查询(例如:

代码语言:javascript
复制
SELECT `role`.`name` FROM `role` RIGHT JOIN `user_case` ON (`user_case`.`role_id` = `role`.`id`) WHERE `user_case`.`user_id` = 6;

如果你需要更多的例子,请随时评论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15047810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档