Программирование баз данных MS SQL Server (1084479), страница 78
Текст из файла (страница 78)
8.11). 306 Глава 8 С)й)йвэд 1 сОЙОФЮВ ' . ьйиги Рис. 8.11. Стандартное нредсннгаленис таблицы На рис. 8.11 показано, что в определение таблицы уже введено несколько столбцов, а также задан первичный ключ (напомним, что для этого необходимо отметить столбцы, которые должны войти в состав первичного ключа, а затем щелкнуть на них правой кнопкой мыши и выбрать команду Яе( Рпгпагу Кеу). Прежде чем щелкнуть на кнопке Яаче, чтобы сохранить введенное определение таблицы, осуществите один эксперимент — откройте программу Мапа8егпепс Ягцс((о и попытайтесь выполнить запрос к новой таблице: 8818Ст * ГВОМ С зг егмогеэ При этом должно появиться следующее сообщение об ошибке: Мзп 208, ьече1 16, згаге 1, Гьпе 1 1пча11п' оЬ)ест паве 'Спзговегиогез'. Появление этого сообщения об ошибке вызвано тем, что рассматриваемая таблица существует только в виде отредактированного изображения на диаграмме; фактически таблица не создается вплоть до того момента, пока не будут сохранены внесенные изменения.
' Как дцказано 88 рис. 8;11;. йийоы Ь,игиеивм сиэповвгиобев этой таблицы в дине диаУ)завл МЫ Ецрвеа ЕтгИМЕИИОтант ЗмаКаааайпйинг(".). НагИВИЕ тайЕГЕ Зиаха Сладит)ЕЛЬСтауат О теМ, чт6, не все;изменения,:виееениые а карактеФистики.таблйцй, бокранеиььв базе данных: Теперь снова переключитесь на программу Мапа8егпеш ЯгцЖо. В этой программе предусмотрены два описанных ниже варианта сохранения изменений в таблице. С1 Команда Яаче. При использовании этой команды внесенные изменения отображаются на диаграмме и сохраняются в базе данных (указанная команда представлена на панели инструментов небольшой пиктограммой с изображением диска).
ГЗ Команда Яаче С)1аПдЕ Ясира С помощью этой команды изменения сохраняются в виде сценария, который может быть вызван на выполнение позднее. (Эту команду можно найти в меню ТаЫе Оев)дпЕг или задать ее как командуЯаче То Нормализация и другие важные проблемы проектирования 307 Тех1, если используется кнопка сохранения с изображением диска, о которой шла речь в предыдущем пункте.) Перейдите к дальнейшим действиям и выберите команду Яаче, после чего появится приглашение дать подтверждение (дело в том, что после выполнения этой команды база данных изменится, а какого-либо способа отменить это действие не существует). Подтвердите необходимость внести заданные изменения и попытайтесь снова вызвать указанный выше запрос на выполнение применительно к таблице сцзсовегиосез.
На этот раз ошибка не должна возникнуть, поскольку необходимая таблица к этому времени уже создана (какие-либо строки с результатами не будут получены, но выполнение запроса должно завершиться успешно). Описание полученных результатов Во время построения диаграммы в программном обеспечении КОЕ Бегчег незаметно для пользователя создается сценарий, который выглядит так же, как сценарии, создаваемые при оформлении внесенных изменений (см. главу б). Но фактически код этих сценариев не вырабатывается и не выполняется до тех пор, пока не будет ~р р р Итак, таблица сцзсожегвосез успешно введена в базу данных, но предположим, что в ходе дальнейшей работы обнаруживается проблема, связанная с тем, что первичный ключ, применяемый в определении таблицы, позволяет сохранять только по одному примечанию, относящемуся к каждому заказчику.
Однако практика показывает, что чаще всего со временем таких заметок, касающихся каждого заказчика, должно становиться все больше и больше. Это означает, что требуется изменить определение первичного ключа. Для решения указанной задачи можно применить несколько вариантов в зависимости от рассматриваемых требований, включая варианты, описанные ниже.
0 Ввести в состав первичного ключа столбец с обозначением даты. Однако такое решение имеет два недостатка. Во-первых, возможность оставлять свои заметки должна быть предусмотрена для всех служащих, и может оказаться, что два сотрудника компании пожелают ввести свои замечания одновременно. Разумеется, этот недостаток несложно исправить, введя в состав первичного ключа еще один столбец, Екр1оуее1Р, который содержит идентификаторы служащих.
Во-вторых, не исключено, что даже один и тот же служащий может принять решение ввести несколько полностью отдельных примечаний в один и тот же день (безусловно, если столбец с обозначением даты будет обьявлен с типом данных басес1ве, то введенные в него значения практически всегда будут уникальными, поскольку невозможно добиться того, чтобы время выполнения двух различных операций ввода совпадало с точностью до миллисекунды, но данный пример рассматривается как чисто гипотетический). В таком случае даже введение столбца Евр1оуее1 о в состав первичного ключа не позволит обеспечить однозначную идентификацию строк. П Ввести еще один столбец, чтобы усовершенствовать структуру первичного ключа.
Этот метод можно было бы реализовать путем добавления столбца со счетчиком, с помощью которого нумеровались бы все заметки, касающиеся каждого отдельного заказчика. Еще один вариант может предусматривать 308 Глава 8 просто добавление столбца идентификации, гарантирующего уникальность. В результате этого первичный ключ уже фактически утрачивает свойство единственно применимого уникального идентификатора, но обычно мы от этого ничего не теряем (хотя и становимся вынужденными поддерживать больше одного индекса). Тем не менее такой подход позволяет создавать практически неограниченное количество заметок в расчете на каждого заказчика. Сам автор намеревается применить подход, предусматривающий добавление к таблице столбца со счетчиком заметок, который будет именоваться Беопепсе.
В соответствии с принятым соглашением (оно является необязательным, и не все разработчики его придерживаются) столбцы первичного ключа в изображении таблицы на бумаге обычно находятся на левом краю и задаются в объявлении таблицы в первую очередь. Если бы указанная задача усовершенствования структуры таблицы должна была быть решена в процессе эксплуатации базы данных, то, по-видимому, пришлось бы вызвать на выполнение оператор Д1,тЕН тлй1.Е н добавить столбец. Но в таком случае новгвй столбец оказался бы в конце списка столбцов. Поэтому чтобы исправить положение, потребовалось бы скопировать все данные в промежуточную таблицу, уничтожить все связи, в которых участвует старая таблица, уничтожить старую таблицу, создать новую таблицу, в которой уже предусмотрены все необходимые столбцы, а сами столбцы заданы в должном порядке, с помощью оператора СВЕАТЕ, после чего восстановить все связи и скопировать данные из промежуточной таблицы в новую таблицу (очевидно, что это — продолжительный и утомительный процесс).
Тем не менее, если используются инструментальные средства построения диаграмм, все эти действия выполняются программным обеспечением $(л(. Яеггек Чтобы вставить новый столбец после любого столбца в таблице, достаточно щелкнуть правой кнопкой мыши на определении столбца, который непосредственно следует за вставляемым столбцом. Как показано на рис. 8.12, инструментальное средство построения диаграмм сдвигает определения всех последующих столбцов вниз, чтобы освободить место для нового столбца. Рис. 8.12.
Результат подготовки к вспиыке нового спюлбца перед сугцестоую>циии столбцами пи>блицы Нормализация и другие важные проблемы проектирования 309 После этого можно ввести определение нового столбца, как показано на рис. 8.13, и переопределить первичный ключ (выбрать определения обоих столбцов, Сцзготег111 и Еедоепсе, щелкнуть на выделенном участке правой кнопкой мыши и выбрать команду Зе1 Рг)п1агу Кеу). нинов г ' ЙЖЬФ ьнгэнмо и св нвэ пачьгмигз1 Я Рис.
8.13. Окно табеиви СиасоиекМосев восле ввода онределення нового снголбва После этого следует щелкнуть на кнопке Зане, чтобы сформировать таблицу, в которой предусмотрен требуемый порядок столбцов. Исключительно для того, чтобы убедиться в этом, попробуем воспользоваться процедурой зр пе1р: ЕХЕС эр Ье1р Сиэготегногеэ В выводе этой процедуры будет показано,что столбцы действительно заданы в должном порядке: Спзпоиеггс Ееяпепсе но своа се Еер1оуее10 носе ВРДДИ.'ВСЕХ-ИйотййисЕНТгаЛЬНМХ СРГЕДСта:фОРгМИ))сзпНИЛ ДнатйаММ; ПРгИМЕНЛЕМЬГХ, У)ЛЛ:ВМЕ ПОДНЕСЛ,.ТЛКИХ'ДЛЕРДНИЙ,;КДК 'ИЗЬТЕНЕКИЕ ПОРЛДКа СТОЛбЦРа;:ООРбвпЕМДЕЛЛЕТСВ ДРЕГРЙГЭЬГЕ г)а)г)йс)):Автору'приходилось-бтаглкйааптьсгл,'ср, мсногими:другйми: игнструмейтельныьг)и:,средь готаа)ИИ ЕВ»'дИВГразигМ,': ПРИЧЕМ Вбв'ОНИ йрЕдОдтаВЛГЛЛИ 'ЕОЗМОйНОСтЬ)СИНХрОНдвацНИ ИЗМЕГ ЙЕНИЙЛЕОСЛЕДрааТЕЛЬНЕСтИ:"Етолб1ата Ь)аиду йаагОй' даидгМХ'-,''И",ДгнгаГраММОй;: ОдиаКО:В-'дайОТЛИТОЛЬНрстй ДЛЗулЬТДТм не:бМЛИССТИДЬЬ,ДДиоенаЧЙЫМИ,1ИВММИ ОЛРВамиэ'.Дледуеп ОЧеНЬ 'тЩЕТСЕЛ1ЬНОг'ПадкадИталсвйбОрунпНСТгруМЕпптвтлрИГМЕНВЕМСКО:ДллуайЕЧЕНИЛ," ИаМЕНЕНИй,:а рб' аЛЬНМЕ'дхайи)МЕ):,бЕЗуСЛОВНО,':, ЮрэаКтарИСгтИКИ)ЕЕЕХ ИНбтдуМЕНТаЛЬНМХ.,С))адеэтпе'НЕСИЗЕМЕННО уЛуЧЛЕГаитСЛ':,НЛ йр)йрапММта ДЕЛМПгСЁПО'-ПДЕЛГ)НЕЬ)уз'НОСИт О)ТПЕЧатаК ГЕНИЛЕЛЬНОатИ.,"ПпрИвущгЕй т6м)г человдку';-'чье'имл" лйглО в Де.$)азаание.
310 Глава 8 КРОМЕ,'ТОГО" ,НЕОбхцдиые;СдЕЛатЬ:,Ещв:,ОсдНО-ПрЕдрегтЕрвжЕНИЕ;::.КаСВЮщЕЕССя даилюй'тЕМЫ. ЕСлн',приходится.работатв'-о'реальнымн',данными,,то желатеульно'исспользовать"вариант анесенйянамейенйй, восноае «ото1г«1г6лажат сцанайни,',нейе следует вбоснтй изменение б 'пгомсощькь епгеративного.ссоеденення с бааз«ай:данных':"-'Дьло: в:гогм;."чуб:лри.тгаской",очргвйизвцнн,.работы.оберпечнеается'возможность'полн«сотне йровернть работу-щенарнв;нге;э«спесрлментадьных-:бааахдснньы; не" йодеергав'ненужному,:ряску'-'реальные,:данные: Слддует таЮ«ЕОбяаастЕЛЬНО аОЗдатЬ.'ВОЛ Ну«ГрЕЗараигув КОПНЮ'.баем=пази«НЫ«итОЛЬКО ,'ПОСЛЕ МОГО.
внооитьхлодобные"изменения. Редактирование свойств таблицы и свойств объектов, принадлежащих к таблице Кроме основных атрибутов таблиц, которые рассматривались до сих пор, операции редактирования можно также применять ко многим другим характеристикам таблицы. Для доступа к соответствующим характеристикам и последующего редактирования или добавления используются два способа, описанных ниже. 0 Свойства.