Таблица соединений без первичного ключа

Скажем, у меня есть соединительная таблица для разрешения отношений «многие ко многим», которые у меня есть между двумя таблицами. В моей соединительной таблице также есть собственный столбец «Метод» для описания отношений. Пример соединительной таблицы

Обычно я бы сделал составной первичный ключ из [a], [b] и [method] (метод должен быть частью того, что делает строку уникальной), но моя проблема в том, что поле [method] может быть NULL. Поэтому я не могу добавить его в первичный ключ.

Итак, что я сделал, так это создал уникальный индекс:

ALTER TABLE A_B ADD UNIQUE INDEX `Unique` (`a`, `b`, `method`);

Таблица не имеет первичного ключа. Это нормально или нужно что-то делать по-другому?


person Cody    schedule 18.06.2013    source источник
comment
Первичный ключ в вашей соединительной таблице может не понадобиться, но я бы рассмотрел следующие вещи: (1) уникальный индекс или первичный ключ предотвращает дублирование (избыточность) данных; (2) первичный ключ полезен при обновлении/удалении строк, поскольку он устраняет двусмысленность в отношении целевой строки. FWIW, несмотря на то, что вы можете включить столбец, допускающий значение NULL, в уникальный индекс, MySQL не обеспечивает уникальность ключа, когда часть ключа равна NULL, т. е. вы можете иметь только одну строку «a», «b», «x», но любое количество 'a','b',строки NULL.   -  person Zenilogix    schedule 19.06.2013


Ответы (1)


Использование первичного ключа — не единственный способ обеспечить уникальность записей. Существует уникальное ограничение, которое вы можете реализовать для выполнения того, что необходимо.

http://www.w3schools.com/sql/sql_unique.asp

person lamilambkin    schedule 18.06.2013
comment
Я навязываю уникальность с помощью уникального индекса, который я добавил, поэтому у меня должно быть хорошо. С точки зрения дизайна БД, нормально ли не иметь ключа в соединительной таблице? - person Cody; 18.06.2013
comment
Хотя уникальность можно обеспечить с помощью ограничения без индекса, использование уникального индекса обычно является лучшим выбором (при условии, что строк больше, чем несколько). Я бы исключил индексы только для столбцов внешнего ключа, где таблица гарантированно будет иметь только несколько строк. - person Zenilogix; 18.06.2013