Pour générer des données échantillons, j'utilise des applications Python simples.
Considérations :
-
Simple à modifier et à configurer.
-
Un ensemble de données reproductibles que vous pouvez utiliser pour tester les performances et obtenir des résultats cohérents.
-
Respectez toutes les règles et contraintes d'intégrité référentielle de la BD.
-
Des données réalistes.
Les deux premières indiquent que vous voulez produire des fichiers script qui chargeront vos données. La troisième est plus difficile. Il existe des moyens de découvrir les métadonnées et les contraintes de la base de données. En regardant 3 et 4 ensemble, vous ne voulez pas une simple ingénierie inverse -- vous voulez quelque chose que vous pouvez contrôler pour produire des valeurs réalistes.
En règle générale, vous souhaitez créer votre propre modèle d'entité afin de vous assurer que les plages et les relations clés sont correctes.
Vous pouvez le faire de trois façons.
-
Génère des fichiers CSV de données que vous pouvez charger manuellement. De belles données de test répétables.
-
Générer des scripts SQL que vous pouvez exécuter. De belles données reproductibles, également.
-
Utilisez une connexion ODBC pour générer des données directement dans la base de données. En fait, je n'aime pas autant cette méthode, mais vous pourriez l'utiliser.
Voici une version dépouillée, à une table seulement, d'un générateur de données qui écrit un fichier CSV.
import csv
import random
class SomeEntity( list ):
titles = ( 'attr1', 'attr2' ) # ... for all columns
def __init__( self ):
self.append( random.randrange( 1, 10 ) )
self.append( random.randrange( 100, 1000 ) )
# ... for all columns
myData = [ SomeEntity() for i in range(10000) ]
aFile= open( 'tmp.csv', 'wb' )
dest= csv.writer( aFile )
dest.writerow( SomeEntity.titles )
dest.writerows( myData )
aFile.close()
Pour les entités multiples, vous devez calculer la cardinalité. Au lieu de générer des clés aléatoires, vous voulez faire une sélection aléatoire parmi les autres entités. Ainsi, ChildEntity pourrait choisir un élément aléatoire de ParentEntity pour s'assurer que la relation FK-PK est correcte.
Utilisez random.choice(someList)
y random.shuffle(someList)
pour assurer l'intégrité référentielle.