Теория баз данных


         

Операторы DDL в языке SQL с заданием ограничений целостности - часть 3


Родительской таблицей в данном случае называется таблица, которая связана с данной таблицей связью «один-ко-многим» (1:М). При этом каждая строка родительской таблицы может быть связана с несколькими строками определяемой таблицы. Трансляция операторов SQL проводится в режиме интерпретации, поэтому важно, чтобы сначала была бы описана родительская таблица, а потом уже все подчиненные (дочерние) таблицы, связанные с ней. Иначе транслятор определит ссылку на неопределенный объект.

Наконец, если указано проверочное ограничение столбца, то условие поиска этого ограничения должно ссылаться только на данный столбец, и неявно порождается соответствующее проверочное ограничение для всей таблицы. В проверочных ограничениях, накладываемых на столбец, нельзя задавать сравнение со значениями других столбцов данной таблицы.

В главе 5 определены типы данных, которые допустимы по стандартам SQL. Попробуем написать простейший оператор создания таблицы BOOKS из базы данных «Библиотека».

При этом будем предполагать наличие следующих ограничений целостности:

  • Шифр книги — последовательность символов длиной не более 14, однозначно определяющая книгу, значит, это — фактически первичный ключ таблицы BOOKS.

  • Название книги — последовательность символов, не более 120. Обязательно должно быть задано.

  • Автор — последовательность символов, не более 30, может быть не задан.
  • Соавтор — последовательность символов, не более 30, может быть не задан.

  • Год издания — целое число, не менее 1960 и не более текущего года. По умолчанию ставится текущий год.

  • Издательство — последовательность символов, не более 20, может отсутствовать.

  • Количество страниц — целое число не менее 5 и не более 1000.

    CREATE TABLE BOOKS

    (

    ISBN varchar(14) NOT NULL PRIMARY KEY,

    TITLE varchar(120) NOT NULL.

    AUTOR varchar (30) NULL.

    COAUTOR varchar(30) NULL,

    YEAR_PUBLsmallint DEFAULT Year(GetDate())

    CHECK(YEAR_PUBL >= 1960 AND YEAR PUBL <= YEAR(GetDate())),

    PUBLICH varchar(20) NULL.



    Содержание  Назад  Вперед