`
wusuoya
  • 浏览: 641677 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

多对多关系的数据表设计

 
阅读更多

碰到多对多 的关系,一般都是建立3 个表,m 一个,n 一个,m:n 一个。但是,m:n 有时会遇到批量处理的情况,例如到图书馆借书,一般都是允许用户同时借阅n 本书,如果要求按批查询借阅记录,即列出某个用户某次借阅的所有书籍,该如何设计呢?让我们建好必须的3 个表先:

书籍表(Book_table)
名称     类型    约束条件   说明
book_id       int          无重复         书籍标识,主键
book_no       char(20)     无重复         书籍编号
book_name     char(100)    不允许为空     书籍名称
……

 

 

借阅用户表(Renter_table)
名称     类型    约束条件   说明
renter_id     int          无重复         用户标识,主键
renter_name   char(20)     不允许为空     用户姓名
……

 

借阅记录表(Rent_log)
名称     类型    约束条件   说明
rent_id       int          无重复         借阅记录标识,主键
r_id          int          不允许为空     用户标识,和Renter_table.renter_id 关联
b_id          int          不允许为空     书籍标识,和Book_table.book_id 关联
rent_date     datetime     不允许为空     借阅时间
……

为了实现按批查询借阅记录,我们可以再建一个表来保存批量借阅的信息,例如:

批量借阅表(Batch_rent)
名称     类型    约束条件   说明
batch_id      int          无重复         批量借阅标识,主键
batch_no      int          不允许为空     批量借阅编号,同一批借阅的batch_no 相同
rent_id       int          不允许为空     借阅记录标识,和Rent_log.rent_id 关联
batch_date    datetime     不允许为空     批量借阅时间

这样的设计好吗?我们来看看为了列出某个用户某次借阅的所有书籍,需要如何查询?首先检索批量借阅表(Batch_rent) ,把符合条件的的所有记录的rent_id 字段的数据保存起来,再用这些数据作为查询条件带入到借阅记录表(Rent_log) 中去查询。那么,有没有什么办法改进呢?下面给出一种简洁的批量设计方案,不需添加新表,只需修改一下借阅记录表(Rent_log) 即可。修改后的记录表(Rent_log) 如下:

借阅记录表(Rent_log)
名称     类型    约束条件   说明
rent_id       int          无重复         借阅记录标识,主键
r_id          int          不允许为空     用户标识,和Renter_table.renter_id 关联
b_id          int          不允许为空     书籍标识,和Book_table.book_id 关联
batch_no      int          不允许为空     批量借阅编号,同一批借阅的batch_no 相同
rent_date     datetime     不允许为空     借阅时间
……

其中,同一次借阅的batch_no 和该批第一条入库的rent_id 相同。举例:假设当前最大rent_id64 ,接着某用户一次借阅了3 本书,则批量插入的3 条借阅记录的batch_no 都是65 。之后另外一个用户租了一套碟,再插入出租记录的rent_id68 。采用这种设计,查询批量借阅的信息时,只需使用一条标准T_SQL 的嵌套查询即可。当然,这种设计不符合3NF ,但是和上面标准的3NF 设计比起来,哪一种更好呢?答案就不用我说了吧。

分享到:
评论

相关推荐

    OA 协同办公系统 数据库设计说明书(附数据库关系表)

    表之间的关联设计是指对数据库中每个表之间的关联关系的设计,包括一对一、一对多、多对多等关联关系。表之间的关联设计需要考虑到多方面的因素,包括系统的功能需求、数据的存储和管理、数据的安全性等。 3.4 存储...

    数据表结构设计

    个人测试网站设计的数据表结构、关系。 对他人无意义,不用下载。

    学生宿舍管理系统的数据库设计(包括数据流图 实体关系图)

    本文将对学生宿舍管理系统的数据库设计进行详细的介绍,包括数据流图、实体关系图和逻辑结构设计。该系统旨在为学生宿舍管理员、学生、学校管理者和来宾提供一个便捷的信息管理平台。 数据流图 数据流图是学生宿舍...

    DAX指南:【英】实现支持多对多关系

    在多维数据模型中,多对多关系不能直接通过普通的维度与事实表的连接来表达,因为它们通常需要一个额外的桥接表来表示这种复杂的关系。在DAX中,通过使用特定的表达式来处理这种关系,为分析提供了极大的灵活性和...

    采购订单数据表的设计

    在IT行业中,数据库设计是至关重要的一步,尤其在企业级应用中,良好的数据表设计能够保证数据的一致性、完整性和高效性。本话题聚焦于“采购订单数据表的设计”,这是一个涉及订单管理、数据库结构以及采购流程的...

    能实现一对多关联的通用EXCEL导入功能

    在数据库设计中,一对多关联是指一个表中的记录可以与另一个表中的多个记录相对应。比如,一个班级(表A)可以有多名学生(表B),而每个学生只属于一个班级。在Excel导入的场景中,这意味着我们需要处理的数据可能...

    数据库设计(数据字典,E-R图,模式关系等)

    关系模式是对E-R图的一种规范化表达,它定义了每个表(或关系)的结构,包括每个字段的名称、数据类型以及它们之间的约束。例如,教师关系模式为(工作证号,姓名,职称,电话,系代号),表明教师表由这些字段构成...

    全球主要国家数据表mysql

    这表明数据表可能有多个国家/地区的分类和详细信息,可以用于支持全球范围内的地理定位功能。 压缩包中的 "location.sql" 文件很可能是这个国家数据表的SQL格式文件。SQL(结构化查询语言)是用于管理关系数据库的...

    数据表结构设计器 数据设计好帮手

    常见的关系型数据库管理系统(RDBMS)如MySQL、Oracle、SQL Server等,它们都是基于表格模型,由多个数据表组成,每个数据表包含一系列列和行,用来存储特定类型的数据。 数据表结构设计器主要涉及以下几个关键知识...

    关系数据库设计中数据字典设计例子

    在关系数据库设计中,数据字典(Data Dictionary)扮演着至关重要的角色,它是一个系统性的信息集合,用于记录关于数据库中各个元素的详细信息。数据字典是数据库管理系统的重要组成部分,帮助用户、管理员和开发...

    关系数据库表存储树形结构的方法

    无论是单表实现还是多表实现,关系数据库表存储树形结构的方法都需要通过特定的设计来模拟树的层次关系。设计者需要根据实际应用场景选择合适的存储方式,并且设计出高效的算法来处理树形数据结构的检索、插入、删除...

    数据库SQL数据表课程设计实例 图书借阅管理 再就业信息管理 钢材仓库管理 闲置设备管理 销售业务管理系统 共16页.ppt

    这个数据库设计实例涵盖了数据库设计的方方面面,包括实体关系设计、ER 图模型、数据库设计模式、数据表设计、实体之间的关系、数据模型的应用、数据库设计的步骤、数据库设计的原则、数据库设计工具和数据库设计的...

    设计数据库(表结构设计)

    多对多关系则涉及两个表的记录可以互相有多重对应。正确设定关系有助于数据的整合和查询。 设计优化是数据库设计不可或缺的环节。检查是否遗漏了字段,主关键字是否合适,是否存在重复信息,以及表的设计是否合理。...

    数据库系统设计大全,包括数据库的设计步骤和具体流程,如何设计,以及用具体的事例实现等,还包括UML模型,以及表之间的关系等。

    3. **逻辑设计**:将E-R模型转换为关系模型,形成关系数据模型,包括各个表的设计。这个阶段会明确表的字段、数据类型、主键和外键,以及可能的索引和触发器。例如,商品表可能会有ID(主键)、名称、价格等字段,而...

    系统概要设计 数据结构设计

    总结来说,系统概要设计中的数据结构设计是一项复杂而关键的任务,涵盖了从E-R图到关系模型的转换、数据模型的优化、用户子模式设计,以及数据库的物理设计等多个层面。每个步骤都需要深思熟虑,以确保最终设计出的...

    论文研究-多关系数据分类方法综述.pdf

    多关系数据分类是多关系数据挖掘重要任务之一,它能够直接从多关系数据表中发现有效模式,比命题分类方法具有更大优势。根据知识表示形式及相关策略的不同将多关系数据分类分为归纳逻辑程序设计关系分类方法、图的...

    数据库与数据表设计.pptx

    例如,职工基本信息表的ID可能与其他表如家庭关系表、培训记录表和奖惩表建立关联,形成一对多或多对多的关系。通过关系图,可以清晰地理解这些关联,便于在查询和操作数据时,从相关联的表中获取所需信息。 在实际...

    退款信息管理系统表的一对多关系.net

    通过以上分析,我们可以看到“退款信息管理系统表的一对多关系.net”项目涵盖了数据库设计、数据访问技术、面向对象编程以及性能优化等多个方面,是一个全面展示.NET开发技能的实例。开发者需要具备扎实的数据库理论...

    学生成绩管理系统-数据库设计

    系统的数据设计主要包括数据字典和数据流图。数据字典是对数据项的详细描述,包括属性名、存储代码类型、长度和备注等。数据流图是对系统数据流程的描述,包括用户查询学生信息、管理员查询成绩信息等。 系统的安全...

Global site tag (gtag.js) - Google Analytics