Pregunta

Estoy haciendo una base de datos muy simple (MySQL) con esencialmente dos tipos de datos, siempre con una relación de 1 a 1:

Eventos

  • Patrocinador
  • Tiempo (Opcional)
  • Lugar (ciudad, estado)
  • Venue (Opcional)
  • Detalles URL

Los patrocinadores

  • Nombre
  • URL


Las ciudades se duplicará a menudo, pero es en realidad mucho más valor en tener una mesa de ciudades para un simple esquema de dicha base de datos?

La base de datos está poblada por la pantalla-raspado de un sitio web. En este sitio el campo de la ciudad está poblada por medio de la selección de una lista desplegable, por lo que no habrá mistypes, etc., y que sería fácil para que coincida con los registros con una mesa ciudad. No estoy seguro de que habría más de un punto, incluso si los usuarios de mi base de datos será la búsqueda por la ciudad con frecuencia.

¿Fue útil?

Solución

Normalizar la base de datos ahora.

Es mucho más fácil de optimizar las consultas en los datos normalizados de lo que es la normalización de una pila de datos.

Usted dice que es sencilla ahora - estas cosas tienen una tendencia a crecer. Diseñar bien y obtendrá la experiencia de un diseño adecuado y un futuro a prueba.

Otros consejos

Creo que usted está buscando en las cosas de manera equivocada - Siempre se debe normalizar a menos que tenga una buena razón para no hacerlo.

Confiar en su aplicación para mantener la integridad de los datos es un riesgo innecesario. Usted dice que los datos se hace uniforme, ya que se selecciona de una lista desplegable. ¿Qué pasa si alguien hacks en la forma y modifica los datos, o si su código permite inadvertidamente un parámetro de cadena de consulta con el mismo nombre?

¿Dónde los datos de la ciudad proviene de que rellena el cuadro desplegable para el usuario? ¿No le gustaría una mesa para que?

Parece que se está tratando Ubicación como un atributo incluyendo la ciudad y el estado. Supongamos que desea ordenar o analizar eventos por estado solos en lugar de la ciudad y el estado? Eso podría ser difícil de hacer si usted no tiene un atributo de estado. Lógicamente yo esperaría estado de pertenecer en una mesa ciudad -. A pesar de que puede depender de exactamente cómo desea identificar ciudades

Respuesta directa: El hecho de que un problema es relativamente simple hay ninguna razón para no hacer cosas para que sea sencillo. Es mucho más fácil caminar en mis pies que en las manos. No recuerdo haber dicho, "Oh, sólo tengo que ir media milla, que es una distancia corta por lo que bien podría caminar sobre mis manos."

Respuesta larga: Si no mantener ningún tipo de información acerca de una ciudad distinta de su nombre, y no tener una lista preestablecida de las ciudades (por ejemplo, para construir un desplegable), entonces su esquema ya está normalizado. Lo que sería en una mesa de la ciudad que no sea el nombre de la ciudad? (Supongo Estado no puede ser dependiente de la ciudad, ya que podría tener dos ciudades con el mismo nombre en diferentes estados, por ejemplo, Dayton OH y Dayton TN.) La norma pertinente de la normalización es "no hay dependencias que no son clave", es decir, no se puede tienen datos que dependen de los datos que no es una llave. Si usted tenía, por ejemplo, latitud y longitud de cada ciudad, a continuación, estos datos se repite en cada registro que hacía referencia a la misma ciudad. En ese caso, seguramente querrá romper una tabla separada de la ciudad para mantener la latitud y la longitud. Se podría, por supuesto, crear un "código de ciudad" que es un entero o abreviatura que los enlaces a una mesa ciudad. Pero si no hay otros datos sobre una ciudad, no veo cómo este ganancias nada.

Técnicamente, yo asumiría que la ciudad depende de la Sede. Si el lugar es "Rockefeller Center", que implica que la ciudad debe ser Nueva York. Pero si lugar es opcional, esto crea problemas. Una posibilidad es tener una tabla que las listas Lugar Venue nombre, ciudad y estado, y para los casos en los que no se especifica un lugar, tienen un "no especificado" para cada ciudad. Este libro de texto sería más correcto, pero en la práctica si en la mayoría de casos no se especifica un venu, ganaría poco. Si la mayoría de las veces se especifica una venu, probablemente sería una buena idea.

Ah, y, ¿existe realmente una relación 1: 1 entre el evento y el patrocinador? Puedo creer que un evento no puede tener más de un patrocinador. (En la vida real, hay un montón de eventos con múltiples patrocinadores, pero a lo mejor para sus propósitos que sólo se preocupan por un "patrocinador principal" o algo así.) Pero, ¿un patrocinador no tienen más de un evento? Eso parece poco probable.

¿Por qué no seguir adelante y normalizar? Usted escribe como si hay costos significativos de normalización que superan a los beneficios. Es más fácil para su instalación en una forma normal antes de llenarla que tratar de normalizar más tarde.

Además, me pregunto acerca de su relación 1-a-1. Ingenuamente, me imaginaría que un evento podría tener múltiples patrocinadores, o que un patrocinador podría estar involucrado en más de un evento. Pero no sé su lógica de negocio ...

ETA: No sé por qué no me di cuenta de esto antes, pero si usted es realmente contrario a la normalización de su base de datos, y que saber que siempre tendrá una relación de 1 a 1 entre los eventos y patrocinadores, entonces ¿por qué tener los patrocinadores en una tabla separada?

Parece que puede ser un poco confundido acerca de lo que la normalización es y para qué lo haría.

Las bisagras de respuesta, la OMI, de si desea evitar errores durante la entrada de datos. Si lo hace, tendrá una mesa sedes:

VENUES
City
State
VenueName

, así como una tabla de ciudades y estados. (Nota:.. He visto situaciones en la misma ciudad aparece varias veces en el mismo estado, por lo general las ciudades más pequeñas, por lo CIUDAD / ESTADO no comprenden una díada única Normalmente hay un código postal para eliminar la ambigüedad)

Para evitar situaciones en las que el operador de entrada de datos entra en un escenario de NY Nueva York, que es en realidad en San Francisco CA, que había necesidad de validar la entrada de lugar para ver si existe tal lugar en la ciudad / estado suministrado en el registro .

A continuación, se necesitaría para hacer CIUDAD / ESTADO obligatoria, y tienen que escribir código para deshacer la transacción y controlar el error.

Si no está preocupado por la aplicación de este tipo de precisión, entonces usted realmente no necesita tener mesas ciudad y ESTADOS tampoco.

Si está interesado en aprender acerca de la normalización, usted debe aprender lo que sucede cuando no se normalizan. Para cada forma normal (más allá de 1NF) hay una actualización anomalía que se produzca como consecuencia de la redundancia perjudicial.

A menudo es posible programar alrededor de las anomalías de actualización, ya veces eso es más práctico que siempre normalizar hasta las últimas consecuencias.

A veces, es posible que una base de datos para entrar en un estado incoherente debido a un fallo de normalizar, y el fracaso para programar la aplicación para compensar.

En su ejemplo, lo mejor que se puede llegar a una especie de hypotheical cojo. ¿Y si el nombre de una ciudad consiguió mispelled en una fila, pero escrito correctamente en todos los demás. ¿Qué pasaría si resumidos por la ciudad y el patrocinador? Su salida reflejaría el error, y un grupo diovide en dos grupos. Tal vez sería mejor si la ciudad solamente se escribiera a cabo una vez en la base de datos, para bien o para mal. Al menos la agrupación para el resumen sería correcto, incluso si el nombre se mispelled.

Es esto vale para nromalizing? Hey, es su proyecto, no la mía. Usted decide

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top