2009-08-27 15 views
0

Je Normalization ai un énorme accès mdb qui contient une seule table avec 20-30 colonnes et lignes et plus de 50000 i ont quelque chose comme ceBase de données Conception et numéro

colonnes:

id desc name phone email fax ab bc zxy sd country state zip ..... 
1 a  ab 12  fff 12 w 2 3 2 d  sd  233 
2 d  ab 12  fff 12 s 2 3 1 d  sd  233 

ici j'ai quelques valeurs de colonne liées aux adresses répétant il y a un moyen de normaliser le tableau ci-dessus afin que nous puissions supprimer les doublons ou répéter les données.

Merci d'avance.

Répondre

2

Voici une réponse rapide. Vous avez juste besoin de déplacer vos champs d'adresse à une nouvelle table (supprimer des dups) et ajouter un FK à votre table primaire.

Tableau 1 (personnes ou quoi que)

id desc name phone email fax ab bc zxy sd address_id 
1 a  ab 12  fff 12 w 2 3 2 1 
2 d  ab 12  fff 12 s 2 3 1 2 
3 d  ab 12  fff 12 s 2 3 1 2 
4 d  ab 12  fff 12 s 2 3 1 1 

Tableau 2 (Adresse)

address_id country state zip ..... 
1   d  sd  233 
2   e  ac  123 
+0

c'est exactement ce que j'ai fait mais le peoblem est comment insérer l'adresse id lors de l'ajout de nouvelles lignes dans le tableau 1? – SweetGangster

+0

Vous pouvez créer un formulaire dans Access pour laisser l'utilisateur choisir une adresse existante ou en entrer une nouvelle. Vous avez juste besoin de définir la relation un-à-plusieurs, puis de créer un formulaire. –

+0

Tout d'abord, vous ajoutez l'adresse dans le tableau 2 (ou trouvez-la si c'est là) puis tirez l'adresse_adresse et insérez-la dans le tableau 1 avec le reste de vos données. –

1

Jim W a un bon début, mais de normaliser encore, faire vos éléments d'adresses redondants dans séparés tables aussi bien. Créez les tables pour lesquelles les données d'adresse sont répétées (Pays, État, etc.) Une fois que vous avez vos tables de données, vous devez ajouter des colonnes telles que StateID, CountryID, etc. à la table Address.

Vous avez maintenant des options pour la correction des données existantes. Vous pouvez être rapide et sale et utiliser les instructions Update pour définir tous les champs d'identification nouvellement créés pour qu'ils pointent vers la bonne table de données.

UPDATE Addresses SET StateID=1 WHERE STATE='AL' 

Vous pouvez le faire assez rapidement un lot sql fichier, mais je vous recommande une solution plus programmatique qui roule à travers la table d'adresses et tente de faire correspondre « Etat » en cours à une entrée dans la nouvelle Table d'états. Si trouvé, le StateID sur la table d'adresses est mis à jour avec l'id de la rangée correspondante dans les états.

Vous pouvez ensuite supprimer l'ancien champ d'état de la table d'adresses, car il est maintenant normalisé correctement et proprement dans une table d'états distincte.

Ce processus peut être répété pour tous les éléments de données redondants. Cependant, IMO db normalisation peut être prise trop loin. Par exemple, si vous avez une requête couramment utilisée qui, après la normalisation, nécessite 10 jointures, vous pouvez voir une réduction des performances. Cela ne semble pas être le cas ici, car je pense que vous êtes sur la bonne voie. @Lance je voulais quelque chose de similaire à cela mais voici le problème que j'ai des données brutes venant sous la forme de table unique et je dois affiner et l'envoyer à deux tables je peux ajouter une adresse dans La table 2 mais im ne sous-entendant pas comment insérer l'address_id dans la table 1

Vous pouvez récupérer l'ID nouvellement créé à partir de la table d'adresses en utilisant @@ IDENTITY, et mettre à jour l'adresse_ID avec cette valeur.

+0

Vous pouvez récupérer l'ID nouvellement créé à partir de la table d'adresses à l'aide de @@ IDENTITY et mettre à jour l'ID_adresse avec cette valeur. pouvez-vous expliquer cela un peu clairement? – SweetGangster

+0

Il parle de la définition (table d'adresses) address_id à un type de données IDENTITY (c'est comme autonumber dans l'accès). Ensuite, lorsque vous insérez l'adresse dans cette table en utilisant la commande SQL INSERT, vous pouvez obtenir ce numéro automatique et mettre à jour le champ address_id correspondant dans votre première table –

+0

J'ai déclaré la colonne adresse_id comme identité dans la deuxième table mais je ne pouvais toujours pas la première table adresse_id basée sur les valeurs de colonne de la deuxième table je pensais utiliser les curseurs sql pour comparer deux colonnes de table et si elle correspondait alors adres_id dans la première table mais il y avait quelque chose qui clochait avec le code de mon curseur – SweetGangster

Questions connexes