давайте предположим, что мы имеем основную таблицу, с следующим содержанием:как это удаление записи в средней таблице сделано
key value
--------------
a andreas
b bernd
c chris
e ernst
f frank
g gerold
и мы создали seconardy с обратным вызовом, который просто подсчитывает буквы в первичных данных , мы получим
5 b
5 c
5 e
5 f
6 g
7 a
теперь, когда я удалить запись «Эрнста», вторичный вход «5 е» будет удален тоже. Как определяется, , который вторичная запись должна быть удалена? Выполняет ли BDB обратный вызов снова, а затем сканирование таблицы по вычисленному значению? «5» можно подскочить, но чтобы найти «5 е», нужен курсор, верно?
вопрос не о двусмысленности, так как (как вы сказали правильно) sec.data == pri.key, вы можете получить доступ к первичной полностью проиндексированной. Но доступ к второму не может быть полностью проиндексирован, так как вторичный ключ не является уникальным. Так что удаление из него ДОЛЖНО делать поиск курсора? Или я чего-то не хватает? – Tommylee2k
Я не уверен, что вы спросите: курсоры используются как внутри, так и снаружи в BDB. Обратный вызов вызывается один раз с помощью первичного ключа-> значения и отвечает за создание набора пар вторичных ключей-> значений для операции (включая удаление), связанной с уникальным первичным ключом. Никакой курсор не подвергается обратному вызову. Почему имеет значение, если используется внутренний курсор (или нет)? –
Я хочу избежать проблемы с производительностью: когда я удаляю основной, я не хочу, чтобы BDB выполнял сканирование таблицы, чтобы удалить вторичный. см. мой пример: как узнать, какая строка из них с ключом «5» должна быть удалена, не читая их? (в моем примере есть только 4 из них, моя жизнь там будет 10 м +). Или «e ernst» в первичном и «5 e» во вторичном связанном каким-то образом промежуточным (невидимым для меня)? – Tommylee2k