machine learning examples dbms data database database-design database-normalization

database - learning - normalization forms in dbms



Normalización: ¿Qué significa "grupos repetidos"? (2)

He leído diferentes tutoriales y he visto diferentes ejemplos de normalización, especialmente la noción de "repetir grupos" en la primera forma normal. De ellos, he deducido que los grupos que se repiten son atributos "multifacéticos" (por ejemplo, aquí y aquí ).

Pero ya creamos tablas separadas para cada atributo multivaluado al incluir claves foráneas de la tabla primaria durante el proceso de mapeo de un ERM (Modelo de relación de entidad) a un RDM (Modelo de datos relacionales). Referencia: esto

En segundo lugar, esos "grupos repetitivos" están esencialmente dispuestos horizontalmente en la misma fila, o puede ocurrir el mismo valor en la misma columna una y otra vez, es decir, el mismo valor de un atributo una y otra vez, también un grupo repetitivo y debe eliminarse ?

En este ejemplo, el valor en inglés se repite una y otra vez. ¿Es este un grupo repetitivo? Si lo elimino para hacer otra tabla SUBJECT con Subject Name y Module_ID (clave externa), esto es lo que obtengo. Claro que se deshace del valor de repetición, pero no estoy seguro si esto es lo correcto. ¿Es correcto?


El término "grupo de repetición" significaba originalmente el concepto en los lenguajes basados ​​en CODASYL y COBOL donde un solo campo podría contener una matriz de valores repetidos. Cuando EFCodd describió su Primera Forma Normal, eso fue lo que quiso decir con un grupo repetitivo. El concepto no existe en ningún DBMS moderno relacional o basado en SQL.

El término "grupo repetitivo" también ha llegado a ser utilizado de manera informal e imprecisa por los diseñadores de bases de datos para significar un conjunto repetitivo de columnas , es decir, una colección de columnas que contienen tipos similares de valores en una tabla. Esto es diferente a su significado original en relación con 1NF. Por ejemplo, en el caso de una tabla llamada Familias con columnas llamadas Parent1, Parent2, Child1, Child2, Child3, ... etc., la colección de columnas Child N a veces se denomina grupo repetitivo y se supone que infringe 1NF. aunque no es un grupo repetitivo en el sentido que coddó.

Este último sentido del llamado grupo de repetición no es técnicamente una violación de 1NF si cada atributo tiene un solo valor. Los atributos en sí mismos no contienen valores de repetición y, por lo tanto, no hay violación de 1NF por esa razón. Sin embargo, un diseño de este tipo a menudo se considera un antipatrón debido a que restringe la tabla a un número fijo predeterminado de valores (máximo N niños en una familia) y porque obliga a las consultas y otras lógicas comerciales a repetirse para cada una de las columnas. En otras palabras, viola el principio de diseño " SECO ". Debido a que generalmente se considera un diseño deficiente, se adapta a los diseñadores de bases de datos y, a veces, incluso a los profesores para referirse a las columnas repetidas de este tipo como un "grupo de repetición" y una violación del espíritu de la Primera Forma Normal.

Este uso informal de la terminología es ligeramente desafortunado porque puede ser un tanto arbitrario y confuso (¿cuándo un conjunto de columnas realmente constituye una repetición?) Y también porque es una distracción de un problema más fundamental, a saber, el problema nulo. Todos los formularios normales se refieren a relaciones que no permiten la posibilidad de nulos. Si una tabla permite un nulo en cualquier columna, entonces no cumple los requisitos de un esquema de relación que satisfaga 1NF. En el caso de nuestra tabla Familias, si las columnas Niño permiten nulos (para representar familias que tienen menos de N hijos), la tabla Familias no satisface 1NF. La posibilidad de nulos a menudo se olvida o se ignora en los ejercicios de normalización, pero evitar las innecesarias columnas que aceptan nulos es una muy buena razón para evitar la repetición de conjuntos de columnas, ya sea que los llames "grupos repetitivos" o no.

Ver también este artículo .


el valor en inglés se repite una y otra vez. ¿Es este un grupo repetitivo?

No. Las apariciones múltiples de inglés en SUBJECT_MODULE no son un grupo repetitivo o incluso ninguna de las dos cosas que la gente entiende erróneamente por un grupo que se repite. Tampoco son evidencia de redundancia o falta de normalización. Tales apariencias múltiples pueden estar conectadas a redundancia o normalización, pero aparecen todo el tiempo cuando no hay redundancia y varios niveles de normalización.

Si SUBJECT_MODULE es una fila donde "[SUBJECT_NAME] identificó a [MODULE_ID] con [MODULE_ID]" y un sujeto podría tener más de un módulo, entonces debe tener múltiples menciones de ese tema (quizás a través de su nombre) con menciones de diferentes módulos ( quizás por nombre o identificación). Eso no implicaría redundancia.

Student Age Subject Adam 15 Biology Adam 15 Maths Alex 14 Maths Stuart 17 Maths

La redundancia en este ejemplo del segundo enlace " este " de su pregunta no es que Adán aparezca en dos filas o que Adán aparezca con 15 en dos filas. Es que si la tabla es filas donde "[Estudiante] tiene [Edad] años y toma [Asunto]" entonces Estudiante (por ejemplo, Adán) puede aparecer en varias filas, pero siempre aparece con la misma edad (por ejemplo, 15). Pero si la tabla fuera una fila donde "[Estudiante] tiene un amigo [Edad] años en [Asunto]", entonces la tabla ya podría estar completamente normalizada.

Claro que se deshace del valor de repetición, pero no estoy seguro si esto es lo correcto.

Lo hace para sus datos de ejemplo, pero podría no serlo para otros datos de ejemplo. No nos has dicho lo suficiente. (De todos modos, como dije antes, las apariciones múltiples quizás ni siquiera necesiten normalizarse).

Si hay redundancias relevantes para la normalización en SUBJECT_MODULE o incluso si hay descomposiciones válidas, incluida la que usted proporcionó, depende de la información habitual necesaria para normalizar por encima de 1NF. A saber, si algunas de sus columnas son funciones de otras (dependencias funcionales) y si sus filas son también aquellas en las que "..." Y "..." (dependencias de unión).

Al dar una posible descomposición, ha dicho que también hay filas donde "... [Subject_Name] ... [Module_ID] ..." Y "... [Module_Name] ... [Module_ID] ..." Y usted ha dado algunos ejemplos de datos de descomposición. Pero solo sabemos que podría estar tan descompuesto porque agregaste la descomposición. Y la descomposición más datos aún no es suficiente para saber si debería estar tan descompuesto.

He leído diferentes tutoriales y he visto diferentes ejemplos de normalización, especialmente la noción de "repetir grupos" en la primera forma normal.

Los "grupos repetitivos" son algo de las bases de datos pre-relacionales y no pueden aparecer en una tabla relacional (relación). Son como un conjunto de valores con nombre que es como un campo de un registro pero que no es del todo cierto. Una tabla relacional siempre está en 1NF. Cada columna de una fila tiene un valor único del tipo de columna. Una base de datos no relacional está "normalizada" a tablas, es decir, 1NF (primer sentido de "normalizado") que elimina los grupos repetitivos. Entonces esas tablas / relaciones se "normalizan" a formas normales superiores (segundo sentido de "normalizado").

Una tabla relacional que tenga múltiples columnas similares o que tenga un tipo de columna con varias partes similares es una reminiscencia de tener un grupo repetitivo en una base de datos no relacional. Y las columnas y partes múltiples deben convertirse en varias filas en una tabla separada, al igual que los miembros múltiples de un grupo que se repite. Pero estos problemas tienen que ver con la calidad relacional del diseño , no con la repetición de grupos o la normalización (en ningún sentido) o con la relación (es decir, estar en 1NF).

Tenga en cuenta que una base de datos no relacional podría tener problemas similares con múltiples campos similares y / o conjuntos con nombre o con múltiples partes similares de valores de campos. La normalización de las tablas no elimina estas cuando se deshace de los grupos que se repiten.

Independientemente de cómo se metieron en un diseño relacional, eliminarlos ofrece un diseño "mejor". Es solo porque estos problemas de diseño recuerdan a los grupos repetitivos que la gente se confunde e imagina que de alguna manera una tabla podría contener un grupo que se repite. Por lo tanto, a las columnas y valores similares múltiples con varias partes similares (o las partes) se les llama incorrectamente "grupos repetitivos".

Ver esta respuesta re "atomicidad" .