2010-11-30 8 views
8

Las personas que lean la Introducción de C.J.Date al Sistema de base de datos o libros de nivel similar no deberían tener problemas con la definición de normalización y desnormalización.(De) Normalización de dos relaciones

Sin embargo, la memoria no es lo que solía ser y a menudo miro un diseño y digo que no está normalizado aunque no puedo encontrar cuál de las formas normales está rompiendo.

El ejemplo real que ilustran es:

Si tenemos relaciones

r1 (A, B, C) y r2 (A, D)

con FD: AB-> C y A-> D

y representan r1 datos detallados, mientras que r2 es un resumen de esos datos (en otras palabras, cada instancia de D es una función de valores en r1. en este ejemplo, que sea subtotal de valores C acc cediendo a A desde r1).

ejemplo Ejemplo

r1 = 
A B C 
1 1 10 
1 2 20 
2 1 10 
2 2 25 

r2 = 
A D 
1 30 
2 35 

Así que, aunque no puedo decir que se rompe por ejemplo 2NF o 3NF, que parecen estar atrapados en la idea de que el diseño sigue desnormalizaremos en el siguiente sentido (de . Codd, EF "normalización adicional de la Relational Model Base de datos", p 34, al comentar sobre las razones para normalizar más allá 1NF):

  1. para liberar a la colección de las relaciones de inserción indeseable, actualización y eliminación de dependencias;
  2. Para reducir la necesidad de reestructuración de la colección de relaciones como nuevos tipos de datos son introducidos , y por lo tanto aumentar la vida lapso de programas de aplicación;
  3. Para que el modelo relacional sea más informativo para los usuarios;
  4. Para realizar la recopilación de relaciones neutrales a la consulta estadísticas, donde estas estadísticas son susceptibles de cambiar con el paso del tiempo.

que puedo decir, que si definimos D como la suma de todos los Cs de r1 donde A partir de r1 es igual a A partir de entonces r2, si actualizamos C en r1 y no actualizamos D en r2, podemos terminar con una dependencia de actualización indeseable y los datos terminan en un estado inconsistente. Encuentro esta razón para llamar a r1 y r2 desnormalizados y pensar que están desnormalizados. (De hecho r2 conjunto es una función de R1 y llevar a cero nuevos hechos en el modelo; r2 = f (r1))

Así que las preguntas son

  1. podemos llamar R1 y R2 desnormalizar?
  2. si es así, ¿por qué? si no, ¿por qué? (según qué regla? o según qué definición?)

NOTA:
Para aquellos que encuentran la pregunta (s) lo suficientemente interesante como para poner en una respuesta, le ruego para proporcionar ya sea algo citable o, para decirlo en una forma de hipótesis y conclusiones específicas (o en otras palabras, si va a poner su opinión, sígala con algún razonamiento).

EDIT Acepté dportas answer. Voy a tratar de añadir un poco de aquí: C.J.Date puede hace una distinción clara y estricta:

Gran parte de la teoría de diseño tiene que ver con la reducción de la redundancia ; la normalización reduce la redundancia dentro de relvars, la ortogonalidad la reduce a través de relvars.

citado de Database in depth: relational theory for practitioners

y en la siguiente página

simplemente como un fracaso para normalizar todo el camino implica redundancia y puede conducir a ciertas anomalías, por lo que también podemos un fracaso para adherirse a la ortogonalidad.

Respuesta

3

Suponiendo que AB es una clave en r1 y A es una clave en r2, parece que el esquema está en 6NF. La Base de Datos Relacional diccionario (Fecha) define desnormalización como:

Sustitución de un conjunto de relvars R1, R2,. . ., RN por su unirse a R, tal que para todo i la proyección de R en los atributos de Ri se garantiza que sea igual a Ri (i = 1, 2,..., N).

Fundamentalmente, la normalización/desnormalización es acerca de la composición y descomposición nonloss usando proyección y unirse operadores. En este ejemplo, tiene redundancia causada por un operador diferente: suma.Supongo que sería muy posible, en principio, formar una teoría de la "normalización" para operadores distintos de la proyección y la unión, tal vez incluso para funciones no relacionales como la sumatoria. Sin embargo, no es así como se define convencionalmente la normalización y, a falta de una base sólida para hacerlo, creo que deberíamos aplicar la desnormalización de significado técnico definida por Fecha en la cita anterior.

+0

Esto suena coherente +1 y Estoy considerando aceptarlo. Sin embargo, no estoy convencido de que la definición anterior sea suficiente y necesaria. Por ejemplo, bajo la definición anterior de desnormalización, la relación r (A, B, C) con FD: A-> B, A-> C se desnormaliza (si tuviéramos relaciones r1 (A, B) y r2 (A, C) yr es una combinación de r1 y r2), pero no veo qué forma normal rompen (lo que me lleva a la pregunta inicial). – Unreason

+1

@Unreason: "... No veo qué forma normal rompen". r (A, B, C) con FD: A-> B, A-> C violaría 6 NF. – sqlvogel

+0

Ok, acepto la cita y la definición. También actualicé un poco mi memoria y, de hecho, la normalización siempre habla de relvar único, por lo que bajo estricta definición no puedo hablar de normalización entre dos relvars. (No estoy completamente convencido de la cuestión del operador escalar vs. operador relacional, pero ya no lo veo relevante para esta pregunta) – Unreason

1

así r2 es una función de R1 que significa R2 es un materializada vista de esa función de r1

y en ese ejemplo el que sería una vista de select A, sum(C) from r1 group by A

vistas no son cubierto en el trabajo de codificación sobre la normalización, pero creo que sí escribió sobre ellos

materializar una vista normalmente se hace por razones de caché que algunos podrían pensar como una forma de desnormalización por lo que hubo documentos sobre autom decididamente qué opinión se materializará, por lo que es algo que la base de datos podría hacer con vistas a hacerlas más rápidas a veces

pero como las actualizaciones de vistas normalmente no están permitidas, aunque creo que leí ese código decía algo así como todas las vistas que pueden ser debe poder actualizarse y hay documentos sobre cómo hacer que funcione en algunos casos complejos

+0

Es * podría * ser una vista, pero la normalización se trata de semántica, no de implementación. En este caso, parece que el hecho relevante es que A determina D, independientemente de si r1 y o r2 son relaciones de base o relaciones derivadas. – sqlvogel

+0

pero en una base de datos sin vistas, r2 seguiría siendo una vista materializada de r1 y sí la funcional A-> D se mantendría en r2 pero ese no es el problema ya que lo que op preguntaba es ¿cómo están relacionados r2 y r1? que r2 es una vista materializada de una función de r1 –

+0

Tengo un problema con tu primera oración - sí, si vemos a r2 como vista materializada, entonces el resto de tu respuesta está al menos conectada. Pero en mi pregunta no estipulo que sea una visión materializada, o en otros términos, ¿qué regla se rompe si hago que r2 no sea una visión materializada, pero insisto en que es una relación en sí misma? – Unreason

1

Creo que el par de relaciones viola la quinta forma normal.


R2 es una proyección de R1. Algunos argumentan que SUM está fuera del alcance del modelo relacional. En este caso, SUM es una extensión trivial de COUNT, que está dentro del alcance del modelo relacional.

+0

como dije, no busco solo una opinión o en otras palabras, ¿Por qué piensas eso? – Unreason

+0

Editó la respuesta en función de su comentario. –

+0

+1 (ya que la respuesta es útil para mí).Re SUM/COUNT sí, ese era mi sentimiento, pero en realidad la definición no menciona operadores excepto join y projection. Esto parece coherente; He llegado a aceptar el hecho de que la normalización solo habla de relvar único. Entonces, no puede haber desnormalización entre dos tablas. – Unreason

3

Su definición para la columna D en r2, "una suma de todas las Cs de r1 donde A de r1 es igual a A de r2", es una restricción sobre D. Más formalmente, donde Σ es sumatoria, π es proyección y σ es la selección,

(a,d) ∈ r2 ⇔ (a, d) = (a, Σ c), a ∈ πA(r1), c ∈ πCA=a(r1))

Desde esta restricción no es ni una limitación de dominio, ni una restricción de clave, r2 no está en Domain/Key Normal Form (DKNF).

DKNF es la única forma normal de la que soy consciente que no está definida en términos de una relación única, principalmente porque se define en términos de restricciones en lugar de dependencias.

Cuestiones relacionadas