Page 121 - 4636
P. 121
Ключове слово UNSIGNED, задане після цілочисельного типу, означає, що відповідне значення
може бути тільки нульовим або позитивним (тобто беззнаковим).
2 Типи стовпців
Як приклад розглянемо першу таблицю:
create table customers
( customerid int unsigned not null auto_increment primary
key, name char(50) not null, address char(100) not null,
citychar(30) not.null
);
При створенні будь-якої таблиці необхідно приймати рішення щодо типів стовпців.
Відповідно до схеми таблиця customers містить чотири стовпці. Перший, customerid, - це
первинний ключ, який визначений безпосередньо. Згідно з нашим рішенням, він буде представлятися
цілим числом (тип даних int), причому ці ідентифікатори повинні бути беззнаковими (unsigned). Крім
того, ми скористалися атрибутом autoincrement, тому MySQL подбає про присвоєння унікальних
ідентифікаторів - а нам однією турботою менше.
Всі інші стовпчики міститимуть дані строкового типу. Для них вибрали тип char. Він визначає
поля фіксованої ширини. Ширину вказують в дужках, тому, наприклад, ім'я (поле name) може містити
до 50 символів.
Цей тип даних завжди буде виділяти для зберігання імен пам'ять довжиною 50 символів, навіть
якщо насправді імена будуть коротшими. MySQL буде доповнювати дані відповідною кількістю
прогалин. Альтернативним типом даного є varchar, який використовує тільки необхідний обсяг
пам'яті (плюс один байт). Тут доводиться йти на невеликий компроміс - varchar займає менше
пам'яті, зате char працює швидше.
Зверніть увагу, що всі стовпці оголошені як NOT NULL. Це мінімальна оптимізація, яка злегка
прискорює роботу бази даних.
Деякі оператори CREATE відрізняються за синтаксисом. Погляньте на таблицю orders:
create table orders
( orderid int unsigned not null auto_increment primary
key, customerid int unsigned not null, amount
float(6,2), date date not null
);
Значення стовпця amount визначені як числа з плаваючою точкою (тип float). Для більшості типів
даних з плаваючою комою можна визначити ширину відображення даних і кількість десяткових
розрядів. У даному випадку сума замовлення буде виражатися в доларах, тому обрана порівняно
велика ширина відображення підсумкової суми (6) і два десяткових розряду для подання центів.
Стовпець date має тип даних date.
У даній таблиці вказано, що всі стовпці, крім стовпця amount, повинні бути NOT NULL. Чому?
Коли в базу даних вноситься замовлення, його необхідно зберегти в таблиці orders, додати елементи в
таблицю order_items і тільки потім підрахувати суму замовлення. На етапі створення замовлення сума
замовлення не відома, тому вона може мати значення NULL.
Таблиця books володіє схожими характеристиками:
create table books
( isbn char (13) not null primary key,
author char(50), title char (100), price
float(4,2)
) ;
У цьому випадку не потрібно генерувати первинний ключ, тому що номери ISBN визначаються в
іншому місці. Інші поля залишені NULL, оскільки книжковий магазин може отримати спочатку тільки
ISBN, а вже потім назву книги, авторів та ціну.
Таблиця order items служить прикладом застосування первинних ключів за кількома стовпцями:
118