J'ai une grande base de données d'accès que j'ai besoin de normaliser en cinq tables et une table de recherche. Je comprends la théorie derrière la normalisation et ai déjà esquissé l'aspect des tables mais je suis perdu sur comment transformer ma table pour obtenir la base de données normalisée. Les analyseurs de table n'offrent pas la ventilation que je veux.Normaliser une base de données MS Access existante
Répondre
Les requêtes, en particulier les requêtes Union, offrent-elles une solution? Où voyez-vous un problème?
La base de données est une base de données assez typique sans rien de spécial pour la distinguer des autres.
La base de données se compose d'une table avec:
nom de la société, addess, téléphone, etc. personne de contact avec les domaines connexes typiques
Cela servira essentiellement en tant que base de données marketing et je besoin de garder suivi d'événements, correspondance commerciale et autres. Je suis juste perdu sur la façon de garder les relations intactes.
Voulez-vous dire les relations dans la fenêtre des relations? Ceux-ci peuvent facilement être reconstruits. Ou voulez-vous dire les champs clés, etc? Cela peut parfois être difficile et peut impliquer des tableaux intermédiaires. Chaque cas est différent. Comme l'a dit doofledorfer, vous aurez probablement plus de conseils spécifiques si vous postez des schémas.
Si vous avez une seule table, ajoutez-y un champ Autonumber.
Créez ensuite vos autres tables et utilisez la valeur Autonumber de la table unique d'origine comme clé étrangère pour les relier aux données d'origine.
Si vous aviez tblPerson:
tblPerson
LastName, FirstName, WorkPhone, HomePhone
et que vous vouliez décomposer, ajouter PersonID autonumber puis créer une table de téléphone:
tblPhone
PhoneID, PersonID, PhoneNumber, Type
alors vous ajouter des données de tblPerson pour les champs appropriés:
INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work"
FROM tblPerson
WHERE tblPerson.WorkPhone Is Not Null;
puis de lancer une autre requête pour le téléphone résidentiel:
INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home"
FROM tblPerson
WHERE tblPerson.HomePhone Is Not Null;
Quelqu'un a suggéré une requête UNION, que vous auriez à enregistrer en tant que vous ne pouvez pas avoir une requête UNION comme subselect dans Jet SQL. La requête enregistrée ressemblerait à quelque chose comme ceci:
SELECT tblPerson.PersonID, tblPerson.WorkPhone, "Work" As Type
FROM tblPerson
WHERE tblPerson.WorkPhone Is Not Null
UNION ALL
SELECT tblPerson.PersonID, tblPerson.HomePhone, "Home" As Type
FROM tblPerson
WHERE tblPerson.HomePhone Is Not Null;
Si vous avez enregistré que qryPhones, vous auriez alors ajoutez qryPhones avec ce SQL:
INSERT INTO tblPhone (PersonID, PhoneNumber, Type)
SELECT qryPhones.PersonID, qryPhones.WorkPhone, qryPhones.Type
FROM qryPhones;
De toute évidence, ce n'est que l'exemple le plus simple. Tu ferais la même chose pour tous les champs. La clé est que vous devez créer une valeur PK pour votre table source qui liera tous les enregistrements dérivés à la table d'origine.
Ceci est une réponse excellente et bien détaillée. J'aimerais pouvoir voter plus d'une fois! –
@David W.Fenton: "vous ne pouvez pas avoir une requête UNION en tant que sous-sélection dans Jet SQL" - incorrect. Essayez ceci en utilisant Northwind en mode de requête ANSI-92: 'SELECT DT1.digit FROM (SELECT DISTINCT 1 AS Digit FROM Commandes UNION SELECT DISTINCT 2 FROM Commandes) AS DT1;' – onedaywhen
- 1. Base de données parent-enfant (MS ACCESS)
- 2. MS Access 03 - Normaliser des données à partir d'une feuille de calcul Excel
- 3. MS Access 2003 - Importation d'un fichier texte dans la base de données MS Access Tableau
- 4. connexion de base de données dans MS Access 2007
- 5. base de données MS Access au format XML, .NET
- 6. Comment utiliser SubSonic avec la base de données MS Access
- 7. Compilateur MS-Access .mdb?
- 8. Problème Insertion de données dans la base de données MS Access en utilisant ADO via Python
- 9. Comment créer les migrations pour une base de données existante?
- 10. Convertir la base de données existante en projet de base de données
- 11. Lier MS Excel aux requêtes MS Access
- 12. Création d'une structure de base de données d'appartenance ASP.Net dans une base de données existante
- 13. MS SQL Server 2000 - vérifier l'erreur de base de données existante
- 14. Comment établir une connexion à une base de données MS Access à l'aide de Builder Codegear C++ (2007)
- 15. Ajout de relations à une base de données Access
- 16. Normaliser les données
- 17. Critères de chemin de fichier de requête de base de données MS Access dans C#
- 18. Comment éviter d'ouvrir une base de données MS Access lors de la lecture des données de formulaires
- 19. Erreur de base de données ASP.NET Access?
- 20. Portage à partir de MS Access
- 21. Colonnes pivot MS-Access
- 22. Stockage de fichiers PDF dans la base de données MS Access à l'aide de formulaires
- 23. Trace Activité MS Access DB
- 24. Comment utiliser sftp depuis un module de base de données MS Access?
- 25. Comment puis-je obtenir des noms de tables à partir d'une base de données MS Access?
- 26. SQL pour transposer des paires de lignes en colonnes dans la base de données MS ACCESS
- 27. Extraction de code source à partir d'une base de données MS Access
- 28. Ouverture d'une base de données MS Access à partir de VB utilisé par un autre utilisateur
- 29. MS ACCESS - Tri arborescent hiérarchique
- 30. Comment exporter une base de données Access au format CSV?
Jamais considéré comme une requête d'union. Je ne suis pas au courant des étapes nécessaires pour garder les relations intactes après avoir séparé la table. –