Если я правильно понял вопрос, можно использовать промежуточные таблицы.
Таблицы:
ITEM
id | name
1 | t-shirt
2 | polo shirt
3 | jeans
CATEGORY
id | name
1 | top
2 | bottom
ATTRIBUTE
id | name
1 | size
2 | inseam
3 | waist
ITEM_CATEGORY
id | item_id | category_id
1 | 1 | 1
2 | 2 | 1
3 | 3 | 2
ITEM_ATTRIBUTE
id | item_id | attribute_id | value (или value_id если атрибуты определены)
1 | 1 | 1 | XL
2 | 2 | 1 | M
3 | 3 | 2 | 34
4 | 3 | 3 | 32
На практике, скорее всего, пригодятся также полиморфные связи, когда в одном столбце могут храниться ссылки на строки, принадлежащие разным таблицам. Для этого в исходную таблицу добавляется столбец type, где хранится тип (к какой таблице обращаться), а в другом столбце хранится id строки в этой таблице.
В таблицу ITEM_ATTRIBUTE уже можно добавить столбец type, чтобы хранить и ссылки на строки в разных таблицах, где перечисляются значения атрибутов (например добавить таблицу TOP_SIZE_VALUE и пихать не строку, а ссылку) и строки.