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:15] – [Tercera forma normal] tempwininformatica:bases_de_datos:sql [2021/05/21 14:45] (actual) – [Tablas resumen] tempwin
Línea 35: Línea 35:
 ==== Segunda forma normal ==== ==== Segunda forma normal ====
  
-Cada campo de la tabla debe depender de la clave principal. +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. Por ejemplo, si tenemos una tabla de clientes, no incluiremos campos de productos.
Línea 45: Línea 45:
 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**. 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 invita al uso de JOINS para poder obtener los datos que necesitemos.+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.1621599308.txt.gz · Última modificación: por tempwin