Установка uniq: true относится к индексу, где все строки индекса должны быть уникальными.То есть одна и та же строка может не иметь идентичных ненулевых значений для всех столбцов в этом индексе, как другая строка.Помимо того, что они используются для ускорения запросов, индексы UNIQUE могут использоваться для принудительного ограничения данных, поскольку система баз данных не допускает нарушения этого правила отдельных значений при вставке или обновлении данных.
Ваша система базы данныхможет разрешить применение индекса UNIQUE к столбцам, которые допускают значения NULL, и в этом случае две строки могут быть идентичными, если они обе содержат значение NULL (обоснование здесь заключается в том, что NULL считается не равным себе).Однако в зависимости от вашего приложения это может оказаться нежелательным: если вы хотите предотвратить это, вам следует запретить значения NULL в соответствующих столбцах.
Составные уникальные индексы создаются как,
add_index :association_table, [:table1_id, :table2_id], unique: true
, который будет выполнять более быстрые запросы, такие как
AssociationTable.where(table1_id: 34, table2_id: 54)
Примечание-1 Порядок столбцов в составном индексе имеет значение, поэтому AssociationTable.where(table2_id: 54, table1_id: 34)
не выполняется быстрее
Примечание-2 Нет смысла хранить ваши table_id1
и table_id2
в отдельных индексах, если у вас также есть уникальный индекс обоих столбцов