Робота з guid полями блог михаила флёнова

Ми вже не раз говорили про те, що для первинного ключа найкраще використовувати тип uniqueidentifier, який краще з точки зору забезпечення унікальності рядків. Але з іншого боку цей тип гірше для індексу, тому що знову додаються записи можуть містити GUID ідентифікатор менший, ніж вже існуючі в таблиці.

При роботі з GUID полями ми отримуємо досить переваг і недоліків. У цьому розділі ми розглянемо і те і інше, а також приклади обходу недоліків.

Лістинг 2.14. Створення таблиць, пов'язаних через uniqueidentifier поля

Зверніть увагу, що для первинного ключа в якості значення за замовчуванням вказана функція NewID (), яка генерує унікальний ідентифікатор. Якщо користувач буде додавати запис і не вкаже явне значення, то воно буде згенеровано.

Давайте очистимо таблицю (DELETE FROM tbPhoneType_G) і додамо нове поле

Подивимося, як можна побачити записи в зв'язаних таблицях. Тут особливої ​​різниці від інших типів ключових полів немає:

Зверніть увагу, що значення GUID спочатку полягає в фігурні дужки і після цього ще й в одинарні лапки. Якщо щось з цього не вказати, сервер поверне помилку.

Знаючи ідентифікатор, можна додати рядок однією командою INSERT INTO. наприклад:

Лістинг 2.15. Додавання типу тільки якщо це потрібно

Як бачите, проблеми при використанні GUID є, але їх можна вирішити. Але ж переваги від використання GUID затьмарюють всі недоліки. Головна перевага - можливість самостійного завдання первинного ключа, без ризику порушення цілісності. Ця перевага особливо проявляється при розробці клієнтської програми на мовах високого рівня, наприклад, Delphi або C ++. На цих мовах користувач може вводити дані на стороні клієнта і зберігати їх в пам'яті. Коли дані накопичаться, їх можна одним блоком зберегти на сервері.

Поки дані знаходяться в пам'яті клієнтської машині, первинний ключ з автоматично збільшує полем не може містити значення, а значить не можна створювати зв'язків. Якщо первинний ключ має тип GUID, то програма може сама створити значення для ключа і використовувати його для створення зв'язків в пам'яті клієнтської машині з даними, які ще навіть не існують на сервері. Зараз вже майже у всіх мовах є власні можливості генерування GUID значень, результат яких абсолютно однаковий.

Схожі статті