Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Проектирование и разработка пользовательских представлений




Реализация ограничений целостности.

 

Ограничения целостности были реализованы следующим способом:

 

book_lending (CK_book_lending):

USE [Library]

GO

 

ALTER TABLE [dbo].[book_lending] WITH CHECK ADD CONSTRAINT [CK_book_lending] CHECK (([lending_date]<[delivery_date_fact] OR [delivery_date_fact]=NULL))

GO

 

ALTER TABLE [dbo].[book_lending] CHECK CONSTRAINT [CK_book_lending]

GO

book_lending (CK_book_lending_1):

USE [Library]

GO

 

ALTER TABLE [dbo].[book_lending] WITH CHECK ADD CONSTRAINT [CK_book_lending_1] CHECK (([lending_date]<[delivery_date_plan] OR [delivery_date_plan]=NULL))

GO

 

ALTER TABLE [dbo].[book_lending] CHECK CONSTRAINT [CK_book_lending_1]

GO

 

edition (DF_edition_edition_format_id):

USE [Library]

GO

 

ALTER TABLE [dbo].[edition] ADD CONSTRAINT [DF_edition_edition_format_id] DEFAULT ((1)) FOR [edition_format_id]

GO

 

edition (DF_edition_edition_genre_id):

USE [Library]

GO

 

ALTER TABLE [dbo].[edition] ADD CONSTRAINT [DF_edition_edition_genre_id] DEFAULT ((3)) FOR [edition_genre_id]

GO

 

edition (DF_edition_edition_number):

USE [Library]

GO

 

ALTER TABLE [dbo].[edition] ADD CONSTRAINT [DF_edition_edition_number] DEFAULT ((0)) FOR [edition_number]

GO

 

edition (DF_edition_edition_pubhouse_id):

USE [Library]

GO

 

ALTER TABLE [dbo].[edition] ADD CONSTRAINT [DF_edition_edition_pubhouse_id] DEFAULT ((1)) FOR [edition_pubhouse_id]

GO

 

edition_format (CK_edition_format):

USE [Library]

GO

 

ALTER TABLE [dbo].[edition_format] WITH CHECK ADD CONSTRAINT [CK_edition_format] CHECK (([format_penalty]>=(0)))

GO

 

ALTER TABLE [dbo].[edition_format] CHECK CONSTRAINT [CK_edition_format]

GO

 

library_card (CK_library_card_reader_pass_n):

USE [Library]

GO

 

ALTER TABLE [dbo].[library_card] WITH CHECK ADD CONSTRAINT [CK_library_card_reader_pass_n] CHECK (([reader_pass_n] like '[0-9][0-9][0-9][0-9][0-9][0-9]'))

GO

 

ALTER TABLE [dbo].[library_card] CHECK CONSTRAINT [CK_library_card_reader_pass_n]

GO

 

 

library_card (CK_library_card_reader_pass_s):

USE [Library]

GO

 

ALTER TABLE [dbo].[library_card] WITH CHECK ADD CONSTRAINT [CK_library_card_reader_pass_s] CHECK (([reader_pass_s] like '[0-9][0-9][0-9][0-9]'))

GO

 

ALTER TABLE [dbo].[library_card] CHECK CONSTRAINT [CK_library_card_reader_pass_s]

GO

 

 

В ходе физического моделирования были спроектированы 3 пользовательских представления:

· view_book_lending (Номер читательского билета, Фамилия, Имя, Отчество, Издание, Автор, Жанр, Формат издания, Издательство, Дата выдачи, Дата приёма (фактическая), Дата приёма (плановая), Пени) — данные о выдаче изданий пользователям на руки.

· view_edition (Название издания, Автор, Год издания, Общее количество, Оставшееся количество, Библиографические особенности, Жанр, Формат, Издательство, Номер издания) — список изданий библиотеки.

· view_library_card (Номер читательского билета, Фамилия, Имя, Отчество, Адрес, Телефон, Серия паспорта, Номер паспорта) — данные о читателях.

Реализованы данные представления были следующим образом.

view_book_lending

SELECT TOP (100) PERCENT dbo.library_card.library_card_number AS [Номер читательского билета], dbo.library_card.reader_surname AS Фамилия,

dbo.library_card.reader_first_name AS Имя, dbo.library_card.reader_middle AS Отчество, dbo.edition.edition_name AS Издание,

dbo.edition.edition_author AS Автор, dbo.genre.genre_name AS Жанр, dbo.edition_format.format_name AS [Формат издания],

dbo.publishing_house.pubhouse_name AS Издательство, book_lending_1.lending_date AS [Дата выдачи],

book_lending_1.delivery_date_fact AS [Дата приёма (фактическая)], book_lending_1.delivery_date_plan AS [Дата приёма (плановая)],

book_lending_1.penalty AS Пени, dbo.edition.edition_id AS [ID издания]

FROM dbo.book_lending AS book_lending_1 INNER JOIN

dbo.edition ON book_lending_1.edition_id = dbo.edition.edition_id INNER JOIN

dbo.edition_format ON dbo.edition.edition_format_id = dbo.edition_format.format_id INNER JOIN

dbo.genre ON dbo.edition.edition_genre_id = dbo.genre.genre_id INNER JOIN

dbo.library_card ON book_lending_1.library_card_id = dbo.library_card.library_card_id INNER JOIN

dbo.publishing_house ON dbo.edition.edition_pubhouse_id = dbo.publishing_house.pubhouse_id

view_edition

SELECT dbo.edition.edition_name AS [Название издания], dbo.edition.edition_author AS Автор, dbo.edition.edition_year AS [Год издания], dbo.edition.edition_count AS [Общее количество], dbo.edition.edition_count -

(SELECT COUNT(*) AS Expr1

FROM dbo.book_lending

WHERE (delivery_date_fact IS NULL) AND (edition_id = dbo.edition.edition_id)) AS [Оставшееся количество], dbo.edition.edition_biblfeatures AS [Библиографические особенности], dbo.genre.genre_name AS Жанр, dbo.edition_format.format_name AS Формат, dbo.publishing_house.pubhouse_name AS Издательство, dbo.edition.edition_number AS [Номер издания]

FROM dbo.edition INNER JOIN

dbo.edition_format ON dbo.edition.edition_format_id = dbo.edition_format.format_id INNER JOIN

dbo.genre ON dbo.edition.edition_genre_id = dbo.genre.genre_id INNER JOIN

dbo.publishing_house ON dbo.edition.edition_pubhouse_id = dbo.publishing_house.pubhouse_id

 

view_library_card

SELECT library_card_number AS [Номер читательского билета], reader_surname AS Фамилия, reader_first_name AS Имя, reader_middle AS Отчество, reader_address AS Адрес, reader_phone AS Телефон, reader_pass_s AS [Серия пасспорта], reader_pass_n AS [Номер пасспорта]

FROM dbo.library_card

 

Для выполнения всех необходимых транзакций, были созданы следующие хранимые процедуры, связанные с этими представлениями:

view_book_lending

· booklendinginsert — добавление записи о выдачи издания на руки читателю:

 

ALTER PROCEDURE [dbo].[booklendinginsert]

@librarycardid int,

@editionid int,

@lendingdate datetime,

@deliverydatefact datetime,

@deliverydateplan datetime,

@penalty money

AS

BEGIN

SET @lendingdate = SYSDATETIME()

if (

(select edition_count from edition where edition_id = @editionid) -

(select count(*) from book_lending where (edition_id=@editionid) and (delivery_date_fact <> 0))

)>0

INSERT INTO book_lending VALUES (@librarycardid, @editionid, @lendingdate, @deliverydatefact, @deliverydateplan, @penalty)

ELSE BEGIN RETURN @@ERROR END

SELECT @librarycardid = @@IDENTITY

END

 

· booklendingupd — обновление записи о выдаче книги читателю с добавлением даты возврата и добавлением суммы пени (если книга сдана с опозданием):

 

ALTER PROCEDURE [dbo].[booklendingupd]

@booklendingid int,

@deliverydatefact datetime

AS

BEGIN

UPDATE book_lending SET

delivery_date_fact = @deliverydatefact,

penalty = CASE

WHEN delivery_date_fact > delivery_date_plan THEN

(-DATEDIFF(day, delivery_date_fact, delivery_date_plan))*(select format_penalty from edition_format ef

inner join edition ed on ef.format_id=ed.edition_format_id

inner join book_lending bl on ed.edition_id=bl.edition_id

where bl.book_lend_id=@booklendingid)

ELSE NULL

END

WHERE book_lend_id = @booklendingid

END

 

· booklendingdel – удаление записи о выдаче издания читателю:

 

ALTER PROCEDURE [dbo].[booklendingdel]

@booklendingid int

AS

BEGIN

DELETE FROM book_lending WHERE book_lend_id = @booklendingid

END

 

· dolzhniki – возврат списка читателей, не сдавших издание или имеющих неуплаченное пени

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER FUNCTION dolzhniki()

RETURNS TABLE

AS

RETURN

(

SELECT * FROM view_book_lending

WHERE ([Дата приёма (плановая)]<[Дата приёма (фактическая)]) OR ([Дата приёма (фактическая)] is NULL)

)

GO

 

  • bookkeepersreturn – возвращение записей о выдаче книги по её номеру (экземпляры, находящиеся на руках):

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE FUNCTION bookkeepersreturn

(

@editionid int

)

RETURNS TABLE

AS

RETURN

(

SELECT * FROM view_book_lending

WHERE ([ID издания]=@editionid) and ([Дата приёма (фактическая)] is not NULL)

)

GO

 

  • booklendingreturn – возвращение истории выдачи конкретного издания:

 

USE [Library]

GO

/****** Object: UserDefinedFunction [dbo].[bookkeepersreturn] Script Date: 14.06.2012 12:23:27 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER FUNCTION [dbo].[booklendingreturn]

(

@editionid int

)

RETURNS TABLE

AS

RETURN

(

SELECT * FROM view_book_lending

WHERE ([ID издания]=@editionid)

 

  • booklendonday – возвращение списка выданных изданий по дате:

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE FUNCTION booklendonday

(

@date date

)

RETURNS TABLE

AS

RETURN

(

SELECT * FROM view_book_lending

WHERE cast([Дата выдачи] as date) = @date

)

GO

 

 

view_edition

· editioninsert – добавление издания в список изданий библиотеки:

 

ALTER PROCEDURE [dbo].[editioninsert]

@editionid int,

@editionname varchar(50),

@editionauthor varchar(50),

@editiongenreid int,

@editionformatid int,

@editionpubhouseid int,

@editionyear date,

@editioncount int,

@editionbiblfutures varchar(100),

@editionnumber int

AS

BEGIN

INSERT INTO edition VALUES (@editionname, @editionauthor, @editiongenreid, @editionformatid,

@editionpubhouseid, @editionyear, @editioncount, @editionbiblfutures, @editionnumber)

SELECT @editionid = @@IDENTITY

IF @@ERROR <>0

PRINT 'Ошибка:'+ltrim(str(@@error))

END

 

· editionupd – редактирование информации об издании:

 

ALTER PROCEDURE [dbo].[editionupd]

@editionid int,

@editionname varchar(50),

@editionauthor varchar(50),

@editiongenreid int,

@editionformatid int,

@editionpubhouseid int,

@editionyear date,

@editioncount int,

@editionbiblfutures varchar(100),

@editionnumber int

AS

BEGIN

UPDATE edition SET

edition_name = @editionname,

edition_author = @editionauthor,

edition_genre_id = @editiongenreid,

edition_format_id = @editionformatid,

edition_pubhouse_id = @editionpubhouseid,

edition_year = @editionyear,

edition_count = @editioncount,

edition_biblfeatures = @editionbiblfutures,

edition_number = @editionnumber

WHERE edition_id = @editionid

IF @@ERROR <>0

PRINT 'Ошибка:'+ltrim(str(@@error))

END

 

· editiondel — удаление издания из списка изданий:

 

ALTER PROCEDURE [dbo].[editiondel]

@editionid int

AS

BEGIN

DELETE FROM edition WHERE edition_id = @editionid

END

 

  • editionbydate – возвращение списка изданий, изданных:

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE FUNCTION editionbydate

(

@datea date,

@dateb date

)

RETURNS TABLE

AS

RETURN

(

SELECT * FROM view_edition

WHERE ([Год издания]>@datea) and ([Год издания]<@dateb)

)

GO

 

 

Таким образом реализованы основные хранимые процедуры и функции, используемые для решения требуемых от ИС «Библиотека» задач.

Заключение.

В ходе курсового проекта была спроектирована база данных для ИС «Библиотека». Проектирование было разделено на три последовательных этапа:

· Концептуальное проектирование – создание ER-модели предметной области, определение типов сущностей, связей, атрибутов.

· Логическое проектирование – определение набора отношений, необходимого для представления сущностей, связей и атрибутов, выявленных в процессе концептуального моделирования, а также проверка с помощью правил нормализации. Определение ограничений целостности.

· Физическое проектирование – заключительный этап – разработка базы данных в СУБД MS SQL Server – определение состава и структуры таблиц, реализация ограничений целостности, а также пользовательских представлений.

Данная база данных готова к использованию в ИС «Библиотека».




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 390; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.