2016-12-19 3 views
0

supposons que nous avons une table primaire, avec le contenu suivant:comment est la suppression de l'entrée dans le tableau secondaire fait

key value 
-------------- 
a andreas 
b bernd 
c chris 
e ernst 
f frank 
g gerold 

et nous avons créé un seconardy, avec un rappel qui vient compte les lettres dans les données primaires , nous obtenons

5 b 
5 c 
5 e 
5 f 
6 g 
7 a 

maintenant, lorsque je supprime l'entrée pour « ernst », l'entrée secondaire « 5 e » sera supprimé aussi. Comment est-il déterminé, quelle entrée secondaire doit être supprimée? BDB exécute-t-il de nouveau le rappel, suivi d'une analyse de table sur la valeur calculée? "5" peut être sauté, mais pour trouver "5 e" il y aurait un curseur nécessaire, non?

Répondre

0

L'association entre secondaire < -> primaire dans Berkeley DB est sur un identificateur unique. Donc, avec key-> value stores, la valeur secondaire == la clé primaire.

Avec un identifiant unique associant les bases de données primaires < ->, il n'y a pas d'ambiguïté.

+0

la question n'est pas sur l'ambiguïté, Depuis (comme vous l'avez dit correctement) sec.data == pri.key, vous pouvez accéder au primaire entièrement indexé. Mais l'accès au secondaire ne peut pas être entièrement indexé, car la clé secondaire n'est pas unique. Donc supprimer de cela DOIT faire une recherche de curseur? Ou est-ce que je manque quelque chose? – Tommylee2k

+0

Je ne suis pas sûr de ce que vous demandez: les curseurs sont utilisés à la fois en interne et en externe dans BDB. Le rappel est appelé une fois avec la clé primaire -> valeur, et est responsable de la création de l'ensemble des paires clé secondaire> valeur pour l'opération (y compris la suppression) associée à la clé primaire unique. Aucun curseur n'est exposé au rappel. Pourquoi est-ce important si un curseur interne est utilisé (ou non)? –

+0

Je veux éviter un problème de performance: quand je supprime le primaire, je ne veux pas que BDB fasse une analyse de table pour supprimer le secondaire aussi. voir mon exemple: comment sait-on QUELLE ligne de ceux avec la touche "5" doit être supprimée, sans les lire tous? (dans mon exemple il n'y en a que 4, ma vie là-bas aura 10m +). Ou est-ce que "e ernst" dans le primaire et "5 e" dans le secondaire sont en quelque sorte liés de façon interne (invisible pour moi)? – Tommylee2k