2016-12-19 1 views
0

давайте предположим, что мы имеем основную таблицу, с следующим содержанием:как это удаление записи в средней таблице сделано

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 е», нужен курсор, верно?

ответ

0

Связь между вторичными < -> первичной в Беркли БД находится на уникальном идентификаторе. Таким образом, с хранилищами key-> value вторичное значение == первичный ключ.

С уникальным идентификатором, который связывает вторичные базы данных, нет никакой двусмысленности.

+0

вопрос не о двусмысленности, так как (как вы сказали правильно) sec.data == pri.key, вы можете получить доступ к первичной полностью проиндексированной. Но доступ к второму не может быть полностью проиндексирован, так как вторичный ключ не является уникальным. Так что удаление из него ДОЛЖНО делать поиск курсора? Или я чего-то не хватает? – Tommylee2k

+0

Я не уверен, что вы спросите: курсоры используются как внутри, так и снаружи в BDB. Обратный вызов вызывается один раз с помощью первичного ключа-> значения и отвечает за создание набора пар вторичных ключей-> значений для операции (включая удаление), связанной с уникальным первичным ключом. Никакой курсор не подвергается обратному вызову. Почему имеет значение, если используется внутренний курсор (или нет)? –

+0

Я хочу избежать проблемы с производительностью: когда я удаляю основной, я не хочу, чтобы BDB выполнял сканирование таблицы, чтобы удалить вторичный. см. мой пример: как узнать, какая строка из них с ключом «5» должна быть удалена, не читая их? (в моем примере есть только 4 из них, моя жизнь там будет 10 м +). Или «e ernst» в первичном и «5 e» во вторичном связанном каким-то образом промежуточным (невидимым для меня)? – Tommylee2k

Смежные вопросы