2017-02-11 1 views
0

Учитывая родительскую таблицу p с колонкой PK id и таблицы c ребенка с колоннами PK foo и bar. c. foo ссылки p. id.Индекс по SQLite дочерней таблицы столбца, уже является частью нескольких столбцов ограничение уникальности

  1. (Почему) Следует создать индекс на c. foo или нет?
  2. А что, если c. bar не существует?

ответ

1

Единственным строгим требованием является родительская таблица; documentation говорит:

Обычно основной ключ ограничения внешнего ключа является первичным ключом родительской таблицы. Если они не являются первичным ключом, то столбцы родительского ключа должны коллективно подчиняться ограничению UNIQUE или иметь индекс UNIQUE.

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

индекс должен быть создан на дочерних ключевых столбцах каждого ограничения внешнего ключа.

Если foo колонны является первым столбцом в индексе, то индекс может быть использован для эффективного поиска значений в foo. (Нет разницы между явными и неявными (PK) индексами.)

Смежные вопросы