Обработка баз данных на Visual Basic®.NET
Шрифт:
6. В следующем столбце введите число 20, т.е. максимальное количество символов в поле FirstName.
7. В столбце Allow Nulls определяется возможность использования неопределенных значений. Если в этом столбце установлен флажок, то неопределенные значения могут быть введены в это поле. Для поля FirstName этот флажок должен быть установлен.
8. Введите определения остальных полей и их параметры. После определения полей окно SQL Server Enterprise Manager примет такой вид, как на рис. 3.10.
9. По окончании определения полей сохраните таблицу, щелкнув на кнопке Save (Сохранить).
РИС. 3.10.
Теперь можно создать уникальные идентификаторы для каждой записи в таблице. Поле с такими идентификаторами называется идентификационным полем. Учтите, что идентификационное поле нужно определить во время создания потому что его нельзя создать впоследствии после включения данных в таблицу. Дело в том, что такое поле не может содержать неопределенные значения, а поля без неопределенных значений можно создавать только до вставки данных. В этом отношении SQL Server не обладает такой гибкостью, которой обладает база данных Microsoft Access, но это именно та цена, которую придется заплатить за повышенную производительность и масштабируемость SQL Server. В следующем разделе более подробно описывается способ создания идентификационных полей в таблице базы данных.
10. После этого на экране появится диалоговое окно Choose Name (Выбор имени), в котором следует ввести имя созданной таблицы. Здесь можно ввести любое имя, но для примеров данной главы следует использовать имя tblCustomer.
11. Вновь созданная таблица появится в окне Microsoft SQL Servers.
Создание идентификационного поля для уникальной идентификации записей
Полезно, но не обязательно, для каждой записи иметь информацию, которая будет уникально идентифицировать ее. Часто этот уникальный идентификатор не имеет ничего общего с бизнес-данными. В SQL Server можно создавать идентификационное поле, аналогичное полю AutoNumber в базах данных Microsoft Jet. При создании каждой записи ей автоматически присваивается уникальное числовое значение в идентификационном поле.
Идентификационное поле в SQL Server отличается от поля AutoNumber в Microsoft Jet и обладает следующими возможностями:
• любой числовой тип данных (в Jet оно может иметь тип только длинного целого числа);
• увеличение своего значения на любое определенное число (в Jet это может быть либо единица, либо случайное значение);
• нумерация с любого значения (в Jet нумерация может начинаться только с 1);
• восстановление значений; это позволяет вставить специфическое число в уникальное поле для восстановления записи, которая, например, была случайно удалена (в Jet уникальное поле всегда доступно только для чтения).
Идентификационное поле в SQL Server обладает меньшей гибкостью, чем поле AutoNumber в Jet: если вы собираетесь создать идентификационное поле, то должны сделать это при создании таблицы. Это происходит из-за того, что в SQL Server допускается позднее создание полей, содержащих неопределенные значения, а поля, не содержащие неопределенных значений, могут быть созданы только во время создания таблицы.
Чтобы создать идентификационное поле с помощью программы SQL Server Enterprise Manager, выполните ряд действий.
1. В окне конструктора таблицы Design Table создайте новое поле ID. Выберите для него тип данных int. Помните, что этот тип данных имеет размер четыре байта, подобно типу данных Integer в Visual Basic .NET.
2. Снимите
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 для устранения коллизий между записями, которые вводятся неподключенными пользователями.
• Второй вариант — сохранение значения счетчика во временной таблице и использование этого значения для создания каждого нового первичного ключа создаваемой записи. При этом необходимо использовать транзакцию, которая считывает текущее значение из таблицы счетчика, определяет с его помощью первичный ключ новой записи и увеличивает значение в таблице счетчика. Причем все эти действия представляют собой одну атомарную операцию. При использовании этой технологии есть одно преимущество: соблюдается последовательность значений первичного ключа. К недостаткам (по сравнению с простым созданием идентификационного поля) можно отнести необходимость написания хранимой процедуры и добавления нужных таблиц к базе данных. Сохранение значения счетчика в одной таблице также может привести к возникновению конфликтов при одновременном доступе к ней, что может вызвать проблемы с производительностью в интенсивно используемой системе.