记开发个人图书收藏清单小程序开发(十)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 ...
- 微信小程序开发系列一:微信小程序的申请和开发环境的搭建
我最近也刚刚开始微信小程序的开发,想把我自学的一些心得写出来分享给大家. 这是第一篇,从零开始学习微信小程序开发.主要是小程序的注册和开发环境的搭建. 首先我们要在下列网址申请一个属于自己的微信小程序 ...
- 微信小程序开发系列五:微信小程序中如何响应用户输入事件
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- 微信小程序开发系列七:微信小程序的页面跳转
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
随机推荐
- Java SPI机制和使用示例
JAVA SPI 简介 SPI 是 Java 提供的一种服务加载方式,全名为 Service Provider Interface.根据 Java 的 SPI 规范,我们可以定义一个服务接口,具体的实 ...
- CART树
算法概述 CART(Classification And Regression Tree)算法是一种决策树分类方法. 它采用一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的 ...
- j2ee高级开发技术课程第一周
一.课程目标 这学期开始了J2EE高级开发技术这门课,在此之前我学习了javaSE,为这门课的学习打下了一定的基础.到这学期的结束我希望我能熟悉javaee,能开发企业级应用,对开发轻量级企业应用的主 ...
- 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP
一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象. ...
- 使用C#利用cmd来调用java jar包获取其中的数据
其实也很简单,就是在C#中构建一个Process,启动jar包,并且给jar包传递参数 因为我并没有怎么学过JAVA,所以只写了个很小的Demo,就是根据传入的参数获取对应的数据 以下是JAVA De ...
- hdu 1885
Key Task Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- zookeeper watcher
ZooKeeper 的 watcher 机制主要包括客户端线程.客户端 WatchManager 和 ZooKeeper 服务器三部分. 工作方式:客户端在向 zk 服务器注册 Watcher 的同 ...
- Spring 配置数据源之一三兄弟
前期的准备工作,我们是使用的是maven,我们下载节点即可... 节点如下: <dependency> <groupId>org.springframework</gro ...
- csharp:获取 DNS、网关、子网掩码、IP
/// <summary> /// DNS.网关.子网掩码.IP /// 涂聚文 2015 /// </summary> public class IPAddressStrin ...
- BZOJ3832: [Poi2014]Rally(拓扑排序 堆)
题意 题目链接 Sol 最直观的思路是求出删除每个点后的最长路,我们考虑这玩意儿怎么求 设\(f[i]\)表示以\(i\)结尾的最长路长度,\(g[i]\)表示以\(i\)开始的最长路长度 根据DAG ...