Мне нужно реализовать следующую классификацию в SQL:
- группа может содержать несколько тестов или несколько (дочерних) групп
- тест может быть в нескольких группах
- (дочерняя) группа может быть в нескольких (родительских) группах
... это означает 2 отношения M: N. Следующие таблицы могут хранить деревья групп:
test_table
test_id (pk), test_name
GROUP_TABLE
идентификатор_группы (pk), имя_группы
TEST_IN_GROUP_TABLE
test_id (fk), group_id (fk)
GROUP_RELATIONS_TABLE
parent_group_id (fk), child_group_id (fk)
Но:
- Как составить список всех тестов в группе? Это звучит для меня невероятно сложно, поскольку группа может содержать тесты или подгруппы с другими тестами.
- Или как изменить таблицы, чтобы сделать возможным такой SELECT? Я мог бы создать дополнительный столбец child_count в GROUP_TABLE. Он будет автоматически заполнен триггером. Но даже при этом это крепкий орешек для меня.