php – 是否有一个规范化的表单来表示来自不同表的多个对象?
对于我当前正在构建的系统,会出现以下两种情况: >我的权限系统是将角色和角色的权限附加到用户的常年最爱,但有一个转折:权限可以应用于任何层的任何资产,并且有4个“层”,编号为0到3.因此,角色分配表长度为5个字段:资产层,资产ID,角色ID,用户ID和“禁用”标志.该“Tier / ID”系统还用于将用户分配给“Home Asset”. 这个系统的不幸副作用是,在应用程序本身中解析我的这些资产引用通常要简单得多,而不是在SQL中(我知道它可以这样做,但它会导致一些严重的丑陋查询) .有没有更好的方式来表示这种关系?这是表达这种关系的可接受方式吗? 旁注:资产本身的表(它们是分层的)是规范化的,外键引用从子节点指向父节点(例如,第3层包含有关第2层的信息等),因此一旦单个资产被固定,它就非常很容易找到它的孩子和祖先. 目前,所有“点”(代表设备)都有一个参考表,其中包含显示布局,位置,大小等信息.我可以从这里确定三个可能的事情: >创建一系列规范化表来表示各个设备,并使用类似的“设备类型/设备ID”系统查找它们,并将此信息存储在“点”表中;这仍然需要应用程序在解析对各自表中的实际设备的引用时进行中间工作 这个问题已经解决了,我只是没有得到备忘录?是否有解决此问题的标准设计,或者我应该假设我必须自己解决这些引用? 注意:关于问题二,我认为以下两种解决方案是可怕的,我不会考虑它们(除非有一些疯狂的,令人惊讶的证据表明它是最好的方式,我很确定它不是): >在点表本身中存储有关每个设备的所有信息(在序列化数组或某些此类机制中).这具有明显的问题,即完全无法搜索并且违反正常形式 请求和赞赏任何解决方案,但我特别寻找解决此问题的现有模式和/或规范化模式(如果存在).如果您知道这是正确答案的事实,“否”就足够了,我将继续使用应用程序层来解析这些引用.它还没有成为问题,我只是想知道当有人已经解决了这个/这些问题时,我并没有在错误的方向上开辟道路.提前致谢. 编辑:权限/资产架构 第0层实际上是隐含的,而不是在数据库中,但有些东西被注册为第0层(资产ID 0) 第1层:
2级:
第3层:
权限:
角色:
Role_Permissions:
User_Role_Permissions:
最佳答案
您是否考虑将权限表分解为一组表,每个表都应用于单独的对象表,例如tier_1_assets和tier_1_permissions,以及tier_2_assets和tier_2_permissions.这将使查询资产层的权限变得更加简单,但查询用户的所有权限会更复杂(这是一种权衡).
我还要质疑关系数据库是数据的正确存储介质的假设.它可能确实是,但也可能不是. (PHP可能会限制这方面的自由). 如果您的数据集很小,为什么不将它保存到单个序列化文件中,并且有一个小服务器将它保存在内存中并提供查询接口?我相信没有充分的理由. (除了在PHP中) 您是否考虑过第二个问题的多个积分表?它可能感觉像是重复,但它确实使某些类型的查找变得简单,并且当您将每个外键引用视为不同类型的对象时会被规范化(当表是对象时,您可以对它们使用外键检查)隔开). 对象之间关系的多样性应该告诉您在哪里放置键和引用:一对多 – > (键< - 外键);多对多 - > (键< - link-table - >键);一对可选 – > (键< - 外键). 我不知道任何与你的问题相符的模式.但我注意到,避免创建另一个表的大多数通用解决方案很难快速管理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |