`
wusuoya
  • 浏览: 629416 次
  • 性别: 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 设计比起来,哪一种更好呢?答案就不用我说了吧。

分享到:
评论

相关推荐

    MySQL 多表关联一对多查询实现取最新一条数据的方法示例

    由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准; 数据测试初始化SQL脚本 DROP TABLE IF EXIST

    数据表结构设计

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

    库存管理系统数据表设计

    库存管理系统数据表设计很齐全,有必要借鉴

    论文研究-多关系数据挖掘方法研究.pdf

    目前大多数数据挖掘方法是从单关系中发现模式,而多关系数据挖掘(MRDM)则可直接从关系数据库的多表中抽取有效模式。MRDM可以解决原有命题数据挖掘方法不能解决的问题,它不仅有更强的信息表示能力,可以表示和发现...

    数据库与数据表设计.pptx

    数据库与数据表设计 本讲大纲: 1、数据库分析 2、创建数据库 3、创建数据表 4、数据表逻辑关系 数据库与数据表设计全文共28页,当前为第1页。 数据库分析 企业人事管理系统主要用来记录一个企业中所有员工的基本...

    基于数据关系表的XML查询算法

    为解决交互式电子技术手册数据量庞大、结构繁杂不易查询的问题,采用将XML文档分解为层次化数据关系表的设计方法.在系统中创建数据结点,提取后构成文档树;根据文中定义将整体数据分解为具有层次化的数据关系表片段,由...

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

    数据库设计 数据流图 实体关系图 数据库设计 数据流图 实体关系图

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

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

    用户角色菜单权限表结构创建以及数据插入

    用户菜单权限表建表语句以及数据插入语句,后台管理系统搭建必备,学习专用。 如果使用外键关联,在对表进行数据操作时就考虑另一张关联的表...so,在设计表时尽量减少表与表直接的外键约束,避免麻烦,表关联关系清晰

    数据结构课程设计-家族关系查询(源码 实验报告).rar

    c语言课程设计 家族关系查询 是你做课程设计的最佳参考 里面包含源代码和实验报告!!!!十分齐全!!!

    数据结构与程序的关系

    5.3 数据结构与程序的关系服务器程序在对定票/领票进行操作时需对数据库数据库数据结构,也就是数据表进行查询和修改:在定票/领票过程中都需要对数据库中的所有表,进行联合查询、修改。

    省市区三级联动表结构以及数据

    省市区三级联动表,单表结构。 34省、直辖市,369市,2848县与区级数据。 -- 省级查询 select * from area where LEVEL=1 -- 市级查询 select * from area where LEVEL=2 -- 区县级查询 select * from area where ...

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

    关系数据库设计中关于数据字典的使用和创建的例子

    表结构设计+关系数据模型1

    表数据结构设计:实体属性数据类型数据长度属性类型备注患者患者IDint30单值属性病历号int30单值属性患者身份证号char19单值属性患者姓名text30复

    VC019数据挖掘在客户关系管理中的应用毕业设计全套

    VC019数据挖掘在客户关系管理中的应用毕业设计全套VC019数据挖掘在客户关系管理中的应用毕业设计全套VC019数据挖掘在客户关系管理中的应用毕业设计全套VC019数据挖掘在客户关系管理中的应用毕业设计全套VC019数据...

    15.2.2-数据表关联关系分析-Java-Web程序设计教程-[共2页].pdf

    url varchar 50 网址 buildDate datetime 8 建馆日期 introduce text 16 图书馆介绍 15.2.2 数据表关联关系分析 下面是图书馆管理系统中数据表的关联关系。 1.operator_t 表关联关系 当读者进行注册时(即添加读者...

    狂学数据库之关系模式的设计问题及数据的函数依赖

    关系模式的设计问题1.1 数据依赖1.2 数据依赖对关系模式的影响二. 数据的函数依赖2.1 函数依赖2.1.1 函数依赖的定义2.1.2 函数依赖的3种基本情形2.2 函数依赖和码(关键字)的联系2.3 最小函数依赖集 一. 关系模式...

    报销数据库设计.doc

    1. 模型种类:概念模型、逻辑模型、物理模型。 概念模型和物理模型较为含糊,一般用逻辑模型和物理模型。Powerdesigner 15...."关系 "关系(多对多) "实体 "表(关系表) " 6. 其他对比 "对比项 "概念模型

    数据结构设计与应用.doc

    线性结构的数据元素之间存在 一对一的关系,其特点是除了开头和最后一个节点外,其他的任意一个节点都只有一个 直接前驱节点后后继节点。线性结构主要包括有线性表、栈和队列。树、集合、图都是 非线性结构,其中树...

    数据结构课程设计--迷你计算器设计

    很多涉及计算器程序的的算法都是以栈的相关操作为基础,通过计算器的设计,有利于在学习中更好的理解栈及其相关的操作。 通过对计算器计算过程演示,看到了到它的一些性能及相关优势。 我们在写程序时,大框架已成的...

Global site tag (gtag.js) - Google Analytics