昨晚完成了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开发——新增图书信息的更多相关文章

  1. 记开发个人图书收藏清单小程序开发(三)DB设计

    主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...

  2. 记开发个人图书收藏清单小程序开发(五)Web开发

    决定先开发Web端试试. 新增Web应用: 选择ASP.NET Core Web Application,填写好Name和Location,然后点击OK. 注意红框标出来的,基于.NET Core 2 ...

  3. 记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息

    书房信息初始化已完成,现在开始处理图书信息新增功能. 主要是实现之前New Razor Pages的后台部分. 新增需要保存的Model:Book.InitSpec.cs /Models/Book.I ...

  4. 记开发个人图书收藏清单小程序开发(六)Web开发

    Web页面开发暂时是没有问题了,现在开始接上Ptager.BL的DB部分. 首先需要初始化用户和书房信息.因为还没有给其他多余的设计,所以暂时只有个人昵称和书房名称. 添加 Init Razor Pa ...

  5. 记开发个人图书收藏清单小程序开发(四)DB设计

    早上起来,又改动了一下: 主要是,将非常用信息全部拆分出来,让Table尽量的小,小到不能继续拆分了,这样区分DB逻辑.增加了FileBank存储Book的封面图片,统一管理图片资源. 新添加的Typ ...

  6. 记开发个人图书收藏清单小程序开发(七)DB设计

    前面的书房初始化的前端信息已经完善,所以现在开始实现DB的Script部分. 新增Action:Shelf_Init.sql svc.sql CREATE SCHEMA [svc] AUTHORIZA ...

  7. 微信小程序开发系列一:微信小程序的申请和开发环境的搭建

    我最近也刚刚开始微信小程序的开发,想把我自学的一些心得写出来分享给大家. 这是第一篇,从零开始学习微信小程序开发.主要是小程序的注册和开发环境的搭建. 首先我们要在下列网址申请一个属于自己的微信小程序 ...

  8. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  9. 微信小程序开发系列七:微信小程序的页面跳转

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

随机推荐

  1. 白月黑羽Python在线教程

    推荐白月黑羽Python在线教程 白月黑羽 站在初学者的角度为大家安排了Python学习教程,帮助大家迅速掌握程序开发技能. http://www.python3.vip/doc/tutorial/p ...

  2. Centos7下安装mysql5.6需要注意的点

    1.自带的Mariadb和mysql冲突需要卸载. 2.原先安装过的mysql没有卸载干净会导致安装失败. 3.mysql文件夹权限需要给够,my.cnf也是一样. 4.安装过程中如果出现的其他问题很 ...

  3. android学习-Activity和Service的生命周期

    详细请跳转原网页Activity和Service的生命周期(图) 不解释,不懂算我输 Activity的生命周期(图) Service的声明周期

  4. freepbx的SIP通话客户端X-lite Yate eyeBeam Linphone

    在上一篇文章安装freepbx后创建sip分机里我们已经创建好了SIP分机,接下来我们使用几大客户端进行登陆.我们接下来会使用到的软件有X-lite,Yate client,eyeBeam, Linp ...

  5. ssh 登录进入 docker container

    1.Container安装ssh服务,博主的linux是centos ① 安装ssh sudo yum install openssh-server #安装ssh服务器 service sshd st ...

  6. 模块打包工具webpack

    1.webpack的安装 1.1在安装node的基础上,npm install -g webpack(window版本,因为是全局安装,所以无所谓是哪个路径下) 1.2新建一个文件夹用于此项目  eg ...

  7. 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联

    浅析人脸检测之Haar分类器方法 一.Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸 ...

  8. 使用iTextSharp 解析html生成pdf,xmlworker不支持中文的解决办法

    http://www.micmiu.com/opensource/expdoc/itext-xml-worker-cn/ 参考上面的文章,虽然是java的,但是和.net是对应的. 下载   html ...

  9. div中让文字垂直居中

    在div中如何让文字垂直居中? 作者在刚接触web前端开发时就遇到了这个问题,一直没有记录下来,今天正好有空,便记录下来. 为了方便展示,我把style先直接写在了div里. 效果如下图所示: 图1. ...

  10. [日常] crontab的秒执行和串行化和多进程实现

    1. crontab的最低运行频率是,按照每分钟执行一次,通过在脚本中简单实现按秒级别运行 比如这条cron规则 , 每分钟执行一次脚本 * * * * * php /var/www/html/tes ...