Kniga-Online.club

W Cat - SQL за 24 часа

Читать бесплатно W Cat - SQL за 24 часа. Жанр: Базы данных издательство неизвестно, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

Ключевое поле или ключ (primary key) - это термин, используемый для обозначения столбца или нескольких столбцов, однозначно идентифицирующих каждую строку в таблице. Обычно ключ задается одним столбцом в таблице, но можно задать и сложный ключ на основе комбинации значений нескольких столбцов. Например в таблице с информацией о служащих логично выбрать в качестве ключевых полей столбец с идентификационным кодом служащего или столбец с присвоенным служащему табельным номером. Целью является наличие для каждой записи в таблице уникального ключа, подобного персональному идентификационному коду. Поскольку в таблице с информацией о служащих скорее всего не должно быть более одной записи для каждого из служащих, табельный номер служащего будет вполне подходящим ключом. Ключ таблице назначается при ее создании.

В следующем примере ключевым полем в таблице EMPLOYEEJIBL назначается поле EMP_ID:

CREATE TABLE EMPLOYEEJTBL (EMP_ID CHAR(9) NOT NULL PRIMARY KEY,

EMPJSIAME VARCHAR2(40) NOT NULL,

EMP_ST_ADDR VARCHAR2(20) NOT NULL,

EMP_CITY VARCHAR2(15) NOT NULL,

EMP_ST CHAR(2) NOT NULL,

EMP_ZIP NUMBER(5) NOT NULL,

EMP_PHONE NUMBER(10) NULL,

EMP_PAGER NUMBER(10) NULL);

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

CREATE TABLE EMPLOYEEJTBL

(EMP_ID CHAR(9) NOT NULL,

EMP_NAME VARCHAR2(40) NOT NULL,

EMP_ST_ADDR VARCHAR2(20) NOT NULL,

EMP_CITY VARCHAR2(15) NOT NULL,

EMP_ST CHAR(2) NOT NULL,

EMP_ZIP NUMBER(5) NOT NULL,

EMP_PHONE NUMBER(10) NULL,

EMP_PAGER NUMBER(10) NULL, PRIMARY KEY (EMP_ID));

В этом примере офаничивающее условие ключа указано в операторе CREATE TABLE через запятую после определения всех столбцов таблицы.

Ключ, составленный из нескольких столбцов, можно задать одним из следующих способов.

CREATE TABLE PRODUCTS (PROD_ID VARCHAR2(10) NOT NULL,

VEND_ID VARCHAR2(10) NOT NULL,

PRODUCT VARCHAR2(30) NOT NULL,

COST NUMBER(8,2) NOT NULL, PRIMARY KEY (PROD__ID, VEND_ID));

ALTER TABLE PRODUCTS "

ADD CONSTRAINT PRODUCTS_PK PRIMARY KEY (PROD_ID, VEND_ID);

Требования уникальности

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

Рассмотрим следующий пример.

CREATE TABLE EMPLOYEE_TBL

(EMP_ID CHAR(9) NOT NULL PRIMARY KEY,

EMP_NAME VARCHAR2(40) NOT NULL,

EMP_ST_ADDR VARCHAR2(20) NOT NULL,

EMP_CITY VARCHAR2(15) NOT NULL,

EMP_ST CHAR(2) NOT NULL,

EMP_ZIP NUMBER(5) NOT NULL,

EMP_PHONE NUMBER(10) NULL UNIQUE,

EMP_PAGER NUMBER(IO) NULL);

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

просах или при связывании таблиц. Столбцу EMP_PHONE назначен атрибут UNIQUE, и это значит, что никакие двое служащих не должны иметь одинаковые телефонные номера. Между этими двумя атрибутами нет большой разницы за исключением того, что ключ используется для упорядочения данных таблицы и для связывания таблиц.

Внешние ключи

Внешний ключ (foreign key) - это столбец в дочерней таблице, ссылающий на ключ родительской таблицы. Использование внешних ключей является основным механизмом поддержания ссылочной целостности внутри реляционной базы данных. Столбец, назначенный внешним ключом, используется для ссылок на столбец, определенный как ключ в другой таблице. Рассмотрим пример создания внешнего ключа.

CREATE TABLE EMPLOYEE_PAY_TBL (EMP_ID CHAR(9) NOT NULL,

POSITION VARCHAP2(15) NOT NULL,

DATE_HIRE DATE NULL,

PAY_RATE NUMBER(4,2) NOT NULL,

DATE_LAST_RAISE DATE NULL,

CONSTRAINT EMP_ID_FK FOREIGN KEY (EMP_!D, REFERENCES EMPLOYEE_TBL (EMP_ID));

Столбец EMP_ID в этом примере назначается внешним ключом таблицы EMPLOYEE PAY_TBL Это! внешний ключ ссылается на столбец EMP_ID таблицы EMPLOYEE_TBL. Наличие внешнего ключа гарантирует, что для, каждого значения ЕМР ID в таблице EMFLOYEE_PAY_TBL найдется соогве!С1вующее значение EMP_ID в таблице EMPLOYEE_TBL. Такую связь называют родителъско-дочерним отношением. Родительской таблицей является таблица EMPLOYEE_TBL, а дочерней - EMPLOYEE_PAY_TBL. Чтобы лучше понять суть родительско-дочерних отношений между таблицами, рассмотрите рис. 3.2.

Рис. 3.2. Родительско-дочерние отношения между таблицами

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

Внешний ключ можно назначить таблице с помощью команды ALTER TABLE, как показано в следующем примере.

ALTER TABLE EMPLOYEE_PAY_TBL

ADD CONSTRAINT ID_FK FOREIGN KEY (EMP_ID)

REFERENCES EMPLOYEE_TBL (EMP_ID);

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

Атрибут NOT NULL

В предыдущих примерах ключевые слова NULL и NOT NULL использовались во всех строках с определениями столбцов после указания типа данных. Атрибут NOT NULL - это ограничение, которое можно назначить столбцу в таблице. Это ограничение не позволяет оставлять столбцы пустыми. Другими словами, для столбца, помеченного как NOT NULL, требуется наличие данных во всех строках таблицы. Если атрибут NOT NULL не назначен для столбца, для такого столбца значением по умолчанию обычно является NULL, что позволяет иметь пустые, значения в столбце.

Использование условий проверки

УСЛОВИЯ проверки можно использовать для проверки правильности вводимых в столбец данных. Условия проверки используются для организации редактирования данных в базе данных на нижнем уровне, хотя довольно часто редактирование данных бывает организовано на уровне приложений. Вообще говоря, обычно при редактировании имеются ограничения на вводимые в таблицы или другие объекты данные, или на уровне самой базы данных или на уровне приложения, доступного пользователю. Условия проверки обеспечивают дополнительный уровень защиты данных.

Использование условий проверки показано в следующем примере.

CREATE TABLE EMPLOYEE_TBL (EMP_ID CHAR(9) NOT NULL,

EMP_NAME VARCHAR2(40) NOT NULL,

EMP_ST_ADDR VARCHAR2{20) NOT NULL,

EMP_CITY VARCHAR2(15) NOT NULL,

EMP_ST CHAR(2) NOT NULL,

EMP_ZIP NUMBER(5) NOT NULL,

EMP_PHONE NUMBER(10) NULL,

EMP_PAGER NUMBER(10) NULL), PRIMARY KEY (EMP_ID), CONSTRAINT CHK_EMP_ZIP CHECK ( EMP_ZIP = '46234' );

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

Если нужно использовать условия проверки для того, чтобы допустить ZIP-коды только из определенного набора значений, условие может выглядеть так:

CONSTRAINT CHK_EMP_ZIP CHECK (EMP_ZIP in ('46234','46227','46745'));

Если имеется минимальный уровень оплаты труда, который должен быть обеспечен служащему, можно указать следующие условия:

CREATE TABLE EMPLOYEE_PAY_TBL

(EMP_ID CHAR(9) NOT NULL,

POSITION VARCHAR2(15) NOT NULL,

DATE_HIRE DATE NULL,

PAY_RATE NUMBER(4,2) NOT NULL,

DATE_LAST_RAISE DATE NULL,

CONSTRAINT EMP_ID_FK FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEEJTBL (EMP_ID), CONSTRAINT CHK_PAY CHECK (PAY_RATE > 12.50 ) );

В данном примере любому из служащих, информация о которых заносится в таблицу, необходимо назначить 'плату более $12,50 в час. Для условий проверки можно использовать практически любые условия, допустимые для запросов SQL. В ходе дальнейшего чтения такие условиях будут обсуждаться подробнее.

Удаление условий

Любое из назначенных условий можно удалить с помощью оператора ALTER TABLE с опцией DROP CONSTRAINT. Например, чтобы отменить назначение ключа в таблице EMPLOYEES, можно воспользоваться следующей командой.

ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

Изменение таблицы.

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

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

Изменение таблицы.

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

Резюме

Вы узнали кое-что об объектах базы данных, в частности, достаточно подробно разобрались с таблицами. Таблицы представляют собой простейшую форму хранения данных в реляционных базах данных. В таблицах сгруппированы логически единые куски информации, например, о служащих, клиентах или товарах. Таблицы состоят из столбцов, которым назначаются различные атрибуты, в основном, типы данных и различные ограничения - значения NOT NULL, ключевые поля и внешние ключи, требования уникальности значений.

Перейти на страницу:

W Cat читать все книги автора по порядку

W Cat - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


SQL за 24 часа отзывы

Отзывы читателей о книге SQL за 24 часа, автор: W Cat. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

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

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*