Проблемы с пониманием SQL (Oracle) создания таблицы кода - PullRequest
2 голосов
/ 18 октября 2010

Мне известен синтаксис создания таблиц Oracle

CREATE TABLE MyTable(
   id int primary key,
   ...
);

Это создаст таблицу с именем MyTable с первичным ключом int. Итак, ничего нового здесь.

но у меня возникают трудности с пониманием следующего запроса:

CREATE TABLE departament (
   cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY,
   dept_name CHAR(15) NOT NULL,
   admission    DATE      NOT NULL,
   localization CHAR(20))

Когда я смотрю на программное обеспечение Oracle для разработчиков SQL на таблице departement, я вижу 4 столбца: cod_dept, dept_name, admission и localization. На вкладке ограничений я также вижу dept_key, но я не совсем понимаю, что это может означать. Какова dept_key цель здесь?

Редактировать

Хорошо, похоже, это способ определить имя ограничения, которое вы добавляете в таблицу. Мой следующий вопрос: почему бы вам просто не назвать его тем же именем, что и в столбце первичного ключа? Из того, что я видел, кажется, что Oracle по умолчанию просто создает случайное имя для ограничения!

Спасибо

Ответы [ 7 ]

7 голосов
/ 18 октября 2010

Когда вы пишете id int primary key, Oracle создаст ограничение первичного ключа, чтобы обеспечить уникальность значений первичного ключа. Все ограничения имеют имена, поэтому в этом случае Oracle назначает автоматически сгенерированное имя этому ограничению. Но вы можете задать имя этого ограничения явно, используя синтаксис CONSTRAINT:

cod_dept    INTEGER CONSTRAINT dept_key PRIMARY KEY

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

ALTER TABLE department DROP CONSTRAINT dept_key;

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

2 голосов
/ 18 октября 2010

Первичные ключи могут быть явно названы.dept_key это просто имя.

1 голос
/ 18 октября 2010

Другим синтаксисом для того же будет написать следующее после вашей инструкции CREATE TABLE.

ALTER TABLE department
ADD CONSTRAINT dept_key PRIMARY KEY (cod_dept)

dept_key - это имя ограничения, созданного вами как первичный ключ для этой таблицы.,Чтобы ядро ​​базы данных знало первичный ключ и индексировало его для получения самых быстрых результатов и т. Д., Оно должно создать известное ограничение, которое будет проиндексировано.Здесь именно вы дали имя, которое dept_key.

. Для вашей любезной информации часто пишется PK_[table name] для ограничений первичных ключей и FK_[current_table_name]_[foreign_table_name] для ограничений внешних ключей.

Надеюсь, это поможет!=)

1 голос
/ 18 октября 2010

dept_key - имя ограничения.Вы указали здесь имя: "INTEGER CONSTRAINT dept_key PRIMARY KEY" , поэтому оно создаст ограничение с именем dept_key.

1 голос
/ 18 октября 2010

Это созданное вами ограничение, представляющее первичный ключ.

Таблица состоит из:

  • Столбцы (где живут данные)
  • Индексы(индексированные копии данных, используемых для более быстрого поиска)
  • Ограничения (правила относительно того, какие данные могут быть в таблице, включая PK, FK и проверочные ограничения).
1 голос
/ 18 октября 2010

dept_key - имя ограничения первичного ключа.Это означает, что cod_dept является уникальным идентификатором вашей таблицы, механизмом идентификации строки, и поэтому он может иметь только одно вхождение любого заданного значения.

0 голосов
/ 19 октября 2010

Я думаю, что всякий раз, когда мы создаем значение первичного ключа, по умолчанию Oracle создает ограничение для него с тем же именем, но похоже, что вы создаете ограничение с другим именем. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...