Ir al contenido


Foto

¿Normalizar o no? Caso puntual.

normalización

  • Por favor identifícate para responder
6 respuestas en este tema

#1 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 17 enero 2017 - 05:59

Estoy diseñando la o las tablas de un libro diario (contabilidad) y tengo dos opciones, una normalizando y otra no.

 

- Normalizando serían dos tablas:

 

Tabla diario: NroAsiento, Fecha, Detalle

 

Tabla asientos: Numero, cuenta, debe, haber

 

(Relación: NroAsiento---->Numero) Por cada registro en la tabla diario tendría de 2 a n registros en la tabla asientos.

 

- Sin normalizar utilizaría una sola tabla:

 

Tabla diario: NroAsiento, Fecha, Detalle, cuenta, debe, haber

 

Se repiten fecha y detalle.

 

La cantidad de registros de esta tabla podría rondar los 20.000.

 

Normalizando agrego un INNER JOIN a cada consulta, entiendo que eso consume tiempo, complica un poco más cada consulta también.

 

No me decido, me inclino un poco más por la no normalización, pero en la práctica no sé cual demorará más las consultas.

 

Escucho sugerencias. Gracias.


  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 18 enero 2017 - 10:13

Estoy diseñando la o las tablas de un libro diario (contabilidad) y tengo dos opciones, una normalizando y otra no.

 

- Normalizando serían dos tablas:

 

Tabla diario: NroAsiento, Fecha, Detalle

 

Tabla asientos: Numero, cuenta, debe, haber

 

(Relación: NroAsiento---->Numero) Por cada registro en la tabla diario tendría de 2 a n registros en la tabla asientos.

 

- Sin normalizar utilizaría una sola tabla:

 

Tabla diario: NroAsiento, Fecha, Detalle, cuenta, debe, haber

 

Se repiten fecha y detalle.

 

La cantidad de registros de esta tabla podría rondar los 20.000.

 

Normalizando agrego un INNER JOIN a cada consulta, entiendo que eso consume tiempo, complica un poco más cada consulta también.

 

No me decido, me inclino un poco más por la no normalización, pero en la práctica no sé cual demorará más las consultas.

 

Escucho sugerencias. Gracias.

 

Amigo Gaston, mi sugerencia es que siempre se diga SI a la normalización por estándar y buenas prácticas. Al final un INNER JOIN no es un trabajo que al motor de la base de datos se le complique en lo absoluto y siempre un buen diseño te quitará futuros problemas y dolores de cabeza.

 

Saludox ! :)


  • 0

#3 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 18 enero 2017 - 02:29

Gracias Fenareth, el resto de la DB está normalizada, de hecho está toda normalizada, y es más, ahora me doy cuenta que no se trata este caso puntual de "no normalización" sino de "denormalización" que es algo muy distintos.

Coincido un INNER JOIN no es la gran cosa, el tema es que para cualquier reporte tengo varios, como ser diario a asientos, asientos a subcuentas, subcuentas a cuentas y cuentas a los niveles 1,2,3,4 de cuentas. Jeje ya a lo último me pierdo, creo que al que le pesa un INNER JOIN es a mí y no al motor de la DB. Haré pruebas...

 

Gracias y saludos.


  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 19 enero 2017 - 02:49

Hola Gaston,

 

Hazte una vista con la unión de esas dos tablas (y más si hubiera otras involucradas), de forma que cuando quieras hacer informes, etc. ... puedes recurrir directamente a la vista y no tener que escribirlo todo de nuevo.

 

Con índices en los campos de relación (NroAsiento y Numero) no vas a notar ninguna diferencia de rendimiento entre tener los datos en una única tabla o mediante una unión.

 

Saludos.


  • 0

#5 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 19 enero 2017 - 02:48


Con índices en los campos de relación (NroAsiento y Numero) no vas a notar ninguna diferencia de rendimiento entre tener los datos en una única tabla o mediante una unión.

 

Saludos.

 

Gracias Marc es un buen punto. También leí que si bien la consulta (con BD normalizada) muestra los campos (columna) fecha y detalle en cada fila, los datos en sí no viajan, punto a favor de la normalización.

 

Saludos.


  • 0

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 19 enero 2017 - 04:30

Gracias Marc es un buen punto. También leí que si bien la consulta (con BD normalizada) muestra los campos (columna) fecha y detalle en cada fila, los datos en sí no viajan, punto a favor de la normalización.



A que te referis con que no viajan?


  • 0

#7 Gaston

Gaston

    Advanced Member

  • Miembros
  • PipPipPip
  • 109 mensajes

Escrito 20 enero 2017 - 03:14

A que te referis con que no viajan?

 

Que aunque en el cliente se muestren resultados con fecha y detalle (en mi caso) en cada fila de la consulta, que el tráfico desde el servidor no es tal.

 

Asiento Nro   Fecha       Detalle                                       Cuenta                           Debe      Haber

--------------------------------------------------------------------------------------------------------------------------

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX    101011                           9,99       0,00

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX     102254                         89,99      0,00

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX     205477                          0,00    100,00

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX     257111                         0,00     200,25       

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX             etc...

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX             etc..

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX             etc..

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX             etc..

1                   05/01/17   XXXXXXXXXXXXXXXXXXXXX             etc..

 

Con "viajan" me refiero a las filas duplicadas, supuestamente el servidor envía una sola el resto corre por cuenta del cliente. Siendo esto un INNER JOIN de diario con columnas nroAsiento, fecha, detalle y la tabla de asientos tiene nroAsiento, cuenta, debe y haber.

Ojo, lo leí lamentablemente no recuerdo en que sitio, pero parece razonable.

 

Saludos.


  • 0




IP.Board spam blocked by CleanTalk.