昨晚完成了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. Android 7.0 FileProvider 使用说明

    FileProvider FileProvider 这个组件在Android 22.0.0 (也就是 Android 5.0 ) 版本下加入进Android系统,该组件是ContentProvider ...

  2. java-forkjoin框架的使用

    ForkJoin是Java7提供的原生多线程并行处理框架,其基本思想是将大任务分割成小任务,最后将小任务聚合起来得到结果.fork是分解的意思, join是收集的意思. 它非常类似于HADOOP提供的 ...

  3. Linux-(top,free)

    top命令 1.命令格式: top [参数] 2.命令功能: 显示当前系统正在执行的进程的相关信息,包括进程ID.内存占用率.CPU占用率等. top命令是Linux下常用的性能分析工具,能够实时显示 ...

  4. Nodejs学习笔记(十一)—数据采集器示例(request和cheerio)

    写在之前 很多人都有做数据采集的需求,用不同的语言,不同的方式都能实现,我以前也用C#写过,主要还是发送各类请求和正则解析数据比较繁琐些,总体来说没啥不好的,就是效率要差一些, 用nodejs写采集程 ...

  5. ASP.NET 多环境下配置文件web.config的灵活配置---转

    注意:本功能在.Net Core中已经不可用,暂时需手动修改web.config中的信息,或者将其设置在appsettings.XXX.json中,然后再使用web.config中的环境变量来制定使用 ...

  6. json对象按时间排序

    //正序var data = {"rows": [{"name": "张三","time": "2011/4/ ...

  7. 【转】C#中continue、break和return用法

    continue和break的用法一样,直接写上这个单词,后面加一个分号就行 比如: continue; break; 我们先来谈continue 看代码 for (int i=0; i<10; ...

  8. 三:vim常用快捷键

    窗口移动操作: j或者Ctrl+e(就是Ctrl+e):向下细微滚动窗口. k或者Ctrl+y:向上细微滚动窗口. h:向左细微滚动窗口. l:向右细微滚动窗口. gg:跳转到页面的顶部. G(就是s ...

  9. Docker(二):微服务教程

    Docker 是一个容器工具,提供虚拟环境.很多人认为,它改变了我们对软件的认识. 站在 Docker 的角度,软件就是容器的组合:业务逻辑容器.数据库容器.储存容器.队列容器......,Docke ...

  10. Docker(一):入门教程

    2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业. 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简单 ...