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
   116   117   118   119   120   121   122   123   124   125   126