Программирование баз данных MS SQL Server (1084479), страница 83
Текст из файла (страница 83)
Система формирует сообщение об ошибке, свидетельствующее о том, что вставка не может быть выполнена в связи с попыткой применить операцию присваивания к идентификационному значению. А во все другие столбцы данные должны быть перенесены из других таблиц или обязательно введены пользователем. В этом случае значение 1эконбпус1 снова является неприменимым. В результате выполнения описанных выше этапов подготовки определений таблиц Ргоспсгз и Опэговегв будут получены таблицы, показанные соответственно на рис. 8.26 и 8.27. 326 Глава 8 Рис. 8.26. Оипеделеиие таблтяы егосйзсса Рис. 8.27. Оя)зеделеиие таблииы Сиявавагя Рассмотрим кратко, какие соображения послужили причиной выбора типов данных, показанных на рис. 8.26 и 8.27, и после этого перейдем к дальнейшему изложению.
Формат представления значений в столбце рагс))о (Идентификатор детали) был определен на основании анализа данных, пример которых приведен в разделе с описанием процесса нормализации. Обозначение детали состоит из цифры, за которой следует буква, а за ней стоят четыре цифры. Таким образом, идентификатор детали состоит из шести символов, и есть все основания полагать, что формат этого обозначения является постоянным. Можно было бы добиться от заказчика еще более однозначного подтверждения того, что для идентификации номера детали не потребуется больший формат представления, но примем предположение, что дело действительно обстоит так, и остановимся на типе данных айаг (б) .
Такое решение обусловлено тем, что для данных типа сйаг требуется немного меньший размер внутреннего представления, чем для чагсйаг; к тому же известно, что длина идентификатора всегда остается одинаковой (а это означает, что мы не получим никакого преимущества, выбрав переменный размер). Данные, предназначенные для хранения в таком столбце, как пезсгзрггоп (Описание), требуют дополнительного анализа. Иногда выбор формата представления для подобных данных определяется требованиями к пользовательскому интерфейсу (например, зависит от того, какую ширину имеет поле, предназначенное для отображения этих данных на экране), а в других случаях действительно приходится руководствоваться только догадками, касающимися того, является ли выбранный формат представления "достаточным". В данном случае для столбца ))еэсгйрс гоп используется символьный тип данных переменной длины, а не постоянной длины по следующим двум причинам: )л это позволяет сэкономить немного места; Ю не приходится дополнять строку пробелами (дополнительные сведения о ти- пах данных сйаг и чагсйаг (см.
в главе 2). В рассматриваемом примере типы данных псйаг и пчагсйаг не применяются, поскольку речь идет о простой системе выставления счетов для предприятия в США, поэтому не приходится представлять символы других национальных алфавитов, для которых требуется кодировка с)п1сос(е. Нормаяизация и другие важные проблемы проектирования 327 Столбец Хе1дпс напоминает столбец Оезсгйрсгоп в том, что для него приходится также выбирать тип данных, руководствуясь предположениями. В рассматриваемом случае выбран тип данных сйпу1пс, поскольку вес товара не должен превышать 255 фунтов. Следует также отметить, что выбор такого типа данных исключает возможность задавать дробные десятичные значения веса (допускаются только целочисленные значения). Описание требований к столбцу Спзгопег1|о было приведено в том разделе, где рассматривалась таблица Огоегз.
При выборе типа данных для столбцов Спзгомегнаже и СпзгомегАсЫгезз приходится сталкиваться почти с такой же ситуацией, как и применительно к столбцу пезсггрс1оп; проблема состоит в том, что должно быль правильно выбрано максимально допустимое значение длины строк с именем и адресом заказчика. Кроме того, необходимо проследить, чтобы заданное значение длины не оказалось слишком большим. Как и в других примерах таблиц, значения во всех столбцах должны быть обязательно заданы (не допускается применение ЬПЛ.ссзначений ни в одной таблице), а также не предусмотрено использование заданных по умолчанию значений. Кроме того, анализ показывает, что для обозначения идентификатора заказчика и идентификатора детали не допускается применение столбцов идентификации, поскольку указанные идентификаторы имеют специальные форматы и не могут быть сформированы с помощью автоматической системы нумерации, которая поддерживается в столбцах идентификации. Ввод в действие связей В целях упрощения рассматриваемых схем автор решил пересмотреть все четыре применяемые таблицы и изменить формат их отображения так, чтобы на экране были показаны только имена столбцов.
В программе Мапаяешепг 8гпсг1о для этого достаточно щелкнуть правой кнопкой мыши на таблице и выбрать во всплывающем меню команду Со!сипи )затея. В результате должна быть сформирована диаграмма, которая выглядит так, как показано на рис. 8.28. Рис. 8.28. Исходная диас)замма, нрмнеялезнся в нризсере создания связей 328 Глава 8 После того как читатель выполнит указанные действия, позиции. занимаемые таблицами, могут немного отличаться от тех, которые показаны на рис. 8.28, но структура таблиц должна быть точно такой же. Теперь мы можем приступить к решению задачи ввода в действие связей, но, по-видимому, вначале необходимо уделить определенное внимание вопросу о том, какого рода связи действительно требуются. В данном примере все связи, которые будут отображены с помощью линий связи в окне инструментального средства формирования диаграмм Я1г 8егчег, должны быть связями "один к нулю, одному или многим".
Фактически в программном обеспечении 8Я(. 8егчег не предусмотрена возможность неявно задавать связи каких-либо других типов. Как уже было описано выше в данной главе, ввод в действие таких объектов, как ограничения уникальности н триггеры, позволяют дополнить те операции, которые реализованы в программном обеспечении ЯЯЕ 8егчег применительно ко всем связям, но поскольку указанные объекты в данном случае не используются, то, естественно, приходится ограничиваться связями "один к нулю, одному или многим".
Указанное псыожение дел имеет положительную сто)юну, поскольку свямс "один х нулю, одно. му или многилг " относятся к категории связей наиболее раскроет)ганенного типа. Икаче го. вофя, не ышдует слишком задумываться над тем, что в програличном обеспечении 5® Вегоег не поддерживаются связи всех ваьножных гпипов.
Для обеспечения взаимодействия большикства таблиц вполне достаточно воспользоваться обычным ограничением внешнего ключа (а именно такое ограничение и предспавляют линии связи на диаграмме). А что касается связей дРугих типов, то их обычно можно п~омоделиРовоть с помощью дРугих с(зедств. Начнем с центральной таблицы в рассматриваемой системе выставления счетов— с таблицы Огс(егз. Вначале рассмотрим, какие связи могут потребоваться для работы с этой таблицей.
В данном сл)тае имеется только одна такая связь, которая позволяет обращаться к таблице Спзеотегз. Эта связь должна представлять собой связь "один ко многим", в которой таблица спэсотегэ должна быть родительской (и находиться на стороне "один"), а таблица Огс(егз должна быть дочерней (и находиться на стороне "многие"). Для формирования связи (и ограничения внешнего ключа, которое должно служить основанием для этой связи) достаточно нажать и удерживать кнопку мыши на самом левом столбце (в области, обозначенной серым цветом) таблицы спэсошегз, т.е. иа столбце Сцзгошегмо. Затем необходимо перетащить курсор мыши в ту же позицию (в область, обозначенную серым цветом) рядом с обозначением столбца СпзготегИо в таблице Огбегз н отпустить кнопку мыши.
После этого в инструментальном средстве построения диаграмм 89Е 8егчег сразу же всплывает первое из двух диалоговых окон, позволяющих подтвердить конфигурацию создаваемой связи. Это первое диалоговое окно, Та)з)ез апс) Со!нгппв, показанное на рис. 8.29, дает возможность проверить, действительно ли правильно выбраны столбцы, между которыми устанавливается связь.
Как уже было сказано выше в данной главе, не следует беспокоиться, если имена, показанные в окне ТаЫез апсз Со(итпз, не соответствуют вашему замыслу, которым вы руководствовались при создании связи. В п(льне)зе, показанном на(лгс. 8.29, достаточно проппо воспользоватыя полями со спискам для внесения таких изменений, чтобьс на обеих сторисах связи применялись столбцы Сов готегсго. Следует также отметить, что имена столбцов, участвующих в связи„не обязапмльно должны бьсть одинаковыми, но обычно использование одинаковых имен для столбцов двух таблиц, имеющих одинаковое назначение, позволяегп избежать путаницьс.