记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息
昨晚完成了Web端新增图书信息的功能,现在就差DB的具体实现了。
因为我把Book相关的信息拆分的比较多,所以更新有点小麻烦。
首先,我需要创建一个Book Type的Matter;
然后,将图片路径保存到FileBank中,并返回FileBankID;
继续,插入Publisher信息(需要判断name不存在才会insert),然后返回PublisherID;
CREATE PROCEDURE [base].[Publisher#Insert](@json nvarchar(max), @id int out)
WITH ENCRYPTION
AS
BEGIN
... declare @name nvarchar(100);
select @name=Publisher from openjson(@json, '$') with (Publisher nvarchar(100)) -- insert Publisher
insert base._Publisher(Name)select @name
where not exists(select 1 from base._Publisher p where p.Name=@name); select @id=ID from base.Publisher#Raw() where Name=@name;
...
END
继续,插入Binding信息(也需要判断name不存在才insert),返回BindingID;
CREATE PROCEDURE [base].[Binding#Insert](@json nvarchar(max), @id int out)
WITH ENCRYPTION
AS
BEGIN
... declare @name nvarchar(100);
select @name=Binding from openjson(@json, '$') with (Binding nvarchar(100)) -- insert Binding
insert base._Binding(Name)select @name
where not exists(select 1 from base._Binding p where p.Name=@name); select @id=ID from base.Binding#Raw() where Name=@name; ...
END
继续,插入Book信息;
继续,插入BookInfo的信息;
继续,插入BookNbr信息;
继续,插入BookSupplement信息;
继续,插入BookTag信息;
CREATE PROCEDURE [base].[BookTag#Insert](@json nvarchar(max), @bookID bigint)
WITH ENCRYPTION
AS
BEGIN
... -- insert Tag
insert base._Tag(Name)select value
from openjson(@json, '$.Tags') x
where not exists(select 1 from base._Tag p where p.Name=x.value); insert base._BookTag(BookID, TagID) select @bookID, x.ID
from openjson(@json, '$.Tags') j join base.Tag#Raw() x on x.Name=j.value ...
END
继续,插入BookAuthor信息;
CREATE PROCEDURE [base].[BookAuthor#Insert](@json nvarchar(max), @bookID bigint)
WITH ENCRYPTION
AS
BEGIN
... -- insert Author
insert base._Author(Name)select value
from openjson(@json, '$.Authors') x
where not exists(select 1 from base._Author p where p.Name=x.value); insert base._BookAuthor(BookID, AuthorID) select @bookID, x.ID
from openjson(@json, '$.Authors') j join base.Author#Raw() x on x.Name=j.value ...
END
继续,插入BookTranslator信息;
CREATE PROCEDURE [base].[BookTranslator#Insert](@json nvarchar(max), @bookID bigint)
WITH ENCRYPTION
AS
BEGIN
... -- insert Translator
insert base._Author(Name)select value
from openjson(@json, '$.Translators') x
where not exists(select 1 from base._Author p where p.Name=x.value); insert base._BookTranslator(BookID, TranslatorID) select @bookID, x.ID
from openjson(@json, '$.Translators') j join base.Author#Raw() x on x.Name=j.value ...
END
最后,关联新增的Book信息和Shelf,插入ShelfBook信息。
现在放出Init Script
Book_Init.sql
CREATE PROCEDURE [svc].[Book$Init](@json nvarchar(max))
WITH ENCRYPTION
AS
BEGIN
... declare @stringID varchar(36), @userID int, @shelfID int;
select @stringID=u.StringID, @userID=u.ID, @shelfID=s.ID
from openjson (@json, '$') with (StringID varchar(36))
cross apply core.User#For(StringID) u
join core.Party#Raw() s on s.PID=u.ID; declare @stateID int=(select BookCreated from core.Status#ID()); -- init Matter
insert core._Matter(Type, UserID, StateID)
select k._Book, @userID, @stateID from core.Matter#Type() k;
declare @matterID int=@@identity; -- init FileBank
insert base._FileBank(Type, Url)
select k._BookImage, ImageUrl
from openjson(@json, '$') with (ImageUrl varchar(200))
cross apply base.FileBank#Type() k;
declare @imageID int=@@identity; -- insert Publisher
declare @publisherID int;
exec base.Publisher#Insert @json=@json, @id=@publisherID out; -- insert Binding
declare @bindingID int;
exec base.Binding#Insert @json=@json, @id=@bindingID out; -- insert Book
insert base._Book(ID, Title, PublisherID, BindingID, ImageID)
select @matterID, Title, @publisherID, @bindingID, @imageID
from openjson(@json, '$') with (Title nvarchar(100)); -- insert BookInfo
insert base._BookInfo(ID, OriginTitle, PageCnt, Pubdate, SubTitle)
select @matterID, OriginTitle, Pages, Pubdate, SubTitle
from openjson(@json, '$')
with (
Pages int,
Pubdate char(10),
SubTitle nvarchar(150),
OriginTitle nvarchar(150)
); -- insert BookNbr
insert base._BookNbr(ID, Type, Number)
select @matterID, k._ISBN13, Isbn13
from base.BookNbr#Type() k, openjson(@json, '$') with (Isbn13 char(13)); insert base._BookNbr(ID, Type, Number)
select @matterID, k._ISBN10, Isbn10
from base.BookNbr#Type() k, openjson(@json, '$') with (Isbn10 char(10)); -- insert BookSupplement
insert base._BookSupplement(ID, Type, Supplement)
select @matterID, k._AuthorIntro, AuthorIntro
from base.BookSupplement#Type() k, openjson(@json, '$') with (AuthorIntro nvarchar(max)); insert base._BookSupplement(ID, Type, Supplement)
select @matterID, k._Summary, Summary
from base.BookSupplement#Type() k, openjson(@json, '$') with (Summary nvarchar(max)); insert base._BookSupplement(ID, Type, Supplement)
select @matterID, k._Catalog, Catalog
from base.BookSupplement#Type() k, openjson(@json, '$') with (Catalog nvarchar(max)); -- insert BookTag
exec base.BookTag#Insert @json=@json, @bookID=@matterID; -- insert BookAuthor
exec base.BookAuthor#Insert @json=@json, @bookID=@matterID; -- insert BookTranslator
exec base.BookTranslator#Insert @json=@json, @bookID=@matterID; -- insert ShelfBook
insert base._ShelfBook(BookID, ShelfID) values(@matterID, @shelfID); ...
END
好了,开始测试。
...
查询DB,看看有没有数据进DB:


截图中展示了部分查询结果,基本没什么问题了。
下面要做的是展示Shelf中的Book信息,要等今天活干完才能继续写了。
记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息的更多相关文章
- 记开发个人图书收藏清单小程序开发(三)DB设计
主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...
- 记开发个人图书收藏清单小程序开发(五)Web开发
决定先开发Web端试试. 新增Web应用: 选择ASP.NET Core Web Application,填写好Name和Location,然后点击OK. 注意红框标出来的,基于.NET Core 2 ...
- 记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息
书房信息初始化已完成,现在开始处理图书信息新增功能. 主要是实现之前New Razor Pages的后台部分. 新增需要保存的Model:Book.InitSpec.cs /Models/Book.I ...
- 记开发个人图书收藏清单小程序开发(六)Web开发
Web页面开发暂时是没有问题了,现在开始接上Ptager.BL的DB部分. 首先需要初始化用户和书房信息.因为还没有给其他多余的设计,所以暂时只有个人昵称和书房名称. 添加 Init Razor Pa ...
- 记开发个人图书收藏清单小程序开发(四)DB设计
早上起来,又改动了一下: 主要是,将非常用信息全部拆分出来,让Table尽量的小,小到不能继续拆分了,这样区分DB逻辑.增加了FileBank存储Book的封面图片,统一管理图片资源. 新添加的Typ ...
- 记开发个人图书收藏清单小程序开发(七)DB设计
前面的书房初始化的前端信息已经完善,所以现在开始实现DB的Script部分. 新增Action:Shelf_Init.sql svc.sql CREATE SCHEMA [svc] AUTHORIZA ...
- 微信小程序开发系列一:微信小程序的申请和开发环境的搭建
我最近也刚刚开始微信小程序的开发,想把我自学的一些心得写出来分享给大家. 这是第一篇,从零开始学习微信小程序开发.主要是小程序的注册和开发环境的搭建. 首先我们要在下列网址申请一个属于自己的微信小程序 ...
- 微信小程序开发系列五:微信小程序中如何响应用户输入事件
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- 微信小程序开发系列七:微信小程序的页面跳转
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
随机推荐
- 前端通信:ajax设计方案(二)---集成轮询技术
上一篇文章介绍了ajax技术核心方法,和跨域的问题(只要后台支持跨域默认post就可以),这篇文章讲解一下使用ajax实现的轮询技术,至于iframe,SSE服务器单向推送,以及webSocket双工 ...
- redis-手写redis切片和非切片连接池并注入springboot中
spring-data整合了redispool, 并提供redisTemplate使用, 但有时需要用到shradedJedisPool, 就需要手动注入了 手写redispool并注入springb ...
- Linux 文件IO管理 - POSIX
以下是对POSIX的简短解释: POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操 ...
- JavaScript部分兼容性函数
1.getElementsByClassName() function getElementsByClassName(node,classname){ if(node.getElementsByCla ...
- SEO记录-1
第一天 formal dressesformal dresses 2013formal dresses salecheap formal dressesformal dresses onlinefor ...
- HTML常用的标签中,行内元素和块级元素
块元素(block element) HTML标签分类明细 * address - 地址 * blockquote - 块引用 * center - 举中对齐块 * dir - 目录列表 * div ...
- java并发编程的艺术(四)---ConcurrentHashMap原理解析
本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片.视频等原文的内容) 若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cn ...
- 记录:springmvc + mybatis + maven 搭建配置流程
前言:不会配置 spring mvc,不知道为什么那样配置,也不知道从何下手,那么看这里就对了. 在 IDEA 中搭建 maven + springmvc + mybatis: 一.在 IDEA 中首 ...
- python之线程queue
线程queue介绍 Queue的种类: FIFO: Queue.Queue(maxsize=0) FIFO即First in First Out,先进先出.Queue提供了一个基本的FIFO容器,使 ...
- cf623A. Graph and String(二分图 构造)
题意 题目链接 Sol 可以这样考虑,在原图中没有边相连的点的值肯定是a / c 那么直接二分图染色即可 #include<bits/stdc++.h> #define LL long l ...