ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования __...
19 downloads
334 Views
6MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования _____________________________________ ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Макурин Ю.Д. Сивохин А.В.
ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ БАЗ ДАННЫХ И КЛИЕНТСКИХ ПРИЛОЖЕНИЙ В СРЕДЕ MS VISUAL STUDIO.NET Учебное пособие
ПЕНЗА 2010
УДК 681.3
Макурин Ю.Д. Сивохин А. В. Проектирование и реализация баз данных и клиентских приложений в среде MS Visual Studio.NET. Учебное пособие. – Пенза: Частная типография Тугушева, 2010 – 230с. Рассматриваются вопросы применения визуальной объектноориентированной среды MS Visual Studio.NET для создания баз данных и клиентских приложений на основе технологии клиент-сервер. Изложение материала начинается с анализа предметной области, выделения ее сущностей, определения атрибутов этих сущностей, установления связей между ними и обоснования выбора реляционной модели данных. После анализа информационных задач, решаемых пользователями для данной предметной области, формулируются требования как к базе данных, так и к клиентскому приложению информационной системы, и строится сценарий ее поведеня. Далее дается подробное описание, как используя мощные средства проектирования, реализации и отладки, можно осуществить создание и функциональное тестирование проектов базы данных и клиентского приложения, а также всех компонент системы: таблиц, представлений, всевозможных запросов, хранимых процедур, триггеров различных категорий и графических интерфейсов серверного и клиенского уровней. В заключение определяется порядок конфигурирования информационной системы для обеспечения ее функциональной полноты, удобства использования и дальнейшего развития. Учебное пособие подготовлено на кафедре «Математическое обеспечение и применение ЭВМ» Пензенского Государственного университета и предназначено для студентов всех специальностей, где предусмотрено изучение дисциплин «Базы данных», «Системы управления базами данных» и «Информационные системы».
©В.П. Сивохина ©Оформление: Т.А. Макурина и Д.В. Макурин 2
Введение В настоящее время большое распространение получила новая технология построения информационных систем — технология «клиент-сервер». Эта технология дает ряд неоспоримых преимуществ по сравнению с технологией предыдущего поколения — технологией «файл-сервер». В частности, она предоставляет большие возможности по защите данных от несанкционированного обращения и разграничению прав доступа на уровне отдельных записей и полей, дает возможность работы с большими мультимедийными и нестандартными данными. Новая технология позволяет работать как в локальных, так и в глобальных сетях, а также в сети Internet. Системы, построенные по новой технологии «клиент-сервер», отличаются высокой степенью безопасности, территориально независимы и не требовательны к аппаратной мощности клиентских станций. Широкие возможности по поддержке этой технологии имеет визуальная объектно-ориентированная среда MS Visual Studio.NET, которая рассматривается в данном учебном пособии. Учебное пособие состоит из шести разделов. В первом разделе изложение материала начинается с анализа предметной области, выделения ее сущностей, определения атрибутов этих сущностей, установления связей между ними и обоснования выбора реляционной модели данных. После анализа информационных задач, решаемых пользователями для данной предметной области, формулируются требования как к базе данных, так и к клиентскому приложению информационной системы, и строится сценарий ее поведеня. Во втором разделе дается краткая характеристика инструментальных средств визуальной объектно-ориентированной среды MS Visual Studio.NET как для создания баз данных, так и для реализации клиентских приложений. В последующих разделах дается подробное описание того, как используя мощные средства проектирования, реализации и отладки, можно осуществить создание и функциональное тестирование проектов базы данных и клиентского приложения, а также всех компонент системы: таблиц, представлений, всевозможных запросов, хранимых процедур, триггеров различных категорий и графических интерфейсов серверного и клиенского уровней. В шестом разделе определяется порядок конфигурирования информационной системы для обеспечения ее функциональной полноты, удобства использования и дальнейшего развития. В приложениях приводятся экранные формы, скрипты, сценарии и модули информационной системы, которые позволяют выполнить те или иные процедуры по созданию компонент системы, вводу и отображению данных, настройке и функциональному тестированию, а также переносу и развертыванию системы на другом оборудовании или платформе.
3
1 Проектирование информационной системы “ Живопись, графика, фотография ” 1.1 Анализ предметной области и разработка модели данных Предметная область – это множество всех предметов, или объектов некоторой части реального мира, свойства которых и отношения между которыми рассматриваются в научной теории или в практической деятельности человека. Для сбора, хранения, поиска и выдачи информации о предметной области и ее объектов в настоящее время широко используются информационные системы, являющиеся комплексом аппаратных и программных средств. Рассмотрим, каким образом можно осуществить проектирование и реализацию упрощенной базы данных и несложного клиентского приложения информационной системы для предметной области “Живопись, графика, фотография” по обслуживанию хранилищ, музеев, выставок и аукционов. Живопись, графика и фотография отражают действительность в наглядных, зрительно воспринимаемых образах, в которых узнаются формы самой действительности. Благодаря методам обобщения, типизации и воображению художника они позволяют эстетически раскрывать временное развитие событий, духовный облик, переживания, мысли, взаимоотношения людей, воплощать общественные идеи. Жи́вопись — вид изобразительного искусства, связанный с передачей зрительных образов посредством нанесения красок на твёрдую или гибкую основу; созданием изображения с помощью цифровых технологий; а также произведения искусства, выполненные такими способами. Наиболее распространены произведения живописи, выполненные на плоских или почти плоских поверхностях, таких как натянутый на подрамник холст, дерево, картон, бумага, обработанные поверхности стен и т. д. В том числе к живописи относят и выполненные красками изображения на декоративных и церемониальных сосудах, поверхности которых могут иметь сложную форму. Живописец может создавать свои изображения на камне, штукатурке, холсте, шёлке, бумаге, металле, асфальте, бетоне и даже на коже (в том числе человеческой ⎯ татуировка). Живопись встречается и соседствует с пластическими искусствами, в том числе с архитектурой, скульптурой; она может участвовать в формировании искусственной и природной среды. Живопись, как и другие изобразительные искусства, иллюзорна: она — это имитация трёхмерного пространства в плоскости, достигаемая посредством линейной и цветовой перспективы. Но её визуальный и цветовой аспект (глаз воспринимает в одно мгновение практически бесконечную информацию) обуславливает исключительное место живописи среди всех изобразительных искусств.
4
Техники живописи практически неисчерпаемы. Всё, что оставляет какойлибо след на чём-то, строго говоря, является живописью: живопись создаётся природой, временем и человеком. Это уже отметил Леонардо да Винчи. Традиционные техники живописи: энкаустика, темперная (с яйцом), настенная (известковая), клеевая и других типов. С XV века становится популярной живопись масляными красками; в XX веке появляются синтетические краски со связующим веществом из полимеров (акрилик, винилик и др.). Краски могут приготовляться из натуральных и искусственных пигментов. Гуашь, акварель, китайскую тушь и полурисовальную технику (пастель) — также относят к живописи. Графика (греч. γραφικος — «письменный», от греч. γραφω — «пишу») — вид изобразительного искусства, использующий в качестве основных изобразительных средств линии, штрихи, пятна и точки. Цвет также может применяться, но в отличие от живописи, здесь он играет вспомогательную роль. При рисовании графикой обычно используют не больше одного цвета (кроме основного черного), в редких случаях — два. Кроме контурной линии в графическом искусстве широко используется штрих и пятно, также контрастирующие с белой (а в иных случаях также цветной, чёрной, или реже — фактурной) поверхностью бумаги — главной основой для графических работ. Сочетанием тех же средств могут создаваться тональные нюансы. Наиболее общий отличительный признак графики — особое отношение изображаемого предмета к пространству, роль которого в значительной мере выполняет фон бумаги (по выражению русского мастера графики В. А. Фаворского — «воздух белого листа»). В зависимости от предназначения графика подразделяется на несколько видов: а) Станковая графика (рисунок, гравюра, лубок). б) Книжная графика ⎯ один из видов графического искусства: книжные
иллюстрации, виньетки, заставки, буквицы, обложки, суперобложки и т. п. С рукописной книгой во многом связана история рисунка, а с печатной книгой ⎯ развитие гравюры и литографии. В древнем мире появился шрифт, также относимый к графике, поскольку сама по себе буква является графическим знаком. в) Журнальная и газетная графика. г) Компьютерная графика (также маши́нная гра́фика) — область деятель-
ности, в которой компьютеры используются как инструмент как для синтеза изображений, так и для обработки визуальной информации, полученной из реального мира. Также компьютерной графикой называют результат такой деятельности. Фотогра́фия (фр. photographie от др.-греч. φως / φωτος — свет и γραφω — пишу; светопись — техника рисования светом) — получение и сохранение 5
статичного изображения на светочувствительном материале (фотоплёнке или фотографической матрице) при помощи фотокамеры. Также фотографией или фотоснимком, или просто снимком называют конечное изображение, полученное в результате фотографического процесса и рассматриваемое человеком непосредственно (имеется в виду как кадр проявленной плёнки, так и изображение в электронном или печатном виде). Фотография основана на достижениях науки, прежде всего в области оптики, механики и химии. Развитие на нынешнем этапе цифровой фотографии происходит благодаря электронным и информационным технологиям. По своим выразительным возможностям фотография не уступает, а иногда даже превосходит традиционное изобразительное искусство. В зависимости от принципа работы светочувствительного материала фотографию принято делить на три больших подраздела: а) Плёночная фотография — основана на фотоматериалах, в которых происходят фотохимические процессы. б) Цифровая фотография — в процессе получения и сохранения изображения происходят перемещения электрических зарядов (обычно в результате фотоэффекта и при дальнейшей обработке), но не происходит химических реакций или перемещения вещества. Правильнее было бы называть такую фотографию электронной, так как в ряде устройств, традиционно относимых к «цифровым», происходят аналоговые процессы (такова самая первая камера с электронной матрицей Sony Mavica, таковы многие дешёвые телекамеры систем видеонаблюдения). в) Электрографические и иные процессы, в которых не происходит химических реакций, но происходит перенос вещества, образующего изображение. Специального общего названия для этого раздела не выработано, до появления цифровой фотографии часто употреблялся термин «бессеребряная фотография». Также употребляются следующие устойчивые словосочетания: а) Галогеносеребряная фотография для галогеносеребряного фотографического процесса. б) Бессеребряная фотография — для всех остальных фотографических процесссов. в) Аналоговая фотография — как синоним плёночной фотографии, в противопоставлении цифровой. г) Аналоговая печать, оптическая печать — получение фотоснимков путём оптического увеличения с негатива либо использования специального проектора (для оптической печати цифровых фотографий), в противопоставлении цифровым методам печати. Получение движущихся изображений, основанное на фотографических принципах, называется кинематографией. Проектирование программного обеспечения любой информационной системы включает следующие этапы: 6
1. Анализ предметной области и выработка требований к системе. 2. Логическое представление реальности. 3. Идентификация и проектирование видимых сущностей. 4. Разработка абстрактных (поддерживаемых) сущностей и концептуальной схемы базы данных. 5. Проектирование структуры приложения. Анализ предметной области начинается с выделения сущностей и определения их свойств атрибутов. Выделенные сущности могут быть двух типов: видимые сущности и поддерживаемые сущности. Видимые сущности представляют собой объекты предметной области, которые может распознать человек. Поддерживаемые сущности, или абстрактные сущности разрабатываются проектировщиком базы данных для физической поддержки общей логической модели. Выделим базовые сущности рассматриваемой предметной области и опишем их атрибуты. Авторы (Authors) – это создатели произведений живописи, графики или фотографий. Атрибутами сущности являются: а) код автора (Author Code); б) фамилия автора (Author Family Name); в) имя автора (Author First Name); г) отчество автора (Author Father Name); д) дата рождения автора (Author Birthdate); е) дата смерти автора (Author Deathdate); ж) код страны проживания автора (Country Code); з) место проживания автора (Author Place). Произведения (Creations) – это картины на бытовые и исторические темы, пейзажи, портреты, натюрморты, панно, панорамы, настенные росписи, гравюры, литографии, эстампы и художественные фотографии. Атрибутами сущности являются: а) код произведения (Creation Code); б) название произведения (Creation Name); в) код жанра (Genere Code); г) код средства создания (Tools Code); д) код автора (Author Code); е) дата создания (Creation Date); ж) код страны (Country Code); з) код места нахождения (Placement Code); и) цена (Price). Жанры (Generes) – это исторически сложившиеся внутренние подразделения во всех видах изобразительного искусства или фотографии. Атрибутами сущности являются: а) код жанра (Genere Code); 7
б) название жанра (Genere Name). Средства создания (Tools) – это наборы инструментов, приборов, красок и носителей, используемых для создания произведения живописи, графики или фотографий. Атрибутами сущности являются: а) код средств создания (Tools Code); б) описание средств создания (Tools Description). Страны (Countries) – это государства, на территории которых хранятся, выставляются или продаются произведения живописи, графики и фотографии. Атрибутами сущности являются: а) код страны (Country Code); б) название страны (Country Name). Места нахождения (Placements) – это места, где хранятся, выставляются или продаются произведения живописи, графики и фотографии. Атрибутами сущности являются: а) код места нахождения (Placement Code); б) название места нахождения (Placement Name).
Объекты реального мира, помимо непосредственных, прямых связей, имеют друг с другом иные, более сложные причинно-следственные связи. Эти связи и процессы должны каким-то образом отражаться в базе данных, если мы имеем в виду не статичное хранилище, а информационную модель части реального мира. Иными словами, в базе, помимо собственно данных и непосредственных связей между ними, должны храниться знания о данных, а она сама должна адекватно отражать процессы, происходящие в реальном мире. Следовательно, необходимо иметь средства хранения и управления такой информацией. Данные требования выливаются в решение следующих задач: а) необходимо, чтобы база данных в любой момент времени правильно отражала состояние предметной области – данные должны быть взаимно непротиворечивыми; б) база данных должна отражать правила предметной области, законы, по которым она функционирует (business rules); в) необходим постоянный контроль состояния базы данных, отслеживание всех изменений, и адекватная реакция на них; г) необходимо, чтобы возникновение некоторой ситуации в базе данных четко и оперативно влияло на ход выполнения прикладной программы, поэтому многие программы требуют оперативного оповещения о всех происходящих в базе изменениях. По способу установления связей между сущностями различают три модели: 1) Иерархическая модель данных представляет собой дерево, вершинами которого являются сущности, а дугами – отношения между ними. Достоинством этой модели данных является высокая эффективность. Недостатками являются отсутствие строгой математической основы; неоднородность структуры; 8
неполнота представления, так как не любую предметную область можно представить деревом; асимметрия отношений между сущностями и сложность реорганизации структуры данных. 2) Сетевая модель данных – это модель в виде графа произвольного вида, т.е. в виде совокупности поименных узлов, связанных произвольным образом поименными дугами. Узлами являются сущности, а дугами – разнообразные отношения между этими сущностями. Достоинствами сетевой модели являются адекватность представления предметной области и равноправие между данными (симметрия). Недостатки – это сложность, неоднородность структуры, отсутствие строгой математической основы, невысокая эффективность и сложная процедура реорганизации такой модели. 3) Реляционная модель данных – совокупность n-арных отношений, каждая из которых представляет соответствующую сущность предметной области. Имеется строгая математическая основа – реляционная алгебра (исчисление). Данные в отношениях (атрибуты) являются равноправными, и любые отношения легко реорганизовывать. Модель данных имеет много достоинств: простота, однородность, полнота представления предметной области. Недостатком такой модели является низкая эффективность вследствие разобщенности семантически взаимосвязанных данных. Для разработки базы данных выбираем реляционную модель данных ввиду ее широкой популярности. Реляционная модель для анализируемой предметной области представлена на рисунке 1. На физическом уровне отношения представляются таблицами, атрибуты ⎯ столбцами, а наборы значений атрибутов (кортежи) ⎯ строками. Таблица должна иметь уникальное в пределах базы данных имя, оно называет сущность предметной области, а каждая строка конкретный объект; столбец – совокупность значений конкретного атрибута рассматриваемых объектов. Эти значения выбираются из множества допустимых значений – домена. Каждый столбец имеет имя, уникальное в пределах таблицы. В отличие от полей строки не имеют имен, количество строк в таблице логически не ограничено. Любая таблица должна иметь один или несколько столбцов, значение которых однозначно идентифицируют каждую ее строку. Столбец или их комбинация, обладающая таким свойством, называется первичным ключом. Таким образом, он должен обладать свойством уникальности, другим его свойством должна быть минимальность, когда ни один из входящих в ключ столбцов не может быть исключен из него без нарушения свойства уникальности. Для поддержания связей между таблицами используются внешние ключи, когда в данной таблице используются поля, являющиеся первичными ключами для другой таблицы. 9
Рисунок 1 ─ Реляционная модель данных предметной области 10
Основные требования при физической реализации реляционной базы данных таковы: а) каждая таблица должна иметь уникальное в базе данных имя и состоять из однотипных строк; б) каждая таблица должна состоять из фиксированного числа столбцов и простых (не составных) значений в каждом столбце; в) ни в какой момент времени в таблице не должно быть двух строк, дублирующих друг друга; строки должны отличаться хотя бы одним значением, чтобы была возможность однозначно идентифицировать любую строку таблицы; г) каждому столбцу должно быть присвоено уникальное имя; д) полное информационное содержание базы данных должно быть представлено в виде явных значений самих данных и только таким образом, а не использованием указателей или ссылок; е) при обработке данных должно быть обеспечено свободное обращение к любой строке и столбцу. Для этих целей используется формальный аппарат ограничений на формирование таблиц. Этот аппарат называется нормализацией таблиц. Имеется несколько уровней нормализации: а) таблица находится в первой нормальной форме, когда она не содержит повторяющихся полей и составных значений полей; б) таблица находится во второй нормальной форме, когда она удовлетворяет требованиям первой нормальной формы и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом; в) таблица находится в третьей нормальной форме, когда она удовлетворяет требованиям второй нормальной формы и ни одно из ее не ключевых полей функционально не зависит от любого другого не ключевого поля. Это объясняет независимые изменения любого не ключевого поля.
11
1.2 Анализ информационных задач и круга пользователей системы Информационная система создаётся для обслуживания художников, фотографов, журналистов, а также менеджеров и других сотрудников компаний, занимающихся хранением, выставками и продажей произведением живописи, графики и фотографий, представляющих художественную ценность. База данных должна содержать сведения об авторах произведений живописи и графики, фотографах, о жанре произведений искусства и средствах их создания, а также о месте и стране, где хранится или выставляется произведение. Графический интерфейс должен предоставлять максимум удобств для всех категорий пользователей этой системы. Сценарий ее работы представлен на рисунке 2. Информационная система должна решать следующие задачи: а) ставить на учет места хранения представляющие художественную ценность произведения живописи и графики, а также фотографии известных авторов; б) отслеживать перемещения произведений, вызванные сменой владельца, участием на выставке или аукционе; в) регулярно производить переоценку произведений; г) дополнять базу данных по мере создания новых произведений; д) отображать в удобном для пользователя виде сведения об авторах и их произведениях; е) обеспечивать строгую фильтрацию данных при их вводе; ж) предотвращать случайную потерю хранящихся сведений; з) производить обновление сведений; и) производить корректировку неточных сведений, хранящихся в базе; к) обеспечивать целостность и непротиворечивость данных в системе; л) после обновления базы данных осуществлять ее копирование на надежные носители информации; м) содержать на языке Transact-SQL сценарии для создания базы данных, всех ее объектов и ввода учтенных сведений об авторах и их произведениях; н) поддерживать по Интернет контакты с заинтересованными фирмами, группами и физическими лицами; о) составлять и отправлять отчеты во все инстанции, откуда поступил запрос на получение сведений о состоянии учетного фонда произведений; п) обеспечивать электронной документацией по работе и обслуживанию информационной системы.
12
1.3 Выработка требований и ограничений для системы В соответствии с характером предметной области, целью и задачами проектируемой информационной системы определяются следующие требования и ограничения: а) каждое произведение хранится только в одном месте; б) один автор может иметь несколько произведений, хранящихся в нескольких местах; в) цена произведений может изменяться со временем; г) данные об авторах и их произведениях предоставляются системе и хранятся только на русском языке; д) при вводе данных производится их контроль на наличие недопустимых символов; ж) произведения могут перемещаться в другие страны и места в связи со сменой владельца или участием в выставках и аукционах; з) для дат задается лишь верхняя грань, так как допустимая нижняя грань может быть только годом 1753 ⎯ годом принятия Григорианского календаря, причем задание верхней грани производится в канун Нового года; к) при использовании управляющих символов шаблона в качестве обычных следует использовать ключевое слово ESCAPE; л) некоторые данные об авторах и их произведениях могут отсутствовать.
13
Рисунок 2 ─ Сценарий работы информационной системы
14
2 Выбор инструментальных средств для проектирования и реализации информационной системы 2.1 Выбор инструментальных средств для проектирования и реализации базы данных Язык структурных запросов Transact-SQL и система управления базами данных Microsoft SQL Server, встроенные в визуальную объектноориентированную студию разработки Visual Studio.NET, позволяют создавать локальные, удаленные и распределенные базы данных и графический интерфейс для их проектирования, тестирования и использования. Студия обеспечивает также применение современных языков программирования для создания разнообразных приложений и информационных систем. Именно эти средства выбираются для физической реализации проектируемой базы данных. Система программирования SQL Server относится к классу командноинтерпретирующих систем сверхвысокого уровня. Единицами действий системы являются команды, исполняемые в режиме интерпретации сразу же по мере их поступления в сервер. Основой этой системы программирования является проблемно-ориентированный структурированный язык запросов Transact-SQL (Transaction Structured Query Language), который расширяет и развивает возможности стандарта языка ANSI SQL-92. Язык Transact-SQL включает следующие средства: данные различного типа баз данных и переменных; константы, стандартные и ограниченные идентификаторы; арифметические и логические выражения, включающие константы, переменные, имена столбцов таблиц, функции, подзапросы и условные выражения, а также выражения, взятые в круглые скобки; команды для создания, изменения и удаления баз данных и их объектов, а также для определения запросов на ввод, обработку и извлечение данных; управляющие программные структуры, определяющие условия и порядок выполнения команд в заданной последовательности или пакете команд; встроенные (системные) и определяемые пользователем функции; встроенные (системные) и определяемые пользователем хранимые процедуры. В системе могут храниться, помимо функций и процедур, последовательности (пакеты) команд, которые называются скриптами. Если скрипт описывает процесс создания базы данных или каких-либо ее объектов, то такой скрипт называется сценарием. Сценарии позволяют переносить структуру базы данных от одного сервера к другому, а также структуру таблиц и других объектов в различные базы данных. Скрипты хранятся в текстовых файлах. Функции и хранимые процедуры баз данных позволяют уменьшить объем запросов, передаваемых от клиента к серверу, что повышает общую производительность системы. Наличие исходного кода для этих объектов упрощают сопровождение программных комплексов и внесение изменений в них.
15
В языке Transact-SQL существует несколько способов передачи данных между командами. Одним из таких способов является передача данных через локальные переменные, объявляемые следующим образом: DECLARE {@имя локальной переменной тип данных}[,…n] Таким образом, знак @ является признаком имени локальной переменной. Этот же знак используется для определения имен параметров функций и хранимых процедур. Часть синтаксиса [,…n]означает повторение синтаксической конструкции, взятой в фигурные скобки. Примеры объявлений: DECLARE @Ivar int, DECLARE @IBit bit Значения переменным можно присвоить с помощью команд SET и SELECT. Командой SET можно присвоить значение только одной переменной: SET @Ivar = 5 SET @IBit = 0 Для присваивания значений нескольким переменным, вычисляемых с помощью выражений, следует использовать команду SELECT, которая выводит результаты в окно Grids: SELECT @Ivar = SUM (price) FROM titles _ _ см. окно Result. Для вывода значений переменных следует использовать ту же команду SELECT.
16
2.2 Выбор инструментальных средств для проектирования и реализации клиентского приложения .NET Framework — это платформа для построения и исполнения приложений. Ее основные компоненты — общеязыковая исполняющая среда (Common Language Runtime CLR) и библиотека классов .NET Framework (FCL). CLR абстрагирует сервисы ОС и служит механизмом для исполнения управляемых приложений (Managed Applications), любое действие которых должно получить одобрение со стороны CLR. FCL предоставляет объектноориентированный API, к которому обращаются управляемые приложения. При написании приложений для .NET Framework нет необходимости использовать Windows API, MFC, ATL, COM и другие инструменты и технологии. Каждый байт кода, написанный для этой инфраструктуры, либо исполняется CLR, либо получает ее разрешение на исполнение за ее пределами. Ничто не происходит без участия CLR. Программа CLR расположена поверх ОС и предоставляет виртуальную среду для управляемых приложений. При запуске управляемой программы CLR загружает содержащий ее модуль и исполняет его код. Код, предназначенный для CLR, называется управляемым кодом и состоит из команд псевдомашинного языка — общего промежуточного языка (Common Intermediate Language CIL). Команды CIL компилируются в машинный код (обычно код процессора x86) по запросу (just-in-time) в период выполнения. Обычно компиляция любого метода происходит лишь раз — при первом его вызове, и затем результат компиляции кэшируется в памяти, чтобы при повторном вызове он мог быть исполнен без задержки. Код, который никогда не вызывается, никогда и не компилируется. Хотя компиляция по запросу, несомненно, снижает производительность, эти накладные расходы компенсируются тем, что на протяжении исполнения приложения каждый метод компилируется не более раза, а также огромными усилиями разработчиков программы CLR сделать JIT-компилятор как можно быстрее и эффективнее. Выбор языка для среды CLR программирования становится практически вопросом личных предпочтений. «Общеязыковая» в словосочетании «общеязыковая исполняющая среда» указывает на то, что CLR безразлична к языкам программирования. В других средах язык, на котором написано приложение, неизбежно влияет на структуру и работу последнего. Так, в программе на Visual Basic сложно запускать новые потоки. Хуже того, современные языки, такие как Visual Basic и Visual C++, используют разные API, и поэтому знания, приобретенные вами при написании Windows-программ на Visual Basic, будут стоить весьма немного, когда потребуется написать DLL на C++. .NET Framework все меняет. Язык — это просто синтаксическое устройство для генерации CIL и за немногочисленными исключениями все, что 17
можно сделать на одном языке, возможно и на всех остальных. Более того, независимо от языка, на котором они написаны, все управляемые приложения используют один и тот же интерфейс прикладного программирования: API библиотеки классов .NET Framework. Перенос приложения Visual Basic на Visual C++ лишь немногим проще написания приложения с нуля. В то же время перенос приложения Visual Basic .NET на языке С# (или наоборот) гораздо проще. В прошлом несовершенство инструментов для преобразования программ из одного языка в другой делало их практически бесполезными. Визуальная объектно-ориентированная среда программирования Visual Studio 2005 и язык C# предоставляют полный набор указанных возможностей и позволяют быстро, эффективно и надежно реализовать все требования для клиентского приложения информационной системы.
18
3 Проектирование и реализация базы данных системы 3.1 Создание проектов и баз данных в среде Microsoft Visual Studio В среде Microsoft Visual Studio работа по созданию баз данных начинается с построения специального проекта типа Database, который выбирается в окне, открывающемся после исполнения команды среды File/New/Project. В приложении А приведены порядок построения проекта базы данных, автоматически создаваемые при этом папки и файлы, а также содержимое текстовых файлов для разрабатываемой информационной системы. Назначение папок и файлов вновь созданного проекта базы данных следующее (см. рисунки 3 и 4): а) Solution ‘MakurinDatabaseProject’ ⎯ папка решений проекта; б) папка MakurinDatabaseProject ⎯ для проектных файлов базы данных с расширениями *.sln, *.dbp, *.mdf и *.ldf; г) папка Change Scripts ⎯ для сценариев изменения базы данных и ее объектов, содержащая файлы с расширением *.sql; д) папка Create Scripts ⎯ для автоматически генерируемых сценариев построения объектов, созданных визуально и содержащая файлы с системными именами и расширением *.sql е) папка Queries ⎯ для построения запросов пользователя, содержащая файлы с расширением *.sql; ж) текстовый XML-файл MakurinDatabaseProject.sln ⎯ для описания решений проекта; з) текстовый XML-файл MakurinDatabaseProject.dbp ⎯ для описания папок и файлов проекта; и) основной двоичный файл MakurinDatabase.mdf ⎯ для хранения данных базы и сведений об ее объектах; к) двоичный файл MakurinDatabase_log.ldf ⎯ для журнала транзакций. Затем в этот проект могут быть добавлены в неограниченном количестве новые базы данных, папки, любые файлы и даже существующие проекты (см. разделы 4.2 и 6, а также приложение И). Новая пользовательская база данных создается с помощью той же команды File/New/Project… среды Microsoft Visual Studio.NET или SQL-командой CREATE DATABASE. В любом случае для создания базы данных и для ее обслуживания нужно иметь соответствующие права. По умолчанию такими правами обладают члены фиксированных ролей сервера sysadmin и dbcreator. При необходимости такие права можно предоставить и другим пользователям. Лицо, создающее базу данных, автоматически становится ее владельцем. Имя базы данных должно точно отражать ее назначение и создаваться по правилам построения системных идентификаторов. Длина имени не более 128 символов. При создании базы данных могут использоваться файлы трех типов: первичный (один), вторичный (ни одного или несколько) и для журнала 19
транзакций (один, причем если он не указан, то система создает его автоматически). Для удобства обслуживания и для повышения эффективности работы базы данных можно использовать группы файлов в качестве первичных, вторичных и для журнала транзакций. И при использовании групп первичный файл только один. Определив логическую структуру файлов и их имена, необходимо определить их физические характеристики: первоначальный размер, максимальный размер и приращение, если для файла предусматривается его рост по мере накопления данных. Приращение задается в мегабайтах. Затем следует указать папки и устройства, где наиболее целесообразно разместить файлы. Для обеспечения распараллеливания операций ввода-вывода файлы одной группы желательно размещать на различных устройствах. Для обеспечения максимальной защищенности от копирования информации соответствующие файлы данных следует размещать на не форматированных (сырых) разделах, которые создаются утилитой fdisk.exe MS-DOS. На таких разделах не существует файловой системы FAT или NTFS, и созданный сервером файл не доступен операционной системе. При работе системы необходимо следить за наличием свободного пространства в базе данных пользователя и в системной базе tempdb, при необходимости добавляя в них новые файлы. Эта возможность обеспечивается сервером SQL Server 2005.
Рисунок 3 ⎯ Состояние сервера после создания проектируемой базы данных 20
Рисунок 4 ⎯ Папки и файлы проекта созданной базы данных Помимо файлов при создании базы данных можно задать сопоставление знаков, которое будет использоваться при сортировках в этой базе по умолчанию. Если сопоставление не задать, тогда будет действовать сопоставление, указанное при установке сервера. Параметр FOR LOAD оставлен для обратной совместимости со старыми версиями. В процессе эксплуатации созданной базы данных возникает необходимость изменить либо физические параметры, либо логическую структуру этой базы. К управлению базой данных на физическом уровне относится вся работа по изменению имен, размера, количества, положения файлов базы данных, усечению базы данных и журнала транзакций, созданию групп файлов, изменению группы файлов по умолчанию, изменению имени и владельца базы данных. Большинство действий по изменению конфигурации базы данных выполняется с помощью команды ALTER DATABASE. Для уменьшения размера базы данных можно также использовать команды DBCC SHRINKDATABASE , DBCC SHRINKFILE и системная хранимая процедура sp_dboption. На логическом уровне изменяются такие параметры, как выполнение автоматического усечения журнала транзакций, автоматическое создание и обновление статистики, возможность выполнения вложенных триггеров и т.п. – всего 22 параметра. Изменять эти параметры можно командой ALTER DATABASE с параметром SET и процедурой sp_dboption. Сервер позволяет отсоединять (sp_detach) и присоединять (sp_attach_db) до 32767 баз данных, изменять владельца (sp_changedbowner), просматривать свойства (sp_dboption и DATABASEPROPERTY), получать справки (sp_helpdb) и т.д. В качестве примера создадим базу данных для учета продаж с именем Sales, используя один файл данных с именем Sales_dat и один файл для журнала транзакций с именем Sales_log, расположив их в папке, определяемой 21
спецификацией «D:\Курсовой проект студента группы 07ВП1 Макурина Ю.Д. по СУБД\Учебные базы данных». Физические характеристики файлов таковы: Физическая характеристика Максимальный размер файла Приращение
Sales_dat 50 5
Sales_log 25 5
Одним из вариантов реализации этого задания с использованием языка TransactSQL может быть такой: USE master GO
-- эта системная база необходима при создании;
CREATE DATABASE Sales ON (NAME = Sales_dat, FILENAME = ‘D:\КУРСОВОЙ ПРОЕКТ СТУДЕНТА ГРУППЫ 07ВП1 МАКУРИНА Ю.Д. ПО СУБД\УЧЕБНЫЕ БАЗЫ ДАННЫХ\SALES_DAT.MDF’, SIZE = 10,
-- единица по умолчанию «МВ»;
MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON (NAME = Sales_log, FILENAME = ‘D:\КУРСОВОЙ ПРОЕКТ СТУДЕНТА ГРУППЫ 07ВП1 МАКУРИНА Ю.Д. ПО СУБД\УЧЕБНЫЕ БАЗЫ ДАННЫХ\SALES_LOG.LDF’, SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO В приложении Б, помимо рассмотренного, приведено еще несколько вариантов размещения баз данных на файлах и их группах: с использованием трех файлов данных и двух файлов для журнала транзакций; с указанием только файла данных; с указанием только имени и без задания первичного файла и файла журнала транзакций; с указанием только места расположения первичного файла; с использованием трех групп файлов, обычно размещаемых на различных устройствах для повышения производительности системы. Экранные формы приложения Б определяют также последовательность действий при создании и подключении указанных учебных баз. 22
3.2 Проектирование и реализация таблиц Данные баз данных хранятся в таблицах. Таблица представляет собой совокупность столбцов, в которых хранятся атрибуты объектов предметной области. Все значения атрибутов какого-либо объекта образуют строку. Любая пользовательская таблица создается либо командой Transact-SQL CREATE TABLE, либо с помощью конструктора среды Microsoft Visual Studio 2005. И в том, и в другом случае необходимо задать имя таблицы, перечислить имена столбцов, задать тип данных для каждого столбца, упорядоченность символов для сортировки символьных данных, значения по умолчанию, а также ограничения на столбцы или таблицу в целом. Основные системные типы данных для таблиц и виды ограничений в языке Transact-SQL таковы: BINARY(n) – двоичные данные фиксированной длины до 8000 байт; для n байтов выделяется n+4 байта памяти; значения задаются с помощью 16-ичных чисел 0x; функция DATALENGTH позволяет определить длину поля в байтах; дополнение нулевыми байтами производится справа. IMAGE – двоичные данные длиной до 231 – 1; место выделяется в виде цепочки страниц. CHAR(n) – строковый тип данных фиксированной длины без поддержки Unicode длиной до 8000 байтов; данные зависят от установленной кодовой страницы; если для столбца не задана опция NULL, то строка при необходимости будет дополняться справа пробелами; если эта опция задана, то дополнение пробелами будет иметь место при условии ANSI_PADDING=ON, в противном случае пробелы добавляться не будут. VARCHAR(n) – строковый тип, как и CHAR(n), но не с фиксированной длиной; если ANSI_PADDING=OFF, то будет выполняться удаление конечных пробелов, если ANSI_PADDING=ON, то удаление пробелов производиться не будет. NCHAR(n) – строковый тип как и char(n), но с поддержкой Unicode, поэтому максимальное количество символов составляет 4000; в этом случае для строковых констант надо задавать впереди букву N: N’ABC’. NVARCHAR(n) – строковый тип, как VARCHAR(n), но с поддержкой Unicode. TEXT – строковый тип без поддержки Unicode длиной до 2 Гбайт; память выделяется страницами по 8 Кбайт, связываемыми в цепочку; можно использовать встроенные функции: DATALENGTH, PATINDEX, SUBSTRING, TEXTPTR, TEXTVALID, READTEXT, SETTEXTSIZE, UPDATETEXT, WRITETEXT. NTEXT – строковый тип как и text, но с поддержкой Unicode, поэтому длина строки не более 1 Гбайта. INT – целый тип длиной в 4 байта и с диапазоном от –231 до 231-1. SMALLINT – целый тип длиной в 2 байта с диапазоном от –215 до 215-1. TINYINT – целый тип длиной в 1 байт и диапазоном от 0 до 255. 23
BIGINT – целый тип длиной в 8 байт и с диапазоном от -263 до 263-1. DECIMAL[(p[,s])] – десятичный двоично-кодированный тип с p десятичными разрядами, из которых s – дробных; максимальное значение p достигает 38, поэтому диапазон значений составляет от –(1038-1) до 1038-1. Numeric[(p[,s])] – тип, аналогичный типу decimal[(p[,s])]. FLOAT[(n)] – плавающий (приблизительный) тип длиной в 4 байта и с диапазоном от –1.79x10308 до 1.79x10308; значение n определяет количество бит для хранения мантиссы и может принимать значения от 1 до 53. REAL – плавающий тип, являющийся аналогом float(240). DATETIME – тип данных для хранения даты (4 первых байта) и времени (4 последних байта) в диапазоне от 1.1.1753 и до 31.12.9999 года; дата хранится в виде смещения относительно базовой даты 1.1.1753, а время является количеством миллисекунд после полуночи; формат для пользователя: MMM DD YYYY hh:mm. SMALLDATETIME – тип данных для хранения даты (первых 2 байта) и времени (последние 2 байта) в диапазоне от 1.1.1900г. до 6.6.2079г., время задается с точностью до минуты. MONEY – тип данных для хранения больших денежных величин с точностью до 4 знаков после запятой в диапазоне от –922 337 203 685 477.5808 до +922 337 203 685 477.5807; для хранения данных отводится 8 байт. SMALLMONEY – тип данных для хранения нормальных денежных величин с точностью до 4 знаков после запятой в диапазоне от –214 748.3648 до 214 748.3647; для хранения данных отводится 4 байта. BIT – битовый (логический) тип со значениями 0 и 1; для хранения выделяется 1 разряд байта памяти. TIMESTAMP – временный штамп для учета числа изменений данных в записи (версий строки row version); значение timestamp уникально в пределах базы данных и позволяет идентифицировать конкретное значение записи; тип аналогичен binary(8), если хранение NULL не разрешено и varbinary(8), если разрешено. UNIQUEIDENTIFIER – тип данных для хранения глобальных уникальных идентификаторов длиной в 16 байт, генерируемых функций NEWID и используемых для идентификации строк (записей); при генерации используется номер сетевой карты компьютера и текущее время. SYSNAME – тип данных для хранения имен объектов базы данных; аналог nvarchar (128). SQL_VARIANT –вариантный тип данных для хранения данных любого типа, кроме TEXT, NTEXT, IMAGE, TIMESTAMP; для получения информации о природе хранимых данных используется функция SQL_VARIANT_PROPERTY(). TABLE – тип таблицы для временного хранения наборов данных с использованием переменных.
24
При открытии папки Tables базы данных в окне Server Explorer появляется список таблиц со следующими атрибутами: имя таблицы, владелец (обычно владелец базы данных data base owner-dbo), тип (пользовательская или системная) и дата создания таблицы. Для просмотра самой таблицы следует дважды щелкнуть по ней или в ее контекстном меню исполнить команду Properties. В открывшемся окне представлены все свойства таблицы и ее столбцов. Кнопка Permission позволяет просмотреть и отредактировать права доступа к таблице: SELECT, INSERT, UPDATE, DELETE, EXES и DRI. Щелкнув по столбцу таблицы, можно просмотреть и отредактировать права доступа к столбцу. Если установлена на сервере служба MSSearch, то с помощью вкладки Full-text Indexing можно отредактировать параметры этой службы. При проектировании таблиц часто бывает необходимо обеспечить автоматическое генерирование уникальных значений. Для этих целей можно использовать один из следующих способов: а) для столбца задать ограничение целостности IDENTITY с двумя параметрами: начальное значение и шаг приращения; это обеспечит автоматическое создание нового значения при каждой очередной вставке строки; б) использовать столбцы со свойством timestamp, которое обеспечит для столбца генерирование значений, уникальных в пределах базы данных; в) задать для столбца свойство ROWQUIDCOL, что обеспечит генерирование для каждой новой строки глобального уникального идентификатора, занимающего 16 байт. Изменить структуру таблицы можно либо с помощью команды ALTER TABLE, либо с помощью Server Explorer, при этом следует соблюдать ряд ограничений: нельзя удалять столбцы с типом данных IMAGE, TEXT, NTEXT, TIMESTAMP, ROWQUIDCOL, вычисляемые столбцы, индексные столбцы и т.д. Командой DELETE TABLE и той же утилитой можно удалить любую таблицу. Но прежде, чем это сделать, необходимо удалить все объекты базы данных, которые ссылаются на данную таблицу, либо изменить их таким образом, чтобы они не ссылались на удаляемую таблицу. Для удаления таблицы средствами утилиты Server Explorer необходимо в контекстном меню таблицы, которую надо удалить, исполнить команду Delete, убедиться, что удаляемая таблица не имеет связей с какими-либо другими объектами базы данных, и затем удалить таблицу. Ограничения целостности Constraint представляют собой механизм, обеспечивающий автоматический контроль соответствия данных установленным условиям, или ограничениям целостности. Ограничения целостности имеют приоритет над триггерами, правилами и значениями по умолчанию. Имеется пять ограничений целостности, различающихся по функциональности и области применения: NULL – действует на уровне столбца и пользовательского типа данных и либо разрешает (NULL), либо запрещает (NOT NULL) хранение значений NULL. CHECK – действует на уровне столбца и ограничивает диапазон значений, которые могут быть сохранены в столбце, путем проверки логического условия 25
для вводимых данных. При вводе или изменении данных вводимое значение подставляется в условие. Если полученный результат TRUE, то изменения данных принимаются, иначе – отвергаются и генерируется сообщение об ошибке. Для одного столбца можно задать несколько ограничений типа CHECK (проверок): CONSTRAINT human_avance CHECK (human_ avance BEETWEEN 0 and 700)). UNIQUE (AK) – действует на уровне столбца и гарантирует уникальность в столбце вводимых значений. В отличии от ограничения PRIMARY KEY, это ограничение допускает хранение значений NULL. PRIMARY KEY (PK) – действует на уровне столбца или таблицы и гарантирует уникальность в пределах таблицы первичного ключа, состоящего из одного или нескольких столбцов. Ни для одного из столбцов ключа не должно быть установлено свойство NULL. Когда используется один столбец, то для него необходимо также задать и свойство UNIQUE. В таблице создается только один первичный ключ. При его выборе надо учитывать требования удобства и функциональности. FOREIGN KEY (FK) – действует на уровне таблицы и связывается с одним из кандидатов на первичный ключ в другой таблице. Таблица, в которой определен внешний ключ с помощью этого ограничения, называется зависимой, а таблица с кандидатом на первичный ключ – главной. В зависимую таблицу нельзя вставить строку, если внешний ключ не имеет соответствующего значения в главной таблице. Из главной таблицы нельзя удалить строку, если с ней связана хотя бы одна строка в зависимой таблице. Формат задания ограничения таков: FOREIGN KEY REFERENCES Имя главной таблицы (Первичный или альтернативный ключ) Умолчание Default представляет собой значение, которое будет присвоено элементу столбца таблицы при вставке строки (записи), если в команде вставки явно не указано значение для этого столбца. Умолчаниями могут быть константы, а также встроенные функции и математические выражения, возвращающие конкретные значения. Имя умолчания должно быть уникально для владельца. Рекомендуется задавать значения по умолчанию для столбцов таблицы с помощью команд CREATE TABLE и ALTER TABLE, а также проверять, не конфликтует ли созданное умолчание с правилом для соответствующего столбца. Если для столбца разрешено хранение значения NULL и определено значение по умолчанию, то при вставке строки будет использовано значение по умолчанию. Умолчание может быть создано только в текущей базе данных. Задание имени владельца не обязательно. Создание умолчания выполняется командой CREATE DEFAULT, а его удаление ⎯ командой DROP DEFAULT. Примеры команд для создания трех таблиц: CREATE TABLE jobs --Работы (job_id smallint IDENTITY (1,1) PRIMARY KEY CLUSTERED, job_desc varchar(50) NOT NULL 26
min_lul tinyint max_lul tinyint )
DEFAULT 'New Position – title not formalized jet', NOT NULL CHECK(min_lul > = 10), NOT NULL CHECK(max_lul < = 250)
CREATE TABLE publishers (pub_id char(4) NOT NULL CONSTRAINT PKL_pub_id PRIMARY KEY CLUSTERED CHECK(pub_id IN ('1389', '0736', '0877', '1622', '1756') OR pub_id LIKE '99[0-9][0-9]'), pub_name varchar(40) NULL, city varchar(20) NULL, state char(2) NULL, country varchar(30) NULL DEFAULT('USA') ) CREATE TABLE employee (emp_id varchar(20) CONSTRAINT UPK_emp_id PRIMARY KEY NONCLUSTERED CONSTRAINT CK_emp_id CHECK(emp_id LIKE '[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' OR emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][0-9][FM]'), fname varchar(20) NOT NULL, minit char(1) NULL, lname varchar(30) NOT NULL, job_id smallint NOT NULL DEFAULT (1) REFERENCES jobs(job_id), job_lul tinyint DEFAULT (10), pub_id char(4) NOT NULL DEFAULT('9952') REFERENCES publishers(pub_id), hire_date datetime NOT NULL DEFAULT(GETDATE()) ) GO
27
Таблица 1. Описание колонок для атрибутов сущности «Авторы»
Код автора
Тип данных int
Фамилия автора
char
20
Имя автора
char
20
Отчество автора
char
20
Дата рождения
datetime
8
Дата смерти
datetime
8
Код страны
int
4
CK_Country_Code: 1:99
NOT NULL
Место проживания
char
100
CK_Author_Place: А-я и «.,/ (:)ESCAPE-»
NOT NULL
Название столбца
Размер 4
Обозначение и вид ограничения CK_Author_Code: 1-99 CK_Author_Family_Name: А-Я и а-я CK_Author_First_Name: А-Я и а-я CK_Author_Father_Name: А-Я и а-я CK_Author_Birthdate: 01.01.1753-01.01.2010 CK_ Author_Deathdate: 01.01.1753-01.01.2010
NULL/NOT NULL NOT NULL
Вид ключа PK
NOT NULL
АК
NULL NULL NULL NULL FK
Таблица 2. Описание колонок для атрибутов сущности «Произведения» Название столбца
Тип данных
Размер
Обозначение и вид ограничения
NULL/NOT NULL
Вид ключа
4
CK_Creation_Code: 1-99
NOT NULL
PK
100
CK_Creation_Name: А-Я, а-я и «.(,)»
NOT NULL
АК
Код произведения
int
Название произведения
char
Код жанра
int
4
CK_Creation_Genere_Code: 1-99
NOT NULL
FK
Код средства создаint ния
4
CK_ Creation_Tools_Code: 1-99
NOT NULL
FK
Код автора
int
4
CK_Creation_Author_Code: 1-99
NOT NULL
FK
Дата создания
datetime
8
CK_Creation_Date: 01.01.1753-01.01.2010
Код страны
int
4
CK_ Creation_Country_Code: 1:99
NOT NULL
FK
Код места нахождения
int
4
CK_Creation_Placemtnt_Code: 1-99
NOT NULL
FK
Цена
real
4
CK_Price: 1-99999999 28
NULL
NULL
Таблица 3. Описание колонок для атрибутов сущности «Жанры» Название столбца
Тип данных
Код жанра
int
Название жанра
char
Размер
Обозначение и вид ограничения
NULL/NOT NULL
Вид ключа
4
CK_Genere_Code: 1-99
NOT NULL
PK
100
CK_ Genere _Name: А-Я и а-я
NOT NULL
Таблица 4. Описание колонок для атрибутов сущности «Средства создания» Название столбца
Тип данных
Код средств создания
int
Описание средств создания
char
Размер
Обозначение и вид ограничения
NULL/NOT NULL
Вид ключа
4
CK_Tools_Code: 1-99
NOT NULL
PK
100
CK_ Tools _Description: А-Я, а-я и «,»
NOT NULL
Таблица 5. Описание колонок для атрибутов сущности «Страны» Название столбца
Тип данных
Код страны
int
Название страны
char
Размер
Обозначение и вид ограничения
NULL/NOT NULL
Вид ключа
4
CK_Country_Code: 1-99
NOT NULL
PK
100
CK_ Country _Name: А-Я и а-я
NOT NULL
Таблица 6. Описание колонок для атрибутов сущности «Места нахождения» Название столбца
Тип данных
Код места нахождеint ния
Размер
Обозначение ограничения
NULL/NOT Вид ключа NULL
4
CK_Placement_Code: 1-99
NOT NULL
CK_ Placement _Name: Название места нахождения
char
А-Я, а-я и
100
« ,/,(.):;ESCAPE-» 29
NOT NULL
PK
Рисунок 5 ─ Диаграмма таблиц базы данных В приложении В приведена экранная форма после выполнения сценариев для таблиц jobs, publishers и employee. Описание колонок таблиц, представляющих сущности предметной области, содержатся в таблицах 1 ─ 6. На рисунке 5 представлена диаграмма таблиц проектируемой базы данных. Сценарии для создания всех таблиц также находятся в приложении В. В среде Visual Studio создание таблицы выполняется с помощью окна Add New Table (см. рисунок 6), для открытия которого достаточно в контекстном 30
меню папки Tables выбрать команду Add New Table и щелкнуть правой клавишей мыши. Далее следует задать имя таблицы, имена столбцов, тип данных для каждого столбца, упорядоченность символов для сортировки символьных данных, значения по умолчанию, а также ограничения на столбцы или таблицу в целом.
Рисунок 6 ⎯ Окно Add New Table для создания таблицы Окно Add New Table разделено на две части. С помощью верхней части формируется набор столбцов, из которых будет состоять таблица, а также указываются их основополагающие свойства. Самая верхняя строка соответствует первому столбцу таблицы, вторая строка – второму столбцу и т.д. Порядок перечисления столбцов очень важен. При вставке и выборке данных без указания столбцов сервер будет обрабатывать значения именно в той последовательности, в которой они были перечислены при создании таблицы. Рассмотрим назначение колонок, с помощью которых указываются базовые характеристики столбцов: Column Name – для задания имени столбца; Data Type – для выбора типа данных в столбце с помощью раскрывающегося списка; Allow Nulls – установка флажка в этой колонке разрешает хранение значений NULL; если столбец входит в первичный ключ, то хранение значений NULL для него разрешить нельзя. С помощью верхней части окна создания таблицы можно также определить первичный ключ таблиц. Для этого достаточно выделить один или более столбцов, из которых должен состоять первичный ключ. Затем щелкнуть 31
правой клавишей мыши и в открывшемся контекстном меню выбрать команду Set Primary Key. После этого слева от каждого столбца, включенного в первичный ключ, будет отображаться символ ключ. Содержимое нижней части окна Add New Table зависит от того, какой столбец выбран в верхней части. Здесь можно задать дополнительные свойства столбца: Description – это текстовое поле предназначено для ввода краткого описания столбца, которое не используется системой; Default Value – для задания значения, которое будет присваиваться столбцу по умолчанию; Length – здесь отображается фиксированный или установленный пользователем размер выбранного типа данных; Precision – в этом поле указывается максимальное количество цифр, в том числе после запятой, которое можно хранить в столбце; Scale – используется совместно с предыдущим полем и предназначено для указания количества цифр после запятой, которое будет хранить десятичный тип данных; значение в этом поле не может превышать величины, указанной в предыдущем поле; Is Identity – если в данном раскрывающемся списке выбрано значение Yes, то соответствующий столбец будет сконфигурирован как столбец-счетчик, т.е. его значение будет увеличиваться при переходе на новую строку во время ввода данных; Formula – для построения формулы, с помощью которой будет формироваться значение столбца; Collation – поле доступно только для типов данных, предназначенных для хранения символьных и текстовых данных, так как с помощью него указывается сопоставление при сортировке, которое будет использоваться для столбца; по умолчанию предлагается применять то же сопоставление, что было выбрано для базы данных, в которой создается таблица (значение ). Поле Precision доступно только для нецелочисленных типов данных с фиксированной точностью, называемых десятичными (decimal). К этим типам данных относятся numeric и decimal. Для нецелочисленных (или приблизительных) типов данных с фиксированной точностью, также называемых приблизительными (approximate number), таких, как real и float, значение в этом поле (24 и 53 соответственно) доступно только для чтения. Аналогичная ситуация и с целочисленными типами данных (tinyint, smallint, int и bigint); Если в поле Formula задано выражение, то соответствующий столбец будет являться вычисляемым столбцом (computed columns). Формула может включать ссылки на столбцы, функции, а также константы, которые связываются в одно выражение с помощью различных операторов. Для вычисляемых столбцов, помимо формулы, разрешается указывать только имя столбца. Все остальные параметры, такие, как тип данных, значение по умолчанию, возможность хранения значений NULL, описание и другие, блокируются; 32
Если свойство Is Identity для столбца задано, то тогда в нижней части окна Add New Table становятся доступными три следующих поля: Identity Seed – в этом поле указывается начальное значение, которое будет использовано для автоматического генерирования значений для столбцасчетчика; Identity Increment – с помощью этого поля можно указать величину, на которую станет увеличиваться значение в столбце-счетчике при вставке новой строки; RowGuid – этот раскрывающийся список, доступный только для типа данных uniqueidentifier, содержит всего два значения – Yes и No. При выборе первого из них столбец конфигурируется в качестве уникального глобального идентификатора строки, что соответствует указанию ключевого слова rowguidcol при описании столбца в команде CREATE TABLE. Автоматически в поле Default Value подставляется значение newid(). Таким образом, при добавлении в таблицу новой строки в соответствующий столбец будет автоматически помешаться уникальное значение. Только один столбец в таблице может быть сконфигурирован как уникальный глобальный идентификатор строки. Тем не менее, можно создавать множество столбцов с типом данных uniqueidentifier и значением по умолчанию newid(). После того как будут заданы параметры всех столбцов, необходимо сохранить построенную таблицу. Для этого достаточно закрыть окно Add New Table. При этом будет выведено окно Choose Name, где надо задать имя таблицы. Далее следует определить в таблице ограничения целостности, проиндексировать те или иные столбцы, а также указать в какой группе файлов должна быть расположена таблица. После щелчка левой клавишей мыши по верхней части окна открывается новое окно для задания этих дополнительных свойств (см. рисунки 7 и 8). Задав эти свойства, необходимо подтвердить сделанные дополнения. Упрощенные команды для создания таблиц проектируемой базы данных имеют следующий вид: CREATE TABLE [dbo].[Жанры]( [Код жанра] [int] NOT NULL, [Название жанра] [char](100) NOT NULL, CONSTRAINT [PK_Жанры] PRIMARY KEY CLUSTERED ( [Код жанра] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO
33
Рисунок 7 ⎯ Окно для задания свойств таблицы
Рисунок 8 ⎯ Окно для задания ограничений таблицы
34
CREATE TABLE [dbo].[Авторы]( [Код автора] [int] NOT NULL, [Фамилия автора] [char](20) NOT NULL, [Имя автора] [char](20) NULL, [Отчество автора] [char](20) NULL, [Дата рождения] [datetime] NULL, [Дата смерти] [datetime] NULL, [Код страны] [int] NULL, [Место проживания] [char](100) NOT NULL, CONSTRAINT [PK_Авторы] PRIMARY KEY CLUSTERED ( [Код автора] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Места нахождения]( [Код места нахождения] [int] NOT NULL, [Название места нахождения] [char](120) NOT NULL, CONSTRAINT [PK_Места нахождения] PRIMARY KEY CLUSTERED ( [Код места нахождения] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Произведения]( [Код произведения] [int] NOT NULL, [Название произведения] [char](100) NOT NULL, [Код жанра] [int] NOT NULL, [Код средств создания] [int] NOT NULL, [Код автора] [int] NOT NULL, [Дата создания] [datetime] NULL, [Код страны] [int] NOT NULL, [Код места нахождения] [int] NOT NULL, [Цена] [real] NULL, CONSTRAINT [AK_Creation_Name] PRIMARY KEY CLUSTERED ( [Код произведения] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO
35
CREATE TABLE [dbo].[Средства создания]( [Код средств создания] [int] NOT NULL, [Описание средств создания] [char](100) NOT NULL, CONSTRAINT [PK_Средства создания] PRIMARY KEY CLUSTERED ( [Код средств создания] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO
CREATE TABLE [dbo].[Страны]( [Код страны] [int] NOT NULL, [Название страны] [char](100) NOT NULL, CONSTRAINT [PK_Страны] PRIMARY KEY CLUSTERED ( [Код страны] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO
36
3.3 Сценарии и экранные формы для ввода данных в базу системы Ввод данных в базу производился командами INSERT, начиная с таблиц, которые не ссылаются на другие таблицы (первичные таблицы ⎯ Primary Tables). Формат этой команды следующий: INSERT [INTO] Имя модифицируемой таблицы [WITH (Уровень блокировки запроса)] {[(Список колонок модифицируемой таблицы)] {VALUES (Список значений новой строки)\ Команда SELECT}} | DEFAULT VALUES Содержимое базы данных приведено в таблицах 7-12. В приложении Г даны сценарии и экранные формы с результатами ввода данных в таблицы базы. Таблица 7. Авторы Код автора
Фамилия автора
Имя автора
Отчество автора
Дата рождения
Дата смерти
Код страны
Место проживания
1
Да Винчи
Леонардо
Ди сер Пьеро
01.01.1753 01.01.1753
3
Тоскана
2
Суриков
Василий
Иванович
24.01.1848 19.03.1916
1
Красноярск
3
Петров
Василий
Григорьевич
12.12.1833 29.05.1882
1
Тобольск
4
Айвазовский
Иван
Константинович
17.07.1817 02.04.1900
1
Феодосия
5
Шишкин
Иван
Иванович
13.01.1832 08.03.1898
1
Татарстан
6
Лоррен
Клод
Желле
01.01.1753 31.12.1682
2
Тулуза
7
Пикассо
Пабло
NULL
25.10.1881 08.04.1973
2
Малага
8
Имя
автора
неизвест-
01.01.1753 01.01.2010
8
Неизвестно
но
Стоимость произведений вводилась отдельно с помощью команд UPDATE, которые приведены также в приложении Г. Ввод или изменение данных можно выполнить в самой таблице, открыв ее командой Show Table Data (разделы Г8-13). 37
Таблица 8. Произведения Код произведения
Название произведения
Код жанра
Код средства создания
Код автора
Дата создания
Код страны
Код места нахождения
Цена
1
Гора Арарат
4
1
4
1885
3
3
NULL
2
Абсент
1
7
7
1753
1
6
NULL
3
Мона Лиза (Джоконда)
1
3
1
1753
2
7
NULL
4
Берег моря ночью
4
1
4
1837
1
5
NULL
5
Дама с горностаем
1
3
1
1753
7
8
NULL
6
В Крыму
4
2
5
1890
1
2
NULL
7
Витрувианский человек
5
4
1
1753
3
2
NULL
8
С гитарой (Портрет С.А. Кропоткиной)
1
5
2
1882
1
9
NULL
9
Хаос(Сотворение мира)
4
1
4
1841
3
3
NULL
10
Завоевание Сибири Ермаком
4
1
2
1895
1
9
NULL
11
Утопленница
4
1
3
1867
1
9
NULL
12
Неаполитанский залив
4
1
4
1841
1
4
NULL
13
Последний кабак у заставы
4
1
3
1868
1
9
NULL
14
Ураган на море
4
1
4
1889
1
5
NULL
15
В Сиверской
4
1
5
1896
1
10
NULL
16
Возвращение Одисея из страны фиаков
4
6
6
1753
6
1
NULL
Попытки ввода дат, которые меньше 1753-го года, когда был введен Григорианский календарь, не дали положительных результатов, поэтому исправить в таблицах даты, меньшие этого года, повидимому невозможно: UPDATE [Авторы] -- Команда не выполняется SET [Дата рождения] = '01.01.1452', [Дата смерти] = '01.01.1519' WHERE [Код автора] = 1 38
UPDATE [Авторы] -- Команда выполняется - проверьте результат SET [Дата рождения] = '01.01.1753', [Дата смерти] = '01.01.1753' WHERE [Код автора] = 1 Таблица 9. Жанры Код жанра
Название жанра
1
Портрет
2
Натюрморт
3
Архитектура
4
Пейзаж
5
Графика
6
Фотография
7
Жанр неизвестен
Таблица 10. Средства создания Код средств создания
Название средств создания
1
Холст, масло
2
Холст на картоне, масло
3
Дерево, масло
4
Бумага, мел
5
Бумага, акварель
6
Акварель
7
Средства создания неизвестны
Даже изменение ограничений на ввод дат, которое производилось с помощью команды ALTER TABLE, не позволило исправить даты: ALTER TABLE [Авторы] DROP CONSTRAINT CK_Author_Birthdate ALTER TABLE [Авторы]
39
Таблица 11. Страны Код страны
Название страны
1
Россия
2
Франция
3
Италия
4
Испания
5
Португалия
6
Англия
7
Польша
8
Страна неизвестна
Таблица 12. Места нахождения Код места нахождения
Название места нахождения
1
Лондон. Британский музей
2
Пенза. Пензенская областная картинная галерея
3
Венеция. Музей армянской конгрегации мхитаристов
4
Петергоф Ленинградской области. Дворцы-музеи и парки Петродворца
5
Феодосия. Феодосийская картинная галерея им. И. К. Айвазовского
6
Санкт-Петербург. Государственный Эрмитаж
7
Лувр. Картинная галерея
8
Краков. Музей Чарторыжских
9
Москва. Государственная Третьяковская галерея
10
Челябинск. Челябинская областная картинная галерея
11
Место нахождения произведения неизвестно
ADD CONSTRAINT CK_Author_Birthdate CHECK ([Дата смерти] | ! = | > | >= | ! >|, = | !