Главная страница
Навигация по странице:

  • CREATE

  • Примечание

  • Лекции и практики (1). Курс лекций и материалы для практических занятий


    Скачать 1.01 Mb.
    НазваниеКурс лекций и материалы для практических занятий
    Дата17.03.2023
    Размер1.01 Mb.
    Формат файлаdocx
    Имя файлаЛекции и практики (1).docx
    ТипКурс лекций
    #996812
    страница12 из 75
    1   ...   8   9   10   11   12   13   14   15   ...   75

    Создание таблиц


    Создание нового пустого отношения (таблицы) выполняется с помощью команды DDL CREATE TABLE. Упрощённый синтаксис этой команды:

    CREATE TABLE <имя таблицы>

    ( <имя поля1> <тип данных> [ (<размер>) ]

    [ [NOT] NULL] [ DEFAULT <выражение> ]

    [<ограничения целостности поля>…]

    [, <имя поля2> <тип данных> [ (<размер>) ]

    [ [NOT] NULL] [ DEFAULT <выражение> ]

    [<ограничения целостности поля>] .,..] [, <ограничения целостности таблицы>] );

    Расшифровка элементов описания приведена в табл. 3.1.

    Таблица 3.1. Описание элементов команды CREATE TABLE

    Элемент

    Описание

    <имя таблицы>

    Имя таблицы, обычный идентификатор. Должно быть уникальным в

    рамках базы данных (подсхемы базы данных).

    <имя поля>

    Имя поля (столбца) таблицы, обычный идентификатор.

    <тип данных>

    Тип данных поля. Можно использовать один из следующих типов:

    • INTEGER, INT, SMALLINT целые числа;

    • NUMERIC[(длина [, точность])], NUMBER[(длина [, точность])] – числа с фиксированной запятой;

    • FLOAT, REAL – вещественные числа;

    • CHAR[(длина)], VARCHAR(длина) – символьные строки фиксиро- ванной и переменной длины;

    • DATE, DATETIME – дата/время;

    • TIME – время (есть не во всех СУБД).

    <размер>

    Размер поля в символах (для текста и чисел).

    <ограничения целостности>

    • PRIMARY KEY первичный ключ (обязательный, уникальный и единственный на таблицу);

    • UNIQUE уникальность значения поля в пределах столбца таблицы;

    • CHECK (<условие>) условие, которому должно удовлетворять значение поля;

    • REFERENCES <имя таблицы> [(<имя столбца>)] внешний ключ.

    <ограничения целостности таблицы>

    <имя таблицы> [(<список полей>)] внешний ключ;

    • PRIMARY KEY (<список полей>) первичный ключ;

    • UNIQUE (<список полей>) – уникальное значение комбинации по- лей в пределах таблицы.

    Если размер поля не указан, то принимается значение, принятое в данной СУБД по умолчанию для указанного типа. Для всех СУБД точность для число- вых типов по умолчанию равна 0, размер поля типа CHAR по умолчанию равен 1, а для типа VARCHAR размер указывать обязательно.

    Для типа DATE поддерживается арифметика дат, например: (<текущая дата> + 1) – завтра

    (<дата1> – <дата2>) – количество дней, прошедших между двумя датами; (<текущая дата> + 1/24) – через час (для типа дата-время).

    Получить текущую дату можно с помощью специальной функции, имя которой зависит от СУБД: sysdate – для Oracle; now() – для Access и MySQL; getdate() для MS SQL Server и т.д.

    Стандарт SQL включает понятие неопределённого или неизвестного зна- чения – NULL-значения. Для обязательных полей устанавливается ограничение NOT NULL. Это означает, что при изменении значения этого поля или при до- бавлении новых записей таблицы значение этого поля не может быть неопреде- ленным (NULL). Ограничение NOT NULL можно наложить на поле только один раз, иначе возникает ошибка.

    Для любого поля с помощью конструкции DEFAULT <выражение> мо- жет быть задано значение по умолчанию. Оно используется в тех случаях, ко- гда при добавлении данных в таблицу значение этого поля не указывается.

    Для ограничений целостности можно задавать имена:

    CONSTRAINT <имя> <ограничение целостности>

    Примерысозданиятаблиц:

    1. Таблица "Отделы" с полями "Номер отдела" (ПК), "Название отдела":

    CREATE TABLE depart

    ( depno NUMERIC(2) CONSTRAINT pk_dep PRIMARY KEY, name VARCHAR(80) NOT NULL);

    1. Таблица "Сотрудники" с полями "Номер отдела" (внешний ключ), "Табель- ный номер сотрудника" (ПК), "ФИО сотрудника", "Должность", "Оклад", "Дата рождения", "Телефон", "Дата поступления на работу":

    CREATE TABLE emp

    (depno NUMERIC(2) CONSTRAINT ref_dep REFERENCES depart, tabno CHAR(5) CONSTRAINT pk_emp PRIMARY KEY,

    name VARCHAR(50) NOT NULL, post VARCHAR(35) NOT NULL, salary NUMERIC(7,2) NOT NULL

    CONSTRAINT check_salary CHECK (salary > 4600), born DATE NOT NULL,

    phone CHAR(11),

    edate DATE DEFAULT trunc(sysdate));

    Примечание: функция sysdate возвращает дату и время, поэтому следует с помощью функ- ции trunc (сокращение от truncate) устанавливать время в 0 часов, 0 минут, 0 секунд.

    1. Таблица "Дети сотрудников" с полями "Табельный номер родителя" (внеш- ний ключ), "Имя ребенка", "Пол", "Дата рождения":

    CREATE TABLE children

    ( tabno CHAR(5) CONSTRAINT ref_emp REFERENCES emp(tabno), name VARCHAR(50) NOT NULL,

    sex CHAR, born DATE,

    CONSTRAINT pk_child PRIMARY KEY (tabno, name),

    /* составной первичный ключ */ CONSTRAINT check_sex CHECK (sex IN ('м', 'ж')));

    Обратитевнимание:

    • общие ограничения целостности и составные ключи указываются через запятую после последнего поля;

    • если внешний ключ ссылается на первичный ключ (ПК) другого отноше- ния, имена полей ПК можно не указывать (см. создание таблицы emp);

    • типы полей внешнего ключа должны совпадать с типами полей первич- ного (или уникального) ключа, на который он ссылается;

    • если внешний ключ составной, список полей входящий в ключ, указыва- ется после перечисления всех полей таблицы с ключевым словом FOREIGN KEY:

    create table exam -- "Расписание зачетов", основная таблица ( eclass NUMERIC(3), -- аудитория

    edate DATE, -- дата

    edisc VARCHAR(60), -- дисциплина UNIQUE (eclass, edate));

    create table tab -- "Зачеты", подчинённая таблица ( tid NUMERIC(6) PRIMARY KEY,

    tclass NUMERIC(3), -- аудитория

    tdate DATE, -- дата

    tgroup CHAR(6), -- группа

    FOREIGN KEY (tclass, tdate) REFERENCES exam(eclass, edate));

    При выполнении команды создания таблицы в общем случае СУБД дела- ет следующее:

      1. Проверяет команду на синтаксическую правильность: если есть ошибки, выдаёт пользователю сообщение о первой выявленной ошибке, иначе пе- реходит к следующему пункту.

      2. Проверяет права пользователя, который запустил эту команду: если права на выполнение подобной операции есть, то переходит к следующему пункту, иначе выдаёт сообщение о недостаточности прав.

      3. Записывает в словарь-справочник данных сведения о создаваемой табли- це (имя, перечень полей с типами данных, размерами и ограничениями целостности, а также некоторую дополнительную информацию).

      4. Создаёт отдельный файл для хранения данных или выделяет отдельную область памяти (это зависит от того, как конкретная СУБД хранит дан- ные; подробнее об этом рассказано в главе 5. "Физическая организация баз данных").

      5. Создаёт дополнительные объекты базы данных, связанные с данной таб- лицей (например, индексы, о которых рассказано также в главе 5).
        1. 1   ...   8   9   10   11   12   13   14   15   ...   75


    написать администратору сайта