Чтобы реализовать ограничение или ключ? [Базы данных] - PullRequest
0 голосов
/ 25 января 2012

Ссылка: Oracle документация"База данных Oracle применяет все ограничения PRIMARY KEY с помощью индексов"

Q's

1> Я не понял причину наличия ограниченияключ (который также будет реализовывать ограничение, т.е. в этом случае ограничение PRIMARY KEY и индекс PRIMARY KEY)?

2> Должен ли я реализовать ключ или ограничение при построении таблиц базы данных?

3> Существуют ли сценарии, в которых использование одного над другим будет фактором + ve / -ve?

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Я не уверен, что понимаю вопрос.

В Oracle, когда вы объявляете ограничение первичного ключа, Oracle неявно создаст индекс для применения этого ограничения, если не существует подходящего индекса для применения ограничения. Это не «или / или» ситуация, когда вы создаете одно или другое - вы всегда будете иметь как ограничение первичного ключа, так и индекс для применения этого ограничения.

У вас есть выбор, создавать ли индекс отдельно перед созданием ограничения и указывать Oracle использовать индекс для принудительного применения ограничения, или разрешить Oracle неявно создавать индекс. Как правило, не имеет значения, какой подход вы выберете, но есть вещи, о которых нужно знать.

  1. Если вы сначала создаете индекс, у вас есть возможность делать такие вещи, как указание табличного пространства, в котором будет находиться индекс. Это не принесет выигрыша в производительности, но некоторые администраторы баз данных предпочитают организовывать табличные пространства для разделения таблиц и индексов.
  2. Если сначала создать индекс, удаление ограничения в будущем не приведет к удалению индекса. Это может быть хорошо или плохо, это зависит от того, что ожидает человек, который отбрасывает ограничение. Однако полезно быть последовательным, чтобы в будущем, если кому-то понадобится сбросить ограничения, все ограничения будут вести себя одинаково.
  3. Если сначала создать индекс, можно использовать индексы, включающие другие столбцы, для принудительного применения первичного ключа. Например, если вы знаете, что хотите иметь составной индекс для своего первичного ключа и некоторого другого столбца, вы можете использовать этот индекс для принудительного применения первичного ключа вместо создания потенциально избыточных индексов, т.е.
  4. Если Oracle неявно создает индекс, имя индекса будет соответствовать имени ограничения. Если вы сначала создадите индекс вручную, имена могут отличаться. Технически это не имеет значения, совпадают ли имена, но у вас могут быть сценарии, которые полагаются на совпадение имен, чтобы связать ограничения с индексами.

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

SQL> create table foo( col1 number, col2 number );

Table created.

Elapsed: 00:00:00.01
SQL> create index idx_foo on foo( col1, col2 );

Index created.

Elapsed: 00:00:00.00
SQL> alter table foo
  2    add constraint pk_foo
  3        primary key( col1 )
  4        using index idx_foo;

Table altered.

Elapsed: 00:00:00.13
0 голосов
/ 25 января 2012

1) Почти все системы управления базами данных, которые я знаю, реализуют ограничение первичного ключа, создавая уникальный индекс. Это самый «простой» способ сделать, как еще можно эффективно предотвратить повторяющиеся записи?

2) Что вы подразумеваете под "Должен ли я реализовать ключ или ограничение при построении таблиц базы данных?" «Контейнеры» имеют довольно много значений: первичный ключ, проверка, значение по умолчанию, уникальный ... Не все из них форсируют создание индекса. Не существует решения относительно «одной вещи» или «другой», это зависит от того, чего вы хотите достичь.

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