j'applique une classe qui ressemble à une table de base de données typique:Comment mettre en œuvre la table de style de base de données en Python
- a nommé des colonnes et des lignes sans nom
- a une clé primaire par laquelle je peux me référer à la lignes
- prend en charge la récupération et l'affectation par clé primaire et le titre de la colonne
- peut être invité à ajouter un index unique ou non unique pour l'une des colonnes, ce qui permet une récupération rapide d'une ligne (ou un ensemble de lignes) qui ont une donnée valeur dans cette colonne
- enlèvement d'une ligne est rapide et est mis en œuvre comme "soft-delete": la ligne est conservée physiquement, mais est marqué pour suppression et n'apparaîtra pas dans toutes les opérations de récupération ultérieures
- lignes sont rarement ajoutées
- colonnes sont rarement supprimées
j'ai décidé de mettre en œuvre la classe directement plutôt que d'utiliser un wrapper autour SQLite.
Quelle serait une bonne structure de données à utiliser?
Juste à titre d'exemple, une approche à laquelle je pensais est un dictionnaire. Ses clés sont les valeurs de la colonne clé primaire de la table; ses valeurs sont les lignes implémentées de l'une des manières suivantes:
Comme listes. Les numéros de colonne sont mappés dans les titres de colonne (en utilisant une liste pour une direction et une carte pour l'autre). Ici, une opération de récupération convertit d'abord le titre de colonne en numéro de colonne, puis trouve l'élément correspondant dans la liste.
Comme dictionnaires. Les titres de colonnes sont les clés de ce dictionnaire.
Vous n'êtes pas sûr des avantages/inconvénients des deux.
Les raisons pour lesquelles je veux écrire mon propre code sont:
- J'ai besoin de suivre les suppressions de lignes. C'est-à-dire, à tout moment, je veux être en mesure de signaler quelles lignes ont été supprimées et pour quelle raison (la "raison" est passée à ma méthode de suppression).
- J'ai besoin d'information lors de l'indexation (par exemple, alors qu'un index non unique est en cours de construction, je veux vérifier certaines conditions et signaler si elles sont violées)
Pourquoi le faire, plutôt que d'utiliser un SGBD existant? – delnan
En particulier, pourquoi ne pas utiliser un wrapper autour de 'sqlite'? – katrielalex
@delnan @katrielalex: viens d'éditer ma question pour donner quelques raisons. Peut-être y a-t-il un moyen de le faire avec un wrapper sqlite? – max