Просто быстрый вопрос проектирования базы данных: ВСЕГДА используете поле идентификатора в КАЖДОЙ таблице или только в большинстве из них? Очевидно, что большинство ваших таблиц выиграют, но есть ли таблицы, в которых вы можете не использовать поле идентификатора?
Например, я хочу добавить возможность добавлять теги к объектам в другой таблице (foo). Итак, у меня есть таблица FooTag с полем varchar для хранения тега и полем fooID для ссылки на строку в foo. Нужно ли создавать кластерный индекс вокруг произвольного поля идентификатора? Разве не было бы более эффективно использовать fooID и мое текстовое поле в качестве кластеризованного индекса, так как я почти всегда буду искать по fooID? Кроме того, использование моего текста в кластерном индексе сохранит сортировку данных, упрощая сортировку, когда мне придется запрашивать данные. Недостатком является то, что вставки будут занимать больше времени, но разве это не будет компенсировано усилением во время выбора, что будет происходить гораздо чаще?
Что вы думаете о полях идентификаторов? Гибкое правило или нерушимый закон?
edit: Мне известно, что приведенный пример не нормализован. Если пометка должна быть основной частью проекта, с пометкой нескольких таблиц и других «дополнений», решение с двумя таблицами будет четким ответом. Однако в этом простейшем случае целесообразно ли нормализация? Это сэкономит место, но потребует дополнительного объединения при выполнении запросов