LINUX.ORG.RU

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

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

А зачем создавать этот констреинт если можно создать нидекс уникальности? Я спросил про отличие на практике?

KRex
() автор топика
Ответ на: комментарий от KRex

На практике отличие скорее семантическое. Ограничения это не только уникальность, они могут быть например «больше нуля», но вот ограничение уникальности реализовано через индекс.

Причем в базе можно понять где какой вариант:

                Table "public.test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 field1 | integer |           |          |
Indexes:
    "test_field1_key" UNIQUE CONSTRAINT, btree (field1)
               Table "public.test2"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 field1 | integer |           |          |
Indexes:
    "test2_field1_idx" UNIQUE, btree (field1)

Но это все отличия которые я заметил)

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)

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

goingUp ★★★★★
()
Ответ на: комментарий от TDrive

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

KRex
() автор топика
Ответ на: комментарий от goingUp

Часто констрейнты для своей работы требуют индекс и создают его автоматом.

Что значит часто?

Разве есть СУБД, где ограничение уникальности обходится без создания индекса уникальности?

KRex
() автор топика
Ответ на: комментарий от KRex

Разве есть СУБД, где ограничение уникальности обходится без создания индекса уникальности?

Уникальности может и нет, но констрейнты бывают разные, и не всегда требуют индекс https://www.w3schools.com/sql/sql_check.asp Собственно пост был о том, что констрейнт и индекс про разные вещи.

goingUp ★★★★★
()

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

theNamelessOne ★★★★★
()

field1 int unique

как выше писали — это constraint, constraint описаны в стандарте SQL.

create unique index on test(field1);

А это индекс, СУБД реализуют через них constraint, но в стандарте SQL индексы не определяются, это implementation-dependent feature.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.