2. Снимите флажок в столбце Allow Nulls. Это значит, что в данном поле не допускаются неопределенные значения и оно наилучшим образом подходит для превращения в идентификационное.
3. Нижняя часть диалогового окна Design Table содержит страницу свойств для свойств текущего выбранного поля в таблице. Щелкните в странице свойств на текстовом поле Identity.
4. Выберите в нем параметр Yes. По желанию укажите значения в текстовых полях Identity Seed (Начальное значение) и Identity Increment (Приращение).
После создания идентификационного поля окно SQL Server Enterprise Manager будет выглядеть, как на рис. 3.11.
Помните, что значения идентификационного поля в SQL Server не всегда последовательны. Например, если пользователь Антон пытается создать запись с ID, равным 101, а пользователь Степан создает следующую запись (ее ID равен 102) и транзакция Антона не будет выполнена, то запись с номером 101 не будет создана никогда.
В этом ничего страшного нет, особенно в том случае, когда в приложениях значение первичного ключа не используется пользователем. Однако помните, что такие "потерянные" значения возможны, так что не удивляйтесь, если, например, при просмотре номеров счетов вы не обнаружите счета с номером 101.
РИС. 3.11. Создание идентификационного поля в диалоговом окне конструктора таблиц Design Table программы SQL Server Enterprise Manager
Использование других методов для генерации первичных ключей
Вовсе не обязательно, чтобы каждая таблица имела первичный ключ, но в практическом отношении желательно, чтобы было именно так. Важность первичного ключа в таблице трудно переоценить. Как отмечалось в предыдущей главе, с помощью первичных ключей очень просто выполнять операции объединения нескольких таблиц в запросе. Первичный ключ можно также использовать для указания на запись в пользовательском интерфейсе. Применяя первичный ключ в передаче записи от одной процедуры к другой, можно свести к минимуму количество передаваемых данных, принадлежащих записи. Существует несколько альтернативных способов генерации первичного ключа.
• Первый вариант — генерация случайного значения в поле первичного ключа для каждой создаваемой записи. Этот способ используется таблицами, содержащими поля AutoNumber, которые преобразованы при переносе данных из Microsoft Access в SQL Server. Он также используется при репликации баз данных Access для устранения коллизий между записями, которые вводятся неподключенными пользователями.
• Второй вариант — сохранение значения счетчика во временной таблице и использование этого значения для создания каждого нового первичного ключа создаваемой записи. При этом необходимо использовать транзакцию, которая считывает текущее значение из таблицы счетчика, определяет с его помощью первичный ключ новой записи и увеличивает значение в таблице счетчика. Причем все эти действия представляют собой одну атомарную операцию. При использовании этой технологии есть одно преимущество: соблюдается последовательность значений первичного ключа. К недостаткам (по сравнению с простым созданием идентификационного поля) можно отнести необходимость написания хранимой процедуры и добавления нужных таблиц к базе данных. Сохранение значения счетчика в одной таблице также может привести к возникновению конфликтов при одновременном доступе к ней, что может вызвать проблемы с производительностью в интенсивно используемой системе.
• Третий вариант — создание первичного ключа на основе данных. Например, пер вичный ключ для записи клиента Vito Polito может иметь вид VP001. Для другого клиента с аналогичными инициалами ключ будет иметь вид VP002 и т.д. К преимуществам можно отнести ассоциацию ключа с данными, а к недостаткам – необходимость создания дополнительного кода в виде хранимых процедур.
Создание поля с первичным ключом
Созданное идентификационное поле можно использовать в качестве первичного ключа. Для создания первичного ключа таблицы с помощью программы SQL Server Enterprise Manager выполните приведенные ниже действия.
РИС. 3.12. Выбор поля для создания первичного ключа в программе SQL Server Enterprise Manager
1. Установите курсор мыши в том поле, которое собираетесь использовать в качестве первичного ключа.
2. Щелкните на кнопке Set primary key (Установить первичный ключ) с изображением ключа. После этого в определении таблицы появится первичный ключ, а диалоговое окно конструктора таблицы Design Table будет иметь такой вид, как на рис. 3.12. Левый столбец в перечне полей в верхней части окна содержит обозначения (в виде изображения ключа) полей, которые образуют первичный ключ таблицы. Учтите, что любое поле может быть первичным ключом, а не только идентификационным полем.
НА ЗАМЕТКУ
Для создания первичного ключа таблицы можно использовать несколько полей, и такой ключ называется конкатенированным ключом (concatenated key). Для него можно использовать, например, имя и фамилию клиента. Это позволяет предотвратить ввод записи-дубликата для клиента Amy Rosenthal. Чтобы выбрать несколько полей для первичного поля, щелкните на них, удерживая нажатой клавишу <Ctrl>.
Использование программы SQL Query Analyzer для доступа к базе данных
РИС. 3.13. Основное окно программы SQL Query Analyzer
Для выполнения команд SQL Server можно использовать программу SQL Query Analyzer (раньше она называлась ISQLW). С помощью этой программы можно не только осуществлять SQL-запросы, но также обновлять записи, удалять их и выполнять другие действия над ними. Эта программа также позволяет проводить очень сложные операции с базами данных и сервером базы данных, например создавать базы данных, представления и хранимые процедуры.
Если вы знакомы с синтаксисом SQL, то изучение принципов работы программы SQL Query Analyzer не составит для вас никакого труда. (Однако выполнение некоторых специализированных и сложных операций может оказаться более трудным, поэтому далее в примерах вместо SQL Query Analyzer используется программа SQL Server Enterprise Manager.)
Для создания и выполнения команд с помощью программы SQL Query Analyzer запустите ее, щелкнув на кнопке Start (Пуск) и выбрав команду Programs→ Microsoft SQL Server→Query Analyzer (Программы→Microsoft SQL Server→Query Analyzer) или выбрав команду меню Tools→Query Analyzer (Инструменты→Query Analyzer) в окне программы SQL Server Enterprise Manager. На экране появится диалоговое окно Connect to SQL Server (Подключение к серверу SQL Server), в котором нужно выбрать подключаемый сервер баз данных, учетное имя и пароль, а затем щелкнуть на кнопке Connect (Подключиться). После этого появится основное окно программы SQL Query Analyzer (рис. 3.13). При выполнении команд на экране будут появляться дополнительные вкладки для отображения результатов, сообщений, статистических данных и планов. Более подробно они описываются далее в главе.
Перед выполнением команд SQL необходимо протестировать соединение с сервером. Для этого выполните приведенные ниже действия с базой данных pubs, которая поставляется вместе с SQL Server.
1. Выберите используемую базу данных. Это можно сделать с помощью SQL-команды USE. Введите следующую команду в диалоговое окно ввода запросов Query (Запрос): USE pubs
НА ЗАМЕТКУ
Команды SQL можно вводить как строчными, так и прописными буквами. Но ключевые слова SQL принято вводить прописными буквами, поэтому следуйте такому соглашению.
2. Выполните введенную команду, нажав клавишу <F5> или щелкнув на кнопке Execute Query (Выполнить запрос) с изображением зеленого треугольника. После выполнения этой команды SQL появится вкладка Messages (Сообщения) со следующим сообщением:
The command(s) completed successfully.
Что в переводе означает:
Команды успешно выполнены.
3. Для удаления введенной команды SQL выберите команду меню Edit→Clear Window (Редактировать→Очистить окно) или используйте комбинацию клавиш <Ctrl+Shift+Del>.
4. Теперь попробуйте выполнить простой запрос к базе данных pubs. Для этого введите следующий код SQL в окно Query:
SELECT * FROM authors
5. Выполните запрос, нажав клавишу <F5> или щелкнув на кнопке Execute Query (Выполнить запрос) с изображением зеленого треугольника. После выполнения этой команды SQL появится вкладка Grid (Решетка) с результатами выполнения запроса (рис. 3.14) и вкладка Messages (Сообщения) со следующим сообщением о количестве извлеченных строк:
(23 row(s) affected)
Что в переводе означает:
(Извлечено 23 строки)
РИС. 3.14. Результат выполнения простого запроса к таблице pubs в окне программы SQL Query Analyzer
СОВЕТ
Помимо выполнения сразу всех команд сценария в диалоговом окне Query одну или несколько строк с командами SQL можно выполнять, выделяя нужные строки и нажимая клавишу <F5> или щелкая на кнопке Execute Query. Это позволяет повторно выполнять части команд, возможно, даже после их модификации.