logo
Разработка CRM-системы библиотек

3.2.5.3 SQL-команда создания

CREATE TABLE [dbo].[Subjects]([idtitle] [int] NOT NULL,

[title] [varchar](50) NULL,

CONSTRAINT [PK_Subjects] PRIMARY KEY CLUSTERED

(

[idtitle] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

3.2.5.4 Демонстрация создания таблицы

На рисунке 5 представлен скриншот создания таблицы "Тематики".

Рис.5. создание таблицы "Тематики"

3.2.6 Создание таблицы "Subscription"

3.2.6.1 Назначение таблицы

Хранит информацию о абонементе на книгу, номер библиотеки, номер читателя, номер книги, дату выдачи и сдачи и плату.

3.2.6.2 Связи с таблицами

Поле idbook является ключевым в данной таблице, так же таблица содержит внешние ключи id и idreader.

3.2.6.3 SQL-команда создания

CREATE TABLE [dbo].[Subscription]([id] [int] NULL,

[idbook] [int] NULL,

[idreader] [int] NOT NULL,

[date_issue] [date] NULL,

[date_return] [date] NULL,

[advance] [money] NULL,

CONSTRAINT [PK_Subscription] PRIMARY KEY CLUSTERED

(

[idreader] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

3.2.6.4 Демонстрация создания таблицы

На рисунке 6 представлен скриншот создания таблицы "Абонемент".

Рис.6. создание таблицы "Абонемент"

3.3 Создание проекций

Проекции широко применимы в области бизнеса, так как на основе проекций удобно делать отчёты. Продемонстрирую 2 возможные проекции. Однако следует помнить, что через проекцию нельзя изменять данные, так как может быть использована группировка и вычисляемые поля.

3.3.1 Проекция V1

3.3.1.1 Назначение проекции

Найти книги, количество которых больше 10 в наличии и вывести id библиотеки, автора книги и её название.

3.3.1.2 Текст проекции на языке sql-запросов

SELECT id, count, author, name

FROM dbo.Books

GROUP BY id, count, author, name

HAVING (MIN(count) > 10)

3.3.1.3 Демонстрация проекции

На рисунке 7 продемонстрирован текст проекции 1 и результат её работы.

Рис. 7. Проекция 1.

3.3.1.4 Описание логики

Описание логики проекции представлено на рис.8

Рис.8 Описание логики проекции.

3.3.2 Проекция V2

3.3.2.1 Назначение проекции

Выдать имена читателей, которые брали книгу данную книгу.

3.3.2.2 Текст проекции на языке sql-запросов

SELECT dbo.Reader.fio, dbo.Books.name

FROM dbo.Subscription INNER JOIN

dbo.Reader ON dbo.Subscription.idreader = dbo.Reader.idreader AND dbo.Subscription.idreader = dbo.Reader.idreader INNER JOIN

dbo.Books ON dbo.Subscription.idbook = dbo.Books.idbook

WHERE (dbo.Subscription.idbook = 2)

3.3.2.3 Демонстрация проекции

На рисунке 9 продемонстрирован текст проекции 2 и результат её работы.

Рис. 9. Проекция 2

3.3.2.4 Описание логики

Описание логики проекции представлено на рис.10

Рис.10 Описание логики проекции.

3.4 Создание хранимой процедуры с курсором

Хранимая процедура -- объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Хранимые процедуры очень похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и локальные переменные, в них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. Курсор -- ссылка на контекстную область памяти. В некоторых реализациях языка программирования SQL -- получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи.

3.4.1 Назначение процедуры

Выдает дату выдачи и сдачи книги, плату, наименование и автора заданной книги.

3.4.2 Текст процедуры на языке SQL-запросов

USE [BD Library]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE Procedure2

@KODEBOOK int

AS

BEGIN

SET NOCOUNT ON;

SELECT dbo.Subscription.date_issue, dbo.Subscription.date_return, dbo.Subscription.advance

from dbo.Subscription