Múltiples SELECCIONAR en declaraciones con la creación de tablas SQL Server 2008

Tengo una tabla grande con toda la información de estados y condados en Estados Unidos en un solo lugar.

la estructura de la tabla es

    fullCode   countyName   stateName   stateCode
1   01001        nowhere      AL          01
2   01003        somewhere    AL          01
3   02100        other        AK          02

El código de estado siempre se identifica con los primeros dos números en el fullCode columna. Estos son exclusivos de cada estado, por lo que ningún estado tendrá más de un conjunto de dos números anteriores. Los tres últimos números del código del condado.

Usé la consulta a continuación para crear una tabla con todos los estados

select distinct stateName, statecode
into tblStates
from tblCounties

Tengo curiosidad por saber cómo se podría crear una tabla para los condados de cada estado de una sola vez (si es posible). Algo como

select distinct  fullCode, countyName
into tblAlabamaCounties
from tblCounties
where stateName='AL'

pero para cada estado. Entonces, por supuesto, tendría que lidiar con todos los problemas de PK/FK. Solo me preguntaba los métodos que podrían emplearse para hacer algo como esto.

EDITAR: si se trata de un error de diseño, ¿de qué otra forma puedo asociar los nombres de un condado que se encuentran en un estado en particular? Podría dejar todo en una mesa grande, pero eso parece un mal diseño, ¿pensamientos?

preguntado el 12 de junio de 12 a las 20:06

Hm, ¿por qué crearías una tabla por estado? Esto me parece un error de diseño. -

Hay una tabla de estado para todos los estados de América. Luego quiero que todos los condados de Estados Unidos estén asociados con su estado. -

La única forma de hacer lo que quiere es usar SQL dinámico, y no es una gran idea usar SQL dinámico en scripts DDL. SQL dinámico es peligroso, y DDL no es algo con lo que jugar. -

Para consultas futuras, pensé en contarles sobre una peculiaridad que ocurre solo en VA (y fue un resultado directo de Brown Vs Board of Education). En Virginia estás en una ciudad o en un condado, pero nunca en ambos. Esto significa que es posible que deba poder unirse a una futura mesa de la ciudad directamente al estado y no contar con que provenga del condado. -

Bueno, vivo aquí, así que sé sobre la peculiaridad, pero en realidad aprendí sobre ella en un curso de Historia Constitucional. En ese entonces no pensaba en hacer lo que hago ahora, pero ningún conocimiento se desperdicia. Ese pequeño hecho me ha resultado útil al hacer el trabajo de la base de datos. -

2 Respuestas

Aquí sería un mejor diseño que podría considerar:

Tabla de estado:

STATE_ID
STATE_ABBREV
STATE_NAME

Tabla del condado:

COUNTY_ID
STATE_ID
COUNTY_NAME

Data de muestra:

STATE_ID   STATE_ABBREV   STATE_NAME
01         AL             Alabama
02         AK             Alaska

COUNTY_ID  STATE_ID       COUNTY_NAME
001        01             Nowhere
003        01             Somewhere
100        02             Other

Su clave principal para la tabla de estado sería STATE_ID
Su clave principal para la tabla de condados sería CONDADO_ID ---Y---- ESTADO_ID (COMBINADO)

Con esta estructura, solo tiene 2 tablas, con las que puede reproducir fácilmente su tabla "grande" original, así como el campo "código completo". Además, actualizar, consultar, crear procesos, funciones, etc. será mucho más fácil en el futuro en función de esta estructura (mucho más simple / más normal).

Fwiw

Respondido el 12 de junio de 12 a las 20:06

¿Puedes ensalzar algunas de las virtudes de la facilidad de actualización? Me gusta este diseño aerodinámico. - wootscootinboogie

Creo que lo más importante son las consultas entre estados. Imagina que alguien quiere saber todos los condados del país que comienzan con Ham. En su otro diseño esto implica UNION en 50 mesas. - JNK

Sí, JNK hace el punto principal para consultar los datos. Otras consideraciones incluyen la cantidad de trabajo que desea poner en las modificaciones de la tabla en el futuro (agregar campos, etc.), jugar bien con otros (¿alguien consumirá sus datos además de usted?), etc. Es el tema de algunos libros que he visto. :-) Puede disfrutar de la entrada de wikipedia al respecto: en.wikipedia.org/wiki/Database_normalization. (Sin defenderlo, supondré que tocan la mayoría de los puntos principales...) - Cadenas

Si usa Oracle, puede crear un procedimiento PL-SQL en el que primero crea las diferentes tablas y luego solo tiene que completar los datos en las nuevas tablas creadas recientemente. SI usa el procedimiento PL SQL, podría hacerlo.

Por otro lado, puede crear las diferentes tablas y crear un disparador antes de insertar, e insertará los datos en la tabla específica antes de insertarlos en su tabla maestra.

Perdón por mi inglés, espero que puedas entender todo y ayudarte.

Respondido el 12 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.