Що ти борешся, це вертикальне перегородка. Це фізична техніка проектування баз даних для підвищення продуктивності. Як і у будь-якій техніці дизайну фізичних баз даних, її застосовність залежить від конкретних запитів, які ви намагаєтеся оптимізувати, і якщо ця методика їх оптимізує. З логічної точки зору, якщо ці нові поля залежать від ключа кандидата для вашої сутності, то це факти, які належать до нього. Спочатку слід переконатися, що ви повністю розумієте функціональну залежність цих нових полів від ваших кандидатських ключів, щоб переконатися, що вони насправді є фактами щоденних переглядів сторінок. Якщо вони є, вирішити розділити їх на іншу таблицю - це оптимізація продуктивності, яку слід проводити, лише якщо вона досягає ваших цілей ефективності.
Взагалі вертикальний розподіл корисний, якщо ви будете запитувати ці нові стовпці нечасто та виразно з інших стовпців у вихідній таблиці. Розмістивши ці стовпці в іншій таблиці, що має той самий ПК, що і ваша існуюча таблиця, ви можете запросити її безпосередньо, коли ви хочете, щоб ці нові стовпці отримали набагато більший пробіг, оскільки у вас буде набагато більше рядків на сторінці на диску для цієї нової таблиці оскільки всі стовпці з початкової таблиці не будуть сидіти на цих рядках. Однак, якщо ви завжди будете запитувати ці стовпці разом із стовпцями в оригінальній таблиці, тоді вертикальний розділ не матиме особливого сенсу, оскільки для їх отримання завжди доведеться зовнішнє з'єднання. Сторінки таблиць на диску надходять у буферний пул СУБД незалежно, ніколи не попередньо з'єднуючись, і так, що приєднання повинно відбуватися при кожному виконанні запиту, навіть якщо дані закріплені в буферному пулі. У цьому сценарії створення їх NULLABLE стовпців у вихідній таблиці дозволило б двигуну зберігання СУБД ефективно зберігати їх при NULL та усунути необхідність приєднання при пошуку.
Мені здається, що ваш випадок використання є останнім, і додавання їх як NULLABLE до вашої оригінальної таблиці - це шлях. Але як і у всьому іншому в дизайні баз даних, це залежить, і для того, щоб прийняти правильне рішення, потрібно знати очікуване навантаження і від того, від чого вдалий вибір залежить. Хорошим прикладом правильного використання для вертикального розділення може бути панель пошуку людей, де у вашій програмі є дуже рідко заселена інформація про людину, яку хтось може захотіти шукати, але рідко. Якщо ви помістите цю інформацію в іншу таблицю, у вас є кілька хороших варіантів ефективності. Ви можете записати пошук так, щоб у вас було 2 запити - один, який використовує основну, завжди заповнену інформацію для пошуку (наприклад, прізвище або ssn), та та, що зовнішня приєднується до дуже рідко заселеної інформації лише тоді, коли її запитують для пошуку. Або ви можете скористатися оптимізатором СУБД, якщо він досить розумний для того, щоб визначити для даного набору змінних хостів, що зовнішнє з'єднання не потрібно і не виконуватиме його, і таким чином вам потрібно створити лише 1 запит.
Яку платформу СУБД ви використовуєте? Те, як платформа обробляє сховище стовпців NULL, оптимізує ваш запит, а також наявність розрідженої підтримки стовпців (це має SQL Server) вплине на рішення. Зрештою, я б рекомендував спробувати обидві конструкції в тестовому середовищі, використовуючи дані про розмір виробництва та навантаження, і побачити, що краще досягає ваших цілей ефективності.