Имеется примерно такая структура бд.
Документы (таблица doc) хранит основные свойства документа, она связана с типами (таблица type), типы например входящие, приказы,протоколы и т.д.
Есть атрибуты (таблица attribute), в ней хранится название аттрибута, например Способ отправки, Срок ответа и т.д. Аттрибуты связаны с типами, у каждого типа может быть много аттрибутов и наоборот(многие ко многим через таблицу type_attribute). Значения аттрибутов лежат в отдельной таблице и разделены по типу данных и связаны с документом. Как осуществляется связь с типом в этой схеме не указано, это не так важно.
Вывести все атрибуты конкретного документа труда не составляет
SELECT * FROM value_attribute JOIN attribute ON value_attribute.attribute_id = attribute.id WHERE doc_id IN ("список документов")
Отфильтровать документы по одному какому нибудь аттрибуту
SELECT * FROM doc
JOIN value_attribute ON value_attribute.doc_id = doc.id
WHERE doc.type_id = 11
AND( value_attribute.attribute_id = Номер атрибута AND value_varchar LIKE '%значение%')
Как отсортировать документы по двум аттрибутам одного типа в одном запросе? Тоесть сделать что то типа того
SELECT * FROM doc JOIN value_attribute ON value_attribute.doc_id = doc.id WHERE doc.type_id = 11 AND( value_attribute.attribute_id = Номер атрибута1 AND value_varchar LIKE '%значение1%' AND value_attribute.attribute_id = Номер атрибута2 AND value_varchar LIKE '%значение2%')
Если делать так, то вернуться все документы с атрибутом1 и 2. А нужно получаеться искать атрибут2 из найденных в атрибуте 1.
И вопрос вообще в целом по схеме базы, или стоит как то перестроить её? Есть какие то примеры? чтобы у какой то сущности было неограниченое количество других сущностей, или лучше разбивать все атрибуты на отдельные страницы?