КАТЕГОРИИ: Архитектура-(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
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
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)
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
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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |