Многие табличные конструкции, которые я вижу вокруг, имеют столбец id в качестве первичного ключа. Например, log_id в некоторой таблице Logging, event_id в некоторой таблице событий и так далее. Этот столбец не будет зависеть от любого другого столбца в любой другой таблице и однозначно идентифицирует запись. С точки зрения просмотра часто, когда столбцы, используемые для поиска информации, представляют собой другие столбцы в таблице, которые также могут быть проиндексированы (status/event_type/etc и т. Д.). Итак, какова необходимость иметь такой столбец идентификатора, представляющий запись в таблице? Если я должен удалить такой столбец идентификаторов из таблицы журналов и вместо этого использовать комбинированный ключ, какое преступление я совершу? Почему такая распространенная практика имеет такой уникальный столбец идентификатора в таблице, где иначе этот столбец не используется в приложении? В надежде услышать мнения экспертов. : oНужен ли столбец идентификатора в таблице аудита?
ОБНОВЛЕНИЕ: Благодарим всех за быстрые ответы! Прежде всего, я хотел бы понять, почему такая обычная практика заключается в использовании суррогатного ключа вместо составного ключа в таблицах, таких как таблицы аудита (есть и другие примеры, но попытка сосредоточиться на разговоре). В такой таблице я мог бы легко идентифицировать уникальную запись, комбинируя событие, идентификатор пользователя и временную метку. Тем не менее, большинство проектов, которые я исследовал в Интернете, используют такие ключи, как event_id. Я пытаюсь понять, почему, если есть какая-то настоящая причина? На самом деле, не означает ли это, что потребляет ненужное хранение db?
хорошо, просто google для суррогатного и естественного ключа, дебаты не молоды (и выберите суррогат;)) –
В большинстве случаев вы можете получить столбец идентификатора, который в большинстве случаев связан с основным ограничением ключа, делая этот столбец id уникальным индексом. Этот же уникальный индекс, который позволяет оптимизатору SQL определять конкретный план выполнения в зависимости от конкретных элементов (количество элементов для извлечения, объем и т. Д.). Если вы не планируете использовать идентификатор где-либо еще в своем приложении, вы должны определенно определить индексы в своих таблицах, чтобы повысить производительность. – RelevantUsername