Каждая таблица имеет один или несколько ключей-кандидатов. Выберите один из них для первичного ключа; добавьте УНИКАЛЬНЫЕ ограничения на другие, чтобы обеспечить семантическую корректность. Это не имеет никакого отношения к тому, чтобы восстановить таблицу, если что-то «перепуталось».
У вас также должны быть индексы столбцов, которые содержатся в предложениях WHERE, чтобы сделать доступ как можно быстрее. Это конкретные случаи применения/использования.
Пример того, что я имею в виду, это таблица адресов. У вас может быть суррогатный первичный ключ. У вас также есть индексы для различных комбинаций zip, city, province, county и т. Д., Чтобы сделать SELECT эффективными. Вы также можете захотеть, чтобы комбинация street1/stree2/city/province/zip была UNIQUE. Зависит от вашей бизнес-проблемы.
Ну, если отношение было потеряно из-за того, что база данных испортила первичные ключи родительской таблицы, то это не способ восстановить отношения , если никакое другое поле не имеет поля, соответствующего полю родительской таблицы. Таким образом, данные тогда бесполезны. Это все моя мотивация. Но я спрашиваю об неопытности. Если вы скажете мне; нет, никто никогда этого не делает, тогда хорошо, я могу просто забыть идею :) – bretddog
Например, если я регистрирую некоторые данные за каждый день, а также у меня есть набор событий в этот день, хранящихся в другой таблице. У меня будет дневной стол и таблица событий. У дня были бы поля: ID, Date, SomeParameter. Событие имеет поля: ID, DayID, Note1, Note2. В этом случае я не сохраняю дату в таблице событий. Если бы я это сделал, это были бы дубликаты данных, я думаю. Но это также означает, что существует только существующее отношение - это внешний ключ DayID. – bretddog