1

Je recréerai une partie de la base de données de mon entreprise car elle ne répond pas aux besoins futurs. Actuellement, nous avons principalement un fichier plat et quelques tables disjointes qui n'ont jamais été entièrement réalisées.créer une base de données d'adresses

Ma façon de penser est que nous avons une table pour chaque catégorie sauf peut-être la table zips, qui peut servir de table de connexion. S'il vous plaît se référer à l'image ci-dessous:

Database Diagram http://www.freeimagehosting.net/uploads/248cc7e884.jpg

Une chose que je pense à est de retirer la table zip et juste mettre le code dans la table zipstocities puisque le code postal est presque unique et l'indexation du tableau le code postal. Le seul inconvénient est que le code postal doit être un varchar pour prendre soin des codes postaux avec des zéros en tête. Je veux juste savoir s'il y a un défaut dans ma logique.

+5

À quoi sert cette base de données? Comme c'est ce schéma est sur-normalisé je dirais. – Lazarus

+0

Il est utilisé pour ajouter des informations patient scénario principal: le patient connaît son code postal le reste tous les autres champs peuplent automatiquement Autre scénario possible: le patient ne connaît que la ville et l'état dans lequel il vit; le code postal et le comté sont ensuite renseignés automatiquement – Sean

+0

Sur-normalisé? Je pense que c'est complètement dénormalisé. –

Répondre

4

Je ne connais pas bien le code postal américain et le système de devision territorial, mais je suppose que c'est un peu comme le code allemand.

  • Un état a plusieurs comtés.
  • Un comté a beaucoup de villes.
  • Une ville a de nombreux codes postaux.

Par conséquent j'utiliserais le schéma suivant.

 

ZipCodes   CityZipCodes 
------------  ----------------  Cities 
ZipCode (PK) <─── ZipCode (PK)(FK)  ----------- 
        City (PK)(FK) ───> CityId (PK) 
             Name 
             County (FK) ───┐ 
                 │ 
                 │ 
            Counties   │ 
            -------------  │ 
       States     CountyId (PK) <───┘ 
       -----------------  Name    
       StateId  (PK) <─── State (FK) 
       Name 
       Abbreviation 

Fixé pour plusieurs villes par code postal.

+1

occasionnellement si un zip a plus d'une ville – Sean

+0

Fixe pour plusieurs villes par code postal. –

+0

En général, oui, mais parfois un code postal est partagé entre une ville avec un code postal et un autre avec plusieurs - 94303 est un tel, et les villes sont dans deux comtés distincts, pour démarrer. Mon adresse est à Palo Alto, CA 94303, dans le comté de Santa Clara; 94303 couvre également (certains de?) East Palo Alto, qui est dans le comté de San Mateo.Lorsque je saisis mon adresse dans des formulaires Web, je dois périodiquement choisir le pays dans lequel se trouve mon code postal. –

0

En regardant le diagramme que vous avez, la table d'état est la seule des 4 tables externes qui soit vraiment nécessaire. Les tables de recherche avec juste un ID et une seule valeur ne valent pas l'effort. Ces relations sont conçues pour créer une valeur unique dans la table principale (ziptocities) se référant à un ensemble de données connexes dans la table de recherche (états).

+0

oui mais une ville peut séparer les codes postaux et un comté peut également avoir plusieurs villes. Aussi parfois un zip a plus d'une ville – Sean

+0

laissez-moi essayer encore cette fois je vais utiliser l'anglais: oui, mais une ville peut avoir plusieurs codes postaux et un comté peut également avoir plusieurs villes. Aussi parfois un zip a plus d'une ville – Sean

+0

Je suis d'accord avec ça. Cependant, avec la table ziptocity, vous mappez les zips à une ville, un comté et un état. Mon point est simplement que si vous allez vous référer à zipID qui est un espace réservé pour une seule information (c'est-à-dire le code postal), pourquoi ne pas simplement utiliser cette valeur unique au lieu de stocker la valeur et une valeur de référence. En utilisant la méthode de référence, vous utilisez 1 entrée pour chaque ligne de ziptocities plus 1 entrée pour chaque valeur possible de zip. Si vous utilisez simplement la valeur du code postal, vous n'utilisez qu'une seule entrée pour chaque ligne de ziptocities. Cela élimine la taille et la complexité de votre base de données. – Mentee

1

Une chose que vous devriez savoir est que toutes les villes ne sont pas dans les comtés. En Virginie, vous êtes dans une ville ou un comté, mais jamais les deux.

+1

Je ne voulais vraiment pas entendre ça – Sean

+0

Que puis-je dire, c'était une loi d'état qu'ils ont créée pour lutter contre la désertification des écoles. – HLGEM

+0

BTW la source que nous obtenons des données de code postal de met la ville, l'état et le zip tout dans la table un. Vous pouvez ajouter un comté (rendre nullable) et ensuite il est facile d'interroger. Faites un index unique sur les 4 champs. – HLGEM

0

Vous devrez vous demander pourquoi vous vous intéressez aux comtés. Dans de nombreux États américains, ils ont peu d'importance au-delà de la tradition et des cartes.

L'autre question sera l'importance de l'exactitude de l'adresse. Combien de décès y aura-t-il si les lettres importantes ne sont pas livrées en temps opportun (peut-être beaucoup si la lettre concerne les rappels de médicaments sur ordonnance!)

Vous voudrez probablement penser à utiliser les données du service postal, en utilisant éventuellement un produit cela corrige les adresses. De cette façon, quand vous aurez une bonne adresse, vous serez certain que le courrier pourra y être livré - parce que le service postal l'aura dit!

+0

Le propriétaire de l'entreprise veut les ... – Sean

+0

Ajoutez-les et rendez-les facultatifs. Rappelez-lui que ce ne sont pas des conteneurs - ils ne font pas partie de cette hiérarchie, s'il pense de cette façon. –

0

Il semble y avoir des failles dans votre processus et votre logique.

Je vous suggère de cesser de penser aux tables et aux relations pendant un moment. Au lieu de cela, pensez aux faits. Faites une liste d'adresses valides que votre base de données doit prendre en charge. De nombreuses surprises vous attendent.

Ne confondez pas une adresse avec une étiquette de publipostage. Ils ne sont pas du tout la même chose. Envisagez également de modéliser les transporteurs. Aux États-Unis, la validité d'une adresse dépend du transporteur. Par exemple, ma boîte postale est une adresse valide lorsque le transporteur est l'USPS, mais pas lorsque le transporteur est UPS.Pour gagner du temps, vous pouvez essayer de parcourir certains formats d'adresses internationaux au bitboost.

0

Votre logique fonctionnera-t-elle si deux pays ont le même code postal? Ces deux indiqueraient différentes villes dans ce cas. voici quelques points à prendre en considération

  1. Voulez-vous utiliser le code postal comme type de la clé primaire dans l'adresse? (au louez la ville, l'état et le pays champs). Dans ce cas, vous pouvez utiliser le code postal , la ville, l'état, le pays dans une table . Créer des index sur la ville, l'état etc .. (vous avez une dépendance fonctionnelle de la forme zipcode-> pays, état, ville. Ce comme je l'ai dit peut-être pas vrai dans pays.
  2. Si le peuplement automatique est votre seule préoccupation, créer une vue matérialisée et l'utiliser.

Je recommande la lecture de « modèles » du modèle de données par. David C. Hay

+0

cela ne sera jamais utilisé à l'extérieur des États-Unis car cela est développé pour les revendications médicales et les lois spécifiques des États-Unis. – Sean

+0

Ensuite, déposez les détails du pays. Je suppose que vous avez une connaissance des dépendances fonctionnelles. Vous avez la dépendance fonctionnelle suivante. Code postal -> compte, ville, état Avez-vous, cependant, les dépendances fonctionnelles suivantes dans votre conception? (County, City-Name) -> Nom de l'État (ville, comté, état) -> code postal Votre design semble hautement dénormalisé ce qui est théoriquement bon. Vous aurez cependant trop de jointures dans les requêtes. Cela peut affecter les performances. A-> b signifie que si pour deux lignes R1 et R2 dans la table, si R1 (a) = R2 (a), alors R1 (b) devrait être égal à R2 (b). – bkm

+0

Je suis d'accord que le comté n'est pas pertinent, mais le propriétaire de l'entreprise les veut afin qu'ils soient devenus pertinents. Dans l'ensemble, je pense à mettre en œuvre Daniel Brouckner ci-dessus. Je cherche maintenant des scénarios de cas spéciaux qui briseraient cette logique. – Sean

0

Mais pas toute personne qui a une réclamation médicale valide est requis par la loi de rester aux États-Unis u jusqu'à ce que la réclamation soit réglée. Les gens bougent.

+0

Cette préoccupation est hors de propos, car nous n'essayons pas vraiment de suivre les patients, nous justifions simplement qu'au moment du traitement, ils résidaient aux États-Unis. – Sean

0

San Francisco est une ville de Californie; ce n'est pas une ville en Alabama. Est-ce que votre conception empêche les entrées non-sens comme "San Francisco, AL"?

+0

Oui en conservant le code postal – Sean

0

Un code postal à cinq chiffres n'est pas une bonne clé car deux noms de lieux utilisent le même code postal et un code postal peut renvoyer à deux noms de villes. Voir http://semaphorecorp.com/cgi/zip5.html