Я откололся от стада на этом. НЕ делайте ссылку на запрос (текст), номер продукта (int) и номер редакции (int) первичным ключом. Вы указали, что ссылка на запрос относится к текстовому типу, и имели в виду, что она будет иметь ширину 25, 50 или 500 символов? Если первичный ключ сделан из этих полей, он будет слишком широким, на мой взгляд, так как он будет добавлен к каждому индексу, созданному для этой таблицы, увеличивая размер каждой строки индекса на размер трех полей и любой таблицы, которую необходимо использовать. внешнему ключу обратно в эту таблицу также понадобятся три поля.
Сделайте три поля уникальным индексом. Поместите значение автоинкремента как первичный ключ и сделайте его кластеризованным индексом. Таблицы, которые будут ссылаться на эту основную таблицу, будут иметь небольшой объем памяти, чтобы связать данные из первой таблицы в другую.
Что касается нормализации, то это не имеет значения, нормализовано или нет, если ваши данные содержат только несколько тысяч строк, или даже 50000 или 500000. Когда данные начинают увеличиваться, чем доступный кэш-память, это становится проблемой.
Разработка представления для представления данных приложению для выполнения бизнес-правила. Разработка хранимых процедур для принятия данных для хранения. Разработайте структуру таблицы, чтобы соответствовать времени отклика в SLA. Если вам нужно нормализовать или денормализовать, или указать, или индексировать, или получить больший сервер для соответствия SLA, приложение никогда не узнает об этом, потому что вы всегда предоставляете данные через представление, соответствующее бизнес-правилу.