besogonskiy
@besogonskiy
работаю php laravel разработчиком.

Как анхитектурно работать с бд если у иерархических структур одни и те же поля и приоретет имеет поле низшего звена?

Попадаются такие моменты в проекте которые меня смущают. Например, вес товара указывается в товаре и в категории товара. Если вес не указан в товаре, то мы берем вес у категории (группы) товара. А у группы товаров тоже могут быть родительские группы. И если не указан вес в группе, то надо брать из родительской группы.

Так то все нормально. Если только базой данных пользоваться. но если на уровне кода писать функцию которая по id товара получает его вес и берет в его поле веса и если не указан то берет в его категории и если и там не указан, то в родительской.

вот какой подход нужно реализовать чтоб все это сделать?

Это нужно через бапросы все реализовывать чтоб получать значение веса или на стороне сервера баз данных написать такую функцию, которая бы отдавала уже готовый результат?

Или еще один пример. "товар запрещенный в стране Х". нужно чтоб при добавлении товара если ему зададут категорию товара чтоб признак принадлежности к стране Х ему проставлялся. А если его категории присвоят новый признак чтоб товару он проставлялся и всем товарам входящим туда. А если родительской категории он проставится то чтоб всем товарам просавился бы. А если хоть одному товару дадут другой признак чтоб всем вышестоящим категориям он аннулировался.
это же значит что поле будет во всех таблицах. А можно ведь обойтись без этого. Но учесть что могут быт частные случаи. Что в независимости от иерархии у элемента могут быть свои особые приорететы и он станет обладателем признака которым не обладают вышестоящие.

Как в этом случае проектировать? Закладывать поля с одним и тем же именем в иерархически-связанных сущностях?

Или есть готовый патерн?
  • Вопрос задан
  • 20 просмотров
Пригласить эксперта
Ответы на вопрос 1
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
На каждую такую проблему можно сделать системное решение по алгоритму чтения-записи данных. В Вашем случае это будут алгоритмы функций возвращающие нужные значения, исходя из имеющихся данных и обрабатывающие их изменения. А закрывается ситуация хорошей документацией на эти алгоритмы, доступной для разработчиков. По хорошему надо запретить прямой доступ к данным и сделать алгоритимические геттеры и сеттеры, чтобы исключить ситуацию, когда кто то мимо алгоритмов будет читать данные для алгоритмов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы