Comment mieux traiter les emplacements dans toute la Base de données SQL?

Aperçu

Je travaille sur certains Services d'Urgence, les rapports et l'application de cartographie pour la Californie (sorte de bizarre, en considérant les feux de là, maintenant...). Nous avons besoin de la carte démographiques et des données d'urgence interne d'un service gouvernemental.

Ce que nous avons sont tous les rues, les villes et les quartiers en Californie. Chaque quartier a aussi pertinentes du shapefile (lat long qui définit ses limites). Cela nous a été donnée par le Recensement AMÉRICAIN de conseil (tous du domaine public genre de trucs) site web.

Problème

Je ne suis pas sûr de la façon de concevoir au mieux les tables DB. Nous n'avons pas dit de quel type de DB, nous devons utiliser .. donc nous sommes ouverts aux suggestions si cela aide. Nous avons de l'expérience avec MS SQL 2005 et 2008 (et spatiale des trucs en '08).

On peut avoir de la suite de la pièce de théâtre de données.

  • Rue, Ville, État
  • La Ville, L'État
  • Quartier, État
  • État

La raison pour laquelle l'État est une pièce de théâtre emplacement est parce que nous nous sommes dit que cela pourrait être vendu à d'autres états, de sorte que nous avons besoin de planifier pour que maintenant.

Donc, à l'origine, j'ai pensé à cela...

  • LocationId ENTIER PK Identité
  • De rue de type NVARCHAR(100)
  • De voisinage de type NVARCHAR(100)
  • Ville de type NVARCHAR(100)
  • État de type NVARCHAR(100)
  • Latitude de type VARCHAR(15)
  • Longitude de type VARCHAR(15)
  • Shapefile

Aucune de ces sont les valeurs null, btw. Mais après un court moment, j'ai pensé que c'était un gaspillage d'avoir autant de "la Californie", de texte ou de "San Diego" de texte dans les champs. J'ai donc modifié la table pour être plus normalisée en faisant le Quartier, de la Ville et de l'État des champs de clé étrangère à leur propre table (eg. les recherches) .. et ces deux champs sont maintenant NULLABLE.

Donc .. que tout fonctionne bien. sauf que quand j'ai essayer et faire un peu de Sql sur eux. En raison de la NULLABLE FK, c'est un cauchemar pour rendre toutes ces requêtes de jointure externe 🙁

Ce sujet d'avoir la table principale, les sous-tables de recherche (par exemple. De quartiers, de Villes et d'États) liés par l'intermédiaire de l'ID, puis placez le tout dans un point de vue? Rappelez-vous, NeighborhoodID et CitiyID serait NULLABLE.. ???

Je veux juste voir la tête des gens sur ce et de la raisons ils ont fait part de leurs suggestions, s'il vous plaît. Je suis vraiment inquiet et confus, mais sont désireux d'apprendre.

S'il vous plaît aider!


edit 1: j'ai besoin de s'en tenir à une Base de données SGBDR.

edit 2: je suis en train de penser à aller une seule table (de-normalisée) avec des contraintes de garder la somme des champs uniques OU multi-tables avec nullable FK est sur la table principale (par exemple. Les emplacements (tableau principal), les Quartiers, les Villes, les États ... normalisé db schéma).

edit 3: Ajout d'une Ville à l'échantillon, la seconde liste.

edit 4: Ajout d'une vue sur la question.

La version normalisée semble le plus correct pour moi. Ce qui vous préoccupe concernant les requêtes? Ne pouvez-vous pas juste créer une vue qui ne les jointures pour vous une fois et ensuite requête?
Correct. j'ai un certain nombre de jointures externes lorsque les données sont normalisées. Auparavant dans d'autres projets de très de très similaire à cela, il a été une douleur dans le dos afin d'obtenir performant requêtes .. surtout quand je veux "bulle" le heirachy.
Enfin, j'ai appris à éviter les points de vue parce que j'ai été dit, ils peuvent être VRAIMENT onu-performante, spécialement sur multi-tables qui vont jusqu'à des millions et des millions de lignes....
Pourquoi avez-vous changé de Ville et de l'État à accepter les valeurs null quand ils sont devenus les clés étrangères?
Si vous utilisez MS SQL, vous avez la possibilité de vues indexées qui peut aider: microsoft.com/technet/prodtechnol/sql/2005/impprfiv.mspx

OriginalL'auteur Pure.Krome | 2008-11-18