2010-06-09 6 views
0

J'ai un modèle de simulation de série temporelle qui a plus de 10 variables d'entrée. Le nombre d'instances de simulation distinctes serait supérieur à 1 million, et chaque instance de simulation génère quelques lignes de sortie chaque jour.Contrainte unique sur plus de 10 colonnes

Pour enregistrer le résultat de la simulation dans une base de données relationnelle, j'ai conçu des tableaux comme celui-ci.

créer la table SimulationModel (

entier simul_id clé primaire,

chaîne/numérique input0,

chaîne input1/numérique,

...)

créer table SimulationOutput (

dt DateTime clé primaire,

entier simul_id clé primaire,

Output0 numérique,

...)

Pour chaque modèle est unique, j'envisage des moyens comme ci-dessous.

  1. mettre une contrainte unique sur toutes les colonnes d'entrée de la table SimulationModel

  2. nouvelle conception de table SimulationModel aux colonnes d'entrée du groupe en 2 ~ 3 colonnes et mettre une contrainte unique sur ces colonnes groupées. (En faisant une valeur de chaîne longue comme "input0_input1_input2")

  3. oublier la contrainte côté serveur et faire le travail du côté de l'application.

Comment pensez-vous de ces options?

N'y a-t-il aucun problème à utiliser un index unique sur plus de 10 colonnes avec des millions de lignes?

Existe-t-il une autre façon de recommander?

(j'utiliser postgresql)

Répondre

1

Créez la contrainte unqiue. 10 colonnes avec quelques millions de lignes n'est pas vraiment une grande table. En outre, vos tests bénéficieront probablement d'avoir un index avec lequel travailler - ou du moins un index ne ferait aucun mal.

1

Si vous créez deux tables pour votre simulationmodel comme celui-ci:

Table SimulationModel { 
id: integer, 
... 
} 

Table SimulationModelInput { 
simulationmodel_id: integer foreign key(SimulationModel.id), 
input: string or numeric, 
... 
} 

alors vous pouvez mettre une contrainte unique sur (simulationmodel_id, entrée), mais la requête pour aller chercher la configuration est plus complexe.

+0

Deux tables vont être jointes par simul_id. Ma question est de savoir comment rendre unique la combinaison de toutes les variables d'entrée. –

+0

Alors chaque modèle de simulation sera différent des autres? Je pense que le plus simple est de le faire dans votre application, car si vous avez besoin d'ajouter une autre entrée, vous devrez recréer les bases de données. – Keeper

1

L'index unique est le chemin à parcourir pour s'assurer que chaque ensemble d'entrées est unique.

1

Vous pouvez créer une seule colonne "unique" qui est un hachage des autres colonnes et appeler l'identité.

1

Je gérerais la contrainte d'unicité dans l'application, surtout si un seul processus est en train de créer des simulations. Vous pouvez alors avoir un ou plusieurs index non uniques sur des colonnes d'entrée filtrées en commun pour un accès efficace.

Questions connexes