热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

一对多关系的应用,这样做合理么?

结构A用户表>>>结构姓名角色ID串>>>记录1C
============================结构A

   用户表
>>>结构
      姓名    角色ID串
>>>记录
   1 Cloud.L  ,2,4,
   2 CNode    ,1,2,3,
   角色表
>>>结构
     角色
>>>记录
   1 学生
   2 孩子
   3 家长
   4 员工

============================结构B
   用户表
>>>结构
      姓名 
>>>记录
   1 Cloud.L
   2 CNode   
   角色表
>>>结构
     角色
>>>记录
   1 学生
   2 孩子
   3 家长
   4 员工
   关系表
>>>>结构
    用户ID 角色ID
>>>>记录
    1        2
    1        4
    2        1
    2        2
    2        3
对于这种数据关系应该如何来做结构?我目前是上面的做法,但有人告诉我应该把用户表中的这些角色放到一个单独的表中,采用结构B的记录方式来一一记录数据,其实我以前也有考虑这种方法,但是觉得数据记录会产生很多。使用结构A的在输出记录ID的时候需要分离ID串,再存储的时候需要组合后再存储。

不知道像腾讯的那种好友关系是如何建立的结构,我觉得这些道理都差不多,怎样才算是一个高效方便的存储方式呢?

10 个解决方案

#1


我会选 B 查询,更新等操作方便

#2


用户表 只需要记录用户的基本信息即可
角色表 只需要记录定义的角色即可
增加 用户与角色的对应关系表,可以解决一对多,多对对的关系 
如果对应关系改变,只需要维护用户与角色的对应关系表 即可

现在的硬盘都很大了,有冗余数据怕什么,再说了这些对应关系能占多少存储空间?
    

#3


引用 1 楼 xys_777 的回复:
我会选 B 查询,更新等操作方便

也就是说数据记录在关系表中产生很多不重要是吧。

#4


分三个表。

用户表     用户角色关联表      角色表   



用户表和角色表维护基础数据即可,所有的关系都存储在用户角色关联表中。

#5


B方案更好,便于数据库增删查改,
便于开发维护。

A方案不可取,

#6


结构B  好点。

#7


结构B好,易维护。 

#8


肯定是B,我以前也用过A。更新操作方不方便我觉得都不是最先考虑的,毕竟是一次性写代码就搞定了。但以后要用A模式查询角色关系,那才麻烦...

#9


还是根据需求不同在具体分析用那种方案合理

#10


恩,楼上说的对。
A方案我在百媚网这个项目中使用了,但是有一定的局限性。现在觉得A方案倒不是更新、删除操作的麻烦。麻烦的是在不同的关系位置需要不同的关系属性。

而B方案中的一对多的关系正好可以很好的解决一下这个问题。可以将针对于当前记录的所有标识角色再赋于当前节点关系时的唯一标识属性。

推荐阅读
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • IT项目管理过程中的方法、工具、技术
    工欲善其事,必先利其器。而对于一个软件开发项目,最重要的器就是方法,工具和技术。而这三要素中重要的又是方法论,方法是基础&# ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍如何在 Xcode 中使用快捷键和菜单命令对多行代码进行缩进,包括右缩进和左缩进的具体操作方法。 ... [详细]
author-avatar
让爱自由2009
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有