Я знаю, что normalis (z) активно обсуждается в Stack Overflow. Я прочитал многие предыдущие обсуждения. Однако у меня есть дополнительные вопросы.
Я работаю над старой системой с не менее чем 100 таблицами. База данных имеет некоторую ненормализованную структуру, таблицы, которые содержат множество разрозненных данных и другие проблемы. Мне поставлена задача улучшить его. Я не могу просто начать снова, но вам нужно изменить существующую схему.
В прошлом я всегда пытался разработать нормализованные базы данных. Теперь вопросы. Старший разработчик предположил, что в некоторых случаях мы не можем нормализовать:
1) С временными данными. Например, создается счет, который ссылается на продукт. Если клиент запрашивает копию этого счета через год, мы должны иметь возможность изготовить точную копию оригинала. Что, если цена продукта, имя или описание были обновлены? Старший парень предложил, чтобы цена и другая информация о товаре были скопированы в таблицу счетов. Я думаю, может быть, у нас должна быть другая таблица, такая как productPrice, у которой есть поле даты, чтобы мы могли отслеживать изменения в цене с течением времени. Нам понадобится то же самое для описания продукта и имени, которое я предполагаю? Кажется сложным. Как вы думаете?
2) База данных - это система учета. Я не очень хорошо разбираюсь в бухгалтерском учете. В настоящее время некоторые сводные данные выводятся и хранятся в базе данных. Например, общий объем продаж за год. Мой старший помощник сказал, что бухгалтеры любят проверять правильность, сравнивая это значение с данными, которые фактически вычисляются из счетов-фактур и т.д., Чтобы дать им уверенность в правильности работы приложения. Он сказал, что на данный момент, например, мы можем сказать, кто-то случайно удалил счет-фактуру с прошлого года, потому что итоговые значения не будут одинаковыми. Он также отметил, что довольно медленно рассчитывать эти итоги "на лету". Конечно, я сказал, что данные не должны дублироваться и всегда должны рассчитываться при необходимости. Я предложил использовать SQL Reporting Services или другое решение, которое будет генерировать эти отчеты в одночасье и кэшировать их. В любом случае он не убедил. Любые комментарии по этому поводу?
Большое спасибо:)
Приветствия
Марк
ИЗМЕНИТЬ
Спасибо за отличные ответы. Жаль, что я могу только отметить это как ответ, потому что здесь есть много хороших предложений.