2009-10-21 8 views
0

J'ai une table par exemple tb_load_files. Il contient des champs nom_fichier, date_fichier, fichier_loc, état_fichierInsertion Enregistrement basé sur le drapeau

Maintenant, File_status peut être x ou y. L'exigence est qu'il peut y avoir plusieurs enregistrements pour l'état x pour la combinaison de (nom_fichier, date_fichier, fichier_loc) mais un seul enregistrement pour l'état y.

par exemple.

 
file_name file_date  file_loc status 
abc.txt  12-oct-07  NY   X 
abc.txt  12-oct-07  NY   X 
abc.txt  12-oct-07  NY   Y 

abc.txt  12-oct-07  NY   Y -- NOT ALLOWED 

quelle pourrait être la meilleure façon de concevoir ces tables?
  a. sélection des données avant insertion
  b. déclencher pour vérifier si la valeur existe
ou tout autre. S'il vous plaît avis

+0

Pouvez-vous clarifier les exigences ici? Pourquoi cet enregistrement final n'est-il pas autorisé? Il semble que vous disiez qu'un enregistrement Y donné doit être unique, mais que les enregistrements X ne doivent pas nécessairement être uniques. Cependant, si cela est vrai, votre exemple est confus. – moleboy

+0

Il n'est pas clair pourquoi la dernière ligne n'est pas autorisée. La combinaison de nom_fichier, date_fichier et fichier_loc est la même que les deux premières lignes, mais elles étaient correctes? Peut-être qu'un peu plus d'explication de ce que le «statut» signifie aiderait. –

Répondre

1

S'il y aura des milliers d'entrées, je suggère qu'au lieu de gaspiller de l'espace en utilisant plusieurs lignes avec les mêmes données, ajoutez une colonne COUNT. Les données peuvent alors être uniques et peuvent être mieux optimisées avec des index si nécessaire. Créez ensuite une procédure PL/SQL appelable par le client, ou (si le client s'attend à travailler avec la table) créez une vue pouvant être mise à jour + INSTEAD INSERT/UPDATE/DELETE. Le code à l'intérieur augmente simplement COUNT sur l'enregistrement existant lorsque l'état est X, ou renvoie l'erreur si l'état est Y.

+0

+1 Point valide sur la duplication de données. @Avinash, vous pouvez envisager d'ajouter le nombre comme suggéré par Juraj ou peut-être diviser/normaliser vos tables pour éviter la duplication. – Preets

+0

@Avinash, sur quel champ votre table est-elle indexée? – Preets