Я отсканировал пост, в котором обсуждается дизайн базы данных, и должен сказать, что на основании того, что вы сказали, и того факта, что у вас уже есть пользователи, запрашивающие дополнительные тесты (повторяющиеся значения), я бы хотел, чтобы вы пересмотрели редизайн БД.Вы можете создать плоский вид для имитации существующей плоской таблицы образцов-данных и использовать ее для минимизации поломок в существующем приложении.
Но вы уже приняли это решение, так как насчет изменения ситуации?Вместо того, чтобы исправлять базу данных, добавьте код в службу домена, которая преобразует данные из ее плоского макета, оставляя все нулевые значения.
Одна из идей состоит в том, чтобы написать представление, которое выравнивает данные и исключает из негоноль без тестовых ситуаций.Запрос вызовет удивление (вероятно, меня это заинтересует), потому что он выглядит неприятно, но в действительности СУБД прекрасно справляется с оптимизацией и выполнением запроса (в любом случае, в Oracle).У меня были отличные результаты, что-то вроде: *
создать представление programmer_exp_unflat as (выберите programmer_id, 'C #', csharp_yrs из programmer_exp_flat, где csharp_yrs нетnull union выберите programmer_id, 'Java', java_yrs из programmer_exp_flat, где java_yrs не является нулевым union, выберите programmer_id, 'Cobol', cobol_yrs из programmer_exp_flat, где cobol_yrs не является нулевым, повторить xx) повторить xx)от двойного
Это задом наперед и безобразно, независимо от того, как вы на это смотрите, но это сводит ваш набор результатов к минимуму и не нужно разбивать вещи на категории.Новые тестовые значения требуют модификации представления и, в зависимости от гибкости пользовательского интерфейса и бизнес-правил, могут не требовать каких-либо изменений.
Это затрудняет кодирование в пользовательском интерфейсе, как это было бы при правильном проектировании базы данных впервое место, но результат вашего запроса сводится только к выполненным тестам.Если ваши пользователи обладают гибкостью, пользовательский интерфейс может быть спроектирован так, чтобы отображать результаты теста в виде списка, заставляющего отображать кусок пирога.Ваш текущий дизайн в значительной степени заставляет вас изменять пользовательский интерфейс и базу данных при каждом новом тесте.
Это типовые проблемы, которые делают разработчика настолько увлекательным - и почему все примеры CRUD-приложений для маркетингового трюкакоторые могут быть построены за пять минут, бесполезны в реальном мире.