碰到多对多
的关系,一般都是建立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_id
是64
,接着某用户一次借阅了3
本书,则批量插入的3
条借阅记录的batch_no
都是65
。之后另外一个用户租了一套碟,再插入出租记录的rent_id
是68
。采用这种设计,查询批量借阅的信息时,只需使用一条标准T_SQL
的嵌套查询即可。当然,这种设计不符合3NF
,但是和上面标准的3NF
设计比起来,哪一种更好呢?答案就不用我说了吧。
分享到:
相关推荐
小红薯电商实操课小红书开店实操必学课.mp4
AI图像处理工具包-一键抠图、背景切换、旧照片修复、人像漫画化、视频卡通化(Python+OpenCV+Dlib+TensorFlow).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
基于java的新能源充电系统设计与实现.docx
吸波材料建模单元周期仿真模拟,参数优化,计算反射损耗,极化角,入射角,等效阻抗等
AGV调度系统的仿真平台(含源码+项目说明+实验结果分析).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
【本体】Internet Download Manager v6.42.26.zip
NLP中文垃圾短信分类系统源码+设计全部资料+文档报告(自然语言处理课设).zip [资源说明] 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 欢迎下载,学习使用!
Python大作业封面.doc
基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业),个人经导师指导并认可通过的毕业设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开发的安卓的记事本app项目源码(高分期末大作业)基于Android Studio开
操作系统课后题参考答案
几何图霸软件是一个非常强大的三维几何图形绘制工具,可以根据约束条件绘制标准示意图,写相关技术类文章需要绘图时很适用。
《写给大众的健康饮食指南》.mp4
智能相册Piktures v2.19 build 815 for 高级版.mp4
建行开养老金必中58元微信立减金亲测.mp4
Converter视频音频转换器v2.2.5.2解锁VIP版.mp4
车来了v4.59.0高级版 精准实时公交地铁神器.mp4
基于java的招生宣传管理系统设计与实现.docx
iiiicfdfdsffffffffffffffffffff
这是本人期末复习期间的产物,传上来主要是为了方便保存和复习,如有错漏还请谅解。