SQL

Вопрос по внешнему ключу.

После просмотра часового видеоурока кипит бошка. разбиралась связь многие ко многим. создаются 3 таблицы. бла бла бла. стандартно. но вопрос дибильный, башка не моет понять: зачем идет присваивание ключей?? почему эти инты с автоинкрементом нельзя оставить обыными интами? чтобы они не могли изменяться? есть внешний ключ и главный там.. в чем их различие? вот просто не могу усвоить.
Голова не варит. не судите строго.
Потому что он должен ссылаться на существующую запись в другой таблице. Если такой записи нет, то и ключа быть не может.
Анатолий Звездилов
Анатолий Звездилов
51 139
Лучший ответ
Александр Львов Там прикол в том был, что я ввожу в промежуточную таблицу через INSERT 2 значения :/ и чет как-то мне пох на ключи..
найди искомую квартиру, не зная её номера? Или зная, но таких номеров в этом доме десяток в произвольных местах? ))
Если в БД используется связь "многие ко многим" - казните разработчика на месте.
Нужно почитать книжку по базам данных, про нормальные формы и индексы. Это не много и легко.

Первичный (или главный) ключ - это поле (или набор полей), однозначно определяющее запись таблицы. Если среди таблицы учеников будет 3 с именем Саша, то как потом определять кому в журнал пятерку ставить?) Значения по первичному ключу в рамках таблицы не должны повторяться по определению.

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

Внешний ключ - это по сути ссылка на справочник. Например есть работник, есть таблица всех работников и есть отделы, там пот в записи о работнике ставиться код отдела, а поле с кодом отдела имеет внешний ключ на основную таблицу отделов. Это нужно для соблюдения целостности. Иначе, например, пользователь может внести код отдела, которого не существует.