Если есть неструктурированные данные, например в товара могут быть разные характеристики и они зависят от категории, то лучше использовать PostgreSQL, потому что он поддерживает JSON-поля
Использование z-index - более универсальный способ. Хотя есть две проблемы - может быть неизвестен максимальный z-index страницы и для одинакового z-index перекрытия зависит от следования элементов.
Конечно, всегда можно использовать JavaScript) добавлено:
Я использовал для этого display: table , элементы display: table-cell виравниваються по высоте