LINUX.ORG.RU

PostgreSQL DBMS and foreign key

 , ,


0

1

foreign key в контексте PostgreSQL означает исключительно «foreign key constraint»?

Т.е., foreign key - это в постгресе не только пара индексов, но ещё и требование, чтобы существовало отображение R: V1 > V2?

(значения T1.V1 всегда имели соответствие среди значений T2.V2)

Т.е., foreign key - это в постгресе не только пара индексов

foreign key и индексы — это понятия ортогональные.

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

theNamelessOne ★★★★★
()

не только пара индексов

При чём тут индексы? Даже если считать, что это реализовано за счёт использования внешнего индекса, то что тогда значит «но ещё и требование»? Разумеется тогда будет требование, чтобы значение было в этом внешнем индексе.

no-such-file ★★★★★
()
Ответ на: комментарий от theNamelessOne

который хранится отдельно? и возможно какие-то функции умеет?

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

что такое «внешний индекс»?

Индекс из другой таблицы, очевидно же. Особенно в контексте разговора про внешние ключи.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

Тебе правда интересно, или ты поумничать решил? Ну, например docs.oracle.com

To ensure an order is not booked for a non-existent customer, the customer database can be associated with the order database as a foreign index

no-such-file ★★★★★
()
Ответ на: комментарий от theNamelessOne

foreign key и индексы — это понятия ортогональные.

Ты хотел сказать, «индексы» (indexes) и «ограничения целостности» (constraints), независимые понятия?

По стандарту SQL92 - да. Там в параграфе «4.10 Integrity constraints» не говорится об индексах. То есть, СУБД не обязана строить индексы, проверяя ограничения целостности. Но, я слышал, PostgreSQL автоматически строит неуникальные индексы, если есть связь между двумя таблицами (для ускорения поиска). Или не так?

P.S. Что-то на Wikipedia статьи по SQL/89 нет.

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

https://web.archive.org/web/20081023011256if_/http://savage.net.au:80/SQL/sql-92.bnf

BruteForceSSL
() автор топика
Последнее исправление: BruteForceSSL (всего исправлений: 2)
Ответ на: комментарий от BruteForceSSL

Но, я слышал, PostgreSQL автоматически строит неуникальные индексы, если есть связь между двумя таблицами (для ускорения поиска). Или не так?

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

Ты хотел сказать, «индексы» (indexes) и «ограничения целостности» (constraints), независимые понятия?

Не, я говорил именно про внешние ключи и индексы. Между индексами и ограничениями в PostgreSQL есть только одна связь — unique constraint там под капотом реализуется через уникальный индекс.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)
Ответ на: комментарий от theNamelessOne

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

+1. В других SQL-серверах может быть по-другому (Interbase помнится индексы сам генерил).

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