Лекция
Привет, Вы узнаете о том , что такое паттерны, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое паттерны, объектно-реляционного структурирования, identity field, foreign key, mapping , association table mapping , настоятельно рекомендую прочитать все из категории Проектирование веб сайта или программного обеспечения.
Паттерн проектирования Identity Field
Хранит первичный ключ из БД в объекте, чтобы обеспечивать соответствие между объектом и строкой в БД.
Реляционные базы данных отличают одну запись от другой при помощи первичного ключа. Но объекты в памяти не нуждаются в таком ключе, так как объектная система следит отличием объектов сама. При чтении из БД проблем не возникает, но для записи, нужна привязка объектной системы к БД.
Для этого нет ничего проще и очевиднее, чем Identity Field. Все, что нужно - это хранить первичный ключ из БД в свостве объекта
Паттерн проектирования Foreign Key Mapping
Представляет отношения по внешним ключам между таблицами в виде отношений между объектами
Объекты могут ссылаться друг на друга напрямую, через объектные ссылки. Даже простейшая объектно-ориентированная система будет содержать ряд объектов, объединенных между собой всем многообразием способов. Чтобы хранить эти объекты в БД, необходимо сохранять эти ссылки. Тем не менее, так как в разное время в объектах хранятся разные данные, нельзя сохранять значения "как есть". Еще больше усложняется все тем, что объекты могут легко содержать коллекции ссылок на други объекты. Такая структура нарушает нормализацию реляционных БД.
Разметка внешних ключей сводит ссылку на объект к внешнему ключу в БД.
Паттерн проектирования Association Table Mapping
Сохраняет соответствие в виде таблицы с внешними ключами к таблицам, которые объединены этим соответствием.
Объекты с легкостью могут управлять наборами из нескольких значений при использовании коллекций в качестве собственных свойств. Об этом говорит сайт https://intellect.icu . Реляционные базы данных не предоставляют такой возможности и ограничиваются полями с одним значением. При разметке соответствия "один ко многим", можно использовать паттерн Foreign Key Mapping (Разметка внешних ключей), используя внешний ключ для однозначного соответствия. Но отношения "многие ко многим" не могут обеспечить этого, потому что нет однозначной сущности на которую ссылался бы внешний ключ.
Решением здесь является классическое разрешение, используемое в реляционных БД годами: создание дополнительной таблицы, для хранения множественных связей. Тогда использование Association Table Mapping позволит разметить многозначные поля через связующую таблицу
Паттерн проектирования Dependent Mapping
Один класс предоставляет mapping (распределение) и для основного класса и для зависимого.
Некоторые объекты существуют только в контексте других объектов. Песни из альбома могут быть загружены или сохранены в любой момент, когда альбом загружен или сохранен. Если они не используются другими таблицами в БД, то можно упростить процесс маппинга, переложив маппинг песен на объект-маппер альбомов. Такое поведение называется Dependent Mapping(Управление распределением подчиненных сущностей)
Паттерн проектирования Embedded Value
Записывает объект в несколько полей таблицы другого объекта.
Множество небольших объектов играют важную роль в объектно-ориентированной системе, но не подходят для хранения в отдельной таблице. Это, к примеру, объекты-деньги, зависящие от валюты и диапазоны дат. Не смотря на то, что обычно для хранения отдельного объекта используется отдельная таблица, ни один человек в трезвом уме не станет делать отдельную таблицу для денег.
Паттерн Embedded Value (Объединенное свойство) распределяет значения полей объекта в поля таблицы объекта-владельца.
На схеме представлен объект "Место работы" (Employment) со ссылками на объекты диапазона дат и денег. В таблице, хранящей объект "место работы", объекты дат и денег раскладываются на отдельные поля, но не хранятся в отдельных таблицах.
Паттерн проектирования Serialized LOB
Хранение графа связей объектов в БД посредством сериализации их в один large object (LOB).
Объектная модель зачастую содержит сложные графы взаимосвязей мелких объектов. Большая часть информации в таких структурах содержится не в самих объектах, а в связях между ними. Например, при работе со структурой организации, объектная модель достаточно хорошо может отразить все взаимосвязи между структурами и можно с легкостью добавлять методы, позволяющие получать данные об отделах и их взаимосвязях.
Но хранение этой структуры в БД - не такая уж и простая задача. Первое приходящее на ум решение - таблица "организация" с внешним ключем к родителю. Но работа с такой структурой БД требует использования JOIN'ов, которые одновременно медленные и громоздкие.
Объекты не нуждаются в представлении в виде связанных записей в таблице. Есть другая форма представления - сериализация, когда весь граф объектов записывается в один LOB (large object).
Паттерн проектирования Single Table Inheritance
Представление всех классов из иерархии наследования в виде одной таблицы в БД, содержащей столбцы для всех полей различных классов.
Реляционные БД не поддерживают наследование, по этому, записывая данные об объектах в БД, мы вынуждены придумывать, как отобразить наследование в таблицах. Конечно, мы стараемся минимизировать JOIN'ы, которые мнговенно появятся, если наследование реализовывать несколькими таблицами в БД. Паттерн Single Table Inheritance (наследование с единой таблицей) записывает все поля всех классов иерархии в одну таблицу.
Паттерн проектирования Class Table Inheritance
Представляет иерархию наследования классов в виде структуры БД, когда одна таблица отвечает одному классу.
Одно из самых заметных несоответствий между объектной и реляционной моделью - отсутствие в РБД поддержки наследования. Иногда необходима структура БД, точно соответсвующая объектной модели и позволяющая наращивать дерево наследования. Паттерн Class Table Inheritance (Наследование с таблицами классов) предоставляет такие возможности, используя одну таблицу на один класс из структуры наследования.
Паттерн проектирования Concrete Table Inheritance
Представляет иерархию наследования классов в виде структуры БД, когда одна таблица отвечает целиком одному классу.
Проблема объектно-реляционного взаимодействия заключается в отсутствии поддержки наследования в РБД. Если рассматривать таблицы с объектной точки зрения, есть смысл записывать каждый объект в отдельную запись в БД. Такой подход реализует паттерн Concrete Table Inheritance, в котором каждому конкретному классу из иерархии наследования соответствует своя таблица.
Паттерн проектирования Inherritance Mappers
Структура организации распределителей данных, которые работают с деревом наследования
При работе с распределением объектных данных из дерева наследования в БД, необходимо уменьшить объем кода, используемого для записи и чтения данных из БД. Также необходимо предоставлять и абстрактные, и конкретные методы распределения данных, которые позволяли бы сохранять и читать и родительские и дочерние классы.
Не смотря на то, что нюансы такого поведения могут видоизменяться в зависимости от схемы работы с деревом насделования ( Single Table Inheritance, Class Table Inheritance или Concrete Table Inheritance), общая струтура одинакова для них всех.
Анализ данных, представленных в статье про паттерны, подтверждает эффективность применения современных технологий для обеспечения инновационного развития и улучшения качества жизни в различных сферах. Надеюсь, что теперь ты понял что такое паттерны, объектно-реляционного структурирования, identity field, foreign key, mapping , association table mapping и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Проектирование веб сайта или программного обеспечения
Из статьи мы узнали кратко, но содержательно про паттерны
Комментарии
Оставить комментарий
Проектирование веб сайта или программного обеспечения
Термины: Проектирование веб сайта или программного обеспечения