Я думаю, что использование утки может быть интуитивно понятным в качестве альтернативы.
Например, все современные языки (C #, Java, Python) имеют концепцию множеств. Если вы собираетесь «пересекать» или «объединять» (операторы множеств) через SQL, то вы должны хранить их реляционным способом. Иначе, почему бы не хранить их на родном языке? (в отличие от реляционных). По сути, я хотел бы сказать, что если бы это было сделано в Python, и мы использовали набор Python, то это то, что я бы сохранил. То же самое с Java или C #.
Таким образом, если бы в идентификаторе набора 10 были члены 1,4,5,6, он был бы сохранен в БД следующим образом:
SetId Set
______________________________________
10 1,4,5,6
11 2,3
12 null
Конечно, у него есть недостаток, заключающийся в том, что он может быть проприетарным или даже неэффективным - что вы, возможно, можете сказать, поскольку у вас есть полное определение проблемы. Если вам нужен SQL для анализа, возможно, у моего предложения есть и другие недостатки.
В некотором смысле, функция представления набора каждого из этих языков похожа на DSL (предметно-ориентированный язык) - если вам нужно будет «много говорить» о множестве вещей между классами / объектами приложения, то почему бы и нет использовать естественную посадку?