Документ может называться членом семьи, если он имеет общий docid.
Простое сопоставление выглядит так:
Docs: docid
1 : a,b
2 : a,c,d
3 : d,e,f
4 : b,g
в таблице эти данные выглядят так:
1 = a
1 = b
2 = a
2 = c
2 = d
3 = d
3 = e
3 = f
4 = b
4 = g
Здесь 1,2,3,4 Документы являются семейством, так как у них есть общие, например: 1 и 2 имеют общий «a», 2 и 3 имеют общий «d», а 1 и 4 имеют общий «b».
Я могу добиться этой группировки, сделав для нее отдельную таблицу и при вставке проверки, существует ли какая-либо запись, а затем присвоив существующее значение всем docid.
When doc 1 is inserted :
checks any of (a,b) already in family table:
if no:
insert into table and get a famid
следовательно, вставляет: a = 1 и b = 1 строки.
и для других случаев, например, do c 2 case
: any (a,c,d) exists --> doc 1 has been inserted hence output : a = 1
so take this value and assign to a,c,d (separate entries: a=1, c=1, d=1)and upsert into family table.
Таким образом, таблица семейств выглядит так:
Docs : docid : famid
1 : a : 1
1 : b : 1
2 : c : 1
2 : d : 1
3 : e : 1
3 : f : 1
4 : g : 1
Я хочу сохранить это, чтобы поддерживать группу, чтобы в этом случае, если у меня есть c 1,2,3,4, я мог сгруппировать по famid и вернуть любой из этих 4 документов.
Меня беспокоит , что этот docid может содержать ручную ошибку, поэтому через несколько дней "a" может отсоединиться от doc1, поэтому логически документы 2 и 3 больше не должны быть членами семьи famid 1, но семейная таблица все еще хранит его, следовательно, вся цепочка будет повреждена, есть ли способ, которым я могу сохранить и поддерживать, чтобы разъединить связь в случае удаления общего узла в цепочке.