Herramientas de usuario

Herramientas del sitio


informatica:bases_de_datos:sql

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:bases_de_datos:sql [2021/05/21 14:08] – [Primera forma normal] tempwininformatica:bases_de_datos:sql [2021/05/21 14:45] (actual) – [Tablas resumen] tempwin
Línea 31: Línea 31:
  
 ^ id ^ num_factura ^ ^ id ^ num_factura ^
-150+| | 
 + 
 +==== Segunda forma normal ==== 
 + 
 +Cada campo de la tabla debe depender de la clave principal. No podemos incluir campos que dan información de otras tablas. 
 + 
 +Por ejemplo, si tenemos una tabla de clientes, no incluiremos campos de productos. 
 + 
 +==== Tercera forma normal ==== 
 + 
 +No puede haber datos derivados. Si tenemos una clave foránea en una tabla, no podemos incluir en esa tabla otro campo de la tabla foránea si ellos los podemos obtener a través de dicha clave foránea. 
 + 
 +Por ejemplo, si tenemos un campo llamado **id_departamento** en la tabla **clientes**, no podría incluir un campo **nombre_departamento** en esa tabla ya que es un dato que se puede obtener mediante el campo **id_departamento** cuando buscamos en la tabla de **departamentos**. 
 + 
 +Esta forma normal obliga al uso de JOINS para poder obtener los datos que necesitemos. 
 + 
 +===== Buenas prácticas ===== 
 + 
 +==== Más tablas, menos columnas ==== 
 + 
 +Es preferible tener todo más atomizado en diferentes tablas que no pocas tablas llenas de campos. 
 + 
 +==== Más registros, menos columnas ==== 
 + 
 +Al separar los datos en varias tablas, cuando crucemos información tendremos más registros, pero no crecerá en campos.  
 + 
 +==== Usar valores por defecto ==== 
 + 
 +Muy útil cuando necesitamos que aparezca un valor siempre que no se diga lo contrario.  
 + 
 +==== Usar campos de estado ==== 
 + 
 +Con campos de tipo BIT, nos facilitará mucho las consultas a ciertas tablas. Ciertas comprobaciones, en lugar de hacer consultas o desarrollos complejos, podremos resolverlas con filtros sencillos. 
 + 
 +<WRAP center round important 60%> 
 +Es muy mala práctica borrar registros de tablas maestras, podríamos tener problemas de consistencia por otros datos que de otras tablas que estén relacionadas con ella. 
 +</WRAP> 
 + 
 +Por ejemplo, teniendo una tabla **productos**, podríamos tener los siguientes campos: 
 + 
 +  * ''estado'': indica si el producto está habilitado para su uso en el sistema. 
 +  * ''venta_suspendida'': indica si el producto se quitó para la venta 
 +  * ''compra_suspendida'': indica si el producto se quitó para la compra 
 + 
 +==== Índices en campos significativos ==== 
 + 
 +Si las búsquedas se suelen hacer por ciertos campos, es recomendable añadirles índices para acelerarlas. 
 + 
 +<WRAP center round important 60%> 
 +Si el campo es de tipo BIT, añadir un índice no aporta ninguna mejora. 
 +</WRAP> 
 + 
 +==== Tablas resumen ==== 
 + 
 +Con el tiempo, se almacenará tal cantidad de datos que afectará al tiempo que tardan las consultas. 
 + 
 +Un buena recomendación es crear tablas de resumen. Normalmente se automatiza un proceso mensual para crear una tabla con totales de un determinado periodo y así en búsquedas de ese rango de fechas, se hagan a estas tablas resumen en lugar de la tabla con la información desde el origen de los tiempos. 
 + 
 +No es nada recomendable que las tablas crezcan de forma descontrolada. 
 ===== JOIN ===== ===== JOIN =====
  
informatica/bases_de_datos/sql.1621598912.txt.gz · Última modificación: por tempwin