Чтение онлайн

на главную - закладки

Жанры

Обработка баз данных на 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. Снимите флажок в столбце 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 для устранения коллизий между записями, которые вводятся неподключенными пользователями.

• Второй вариант — сохранение значения счетчика во временной таблице и использование этого значения для создания каждого нового первичного ключа создаваемой записи. При этом необходимо использовать транзакцию, которая считывает текущее значение из таблицы счетчика, определяет с его помощью первичный ключ новой записи и увеличивает значение в таблице счетчика. Причем все эти действия представляют собой одну атомарную операцию. При использовании этой технологии есть одно преимущество: соблюдается последовательность значений первичного ключа. К недостаткам (по сравнению с простым созданием идентификационного поля) можно отнести необходимость написания хранимой процедуры и добавления нужных таблиц к базе данных. Сохранение значения счетчика в одной таблице также может привести к возникновению конфликтов при одновременном доступе к ней, что может вызвать проблемы с производительностью в интенсивно используемой системе.

Поделиться:
Популярные книги

Бояръ-Аниме. Газлайтер. Том 33

Володин Григорий Григорьевич
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
6.25
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33

Собрание сочинений. Том третий

Гашек Ярослав
3. Ярослав Гашек. Собрание сочинений в 6-ти томах
Юмор:
юмористическая проза
5.00
рейтинг книги
Собрание сочинений. Том третий

Наследие Маозари

Панежин Евгений
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
5.80
рейтинг книги
Наследие Маозари

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Стая

Сергеева Оксана Николаевна
1. Стая
Любовные романы:
современные любовные романы
остросюжетные любовные романы
9.37
рейтинг книги
Стая

Изгнанник Ардена

Анри Софи
Фантастика:
фэнтези
готический роман
историческое фэнтези
5.00
рейтинг книги
Изгнанник Ардена

Газлайтер. Том 27

Володин Григорий Григорьевич
27. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Газлайтер. Том 27

Лекарь Империи 5

Карелин Сергей Витальевич
5. Лекарь Империи
Фантастика:
городское фэнтези
аниме
героическая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 5

Чужое лицо

Тополь Эдуард Владимирович
Детективы:
политические детективы
8.81
рейтинг книги
Чужое лицо

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.43
рейтинг книги
Виконт. Книга 1. Второе рождение

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
6.25
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Гроза богов

Мазуров Дмитрий
10. Громовая поступь
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Гроза богов

Робин Гуд

Дюма-отец Александр
Приключения:
исторические приключения
8.06
рейтинг книги
Робин Гуд