Будьте осторожны с литературой по шаблонам проектирования.
Существует несколько широких видов определений классов. Классы для постоянных объектов (которые похожи на строки в реляционных таблицах) и коллекции (которые похожи на сами таблицы) - это одно.
Некоторые из шаблонов проектирования " Gang of Four " более применимы к активным объектам и менее применимы к постоянным объектам. В то время как вы боретесь с чем-то вроде Abstract Factory , вам не хватит некоторых ключевых моментов дизайна ОО, так как это относится к постоянным объектам.
Наставник объектов Что такое объектно-ориентированное проектирование? * На странице 1012 * многое из того, что вам действительно нужно знать для перехода от реляционного проектирования к ОО-дизайну.
Нормализация, кстати, не является общим принципом проектирования, который всегда применим к реляционным базам данных. Нормализация применяется, когда у вас есть транзакции обновления, чтобы предотвратить аномалии обновления. Это хак, потому что реляционные базы данных - это пассивные вещи; Вы должны либо добавить обработку (например, методы в классе), либо пройти ряд правил (нормализация). В мире хранилищ данных, где обновления редки (или отсутствуют), стандартные правила нормализации не так актуальны.
Следовательно, для моделей данных объекта «нормализовать это не существует».
В OO Design, пожалуй, наиболее важным правилом для разработки постоянных объектов является Принцип единой ответственности .
Если вы разрабатываете свои классы так, чтобы иметь хорошую точность для объектов реального мира, и вы распределяете обязанности между этими классами очень целенаправленно, вы будете довольны своей объектной моделью. Вы сможете отобразить его в реляционную базу данных с относительно небольшими сложностями.
Оказывается, что когда вы смотрите на вещи с точки зрения ответственности, вы обнаруживаете, что правила 2NF и 3NF соответствуют разумному распределению ответственности. Уникальные ключи все еще имеют значение. И производные данные становятся обязанностью функции метода, а не постоянным атрибутом.