Mostrando las entradas con la etiqueta Base de Datos. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Base de Datos. Mostrar todas las entradas

31 de marzo de 2022

Comprensión de la normalización

 La normalización es un término que usan los profesionales de bases de datos para referirse a un proceso de diseño de esquemas que reduce al mínimo la duplicación de los datos e impone la integridad de los datos.

Aunque hay muchas reglas complejas que definen el proceso de refactorización de los datos en varios niveles (o formas) de normalización, una definición sencilla a efectos prácticos es:

  1. Separar cada entidad en su propia tabla.
  2. Separar cada atributo discreto en su propia columna.
  3. Identificar de forma única cada instancia de entidad (fila) mediante una clave principal.
  4. Usar columnas de clave externa para vincular entidades relacionadas.
Al registrar cada instancia de una entidad como una fila en una tabla específica de la entidad, se elimina la duplicación de datos.
La descomposición de atributos en columnas individuales garantiza que cada valor esté restringido a un tipo de datos adecuado.  Además, la creación de columnas individuales aporta un nivel útil de granularidad a los datos a la hora de realizar las consultas.
Las instancias de cada entidad se identifican de forma única mediante un identificador u otro valor de clave, conocido como clave principal; y cuando una entidad hace referencia a otra, la clave principal de la entidad relacionada se almacena como una clave externa.

Normalmente, un sistema de administración de bases de datos relacionales (RDBMS) puede aplicar la integridad referencial para garantizar que un valor especificado en un campo de clave externa tenga una clave principal correspondiente existente en la tabla relacionada.
En algunos casos, se puede definir una clave (principal o externa) como una clave compuesta basada en una combinación única de varias columnas. 


Fuentes consultadas
https://docs.microsoft.com/en-us/learn/modules/explore-relational-data-offerings/3-normalization

13 de noviembre de 2020

Calcular edad en MySQL

Calculo de la edad con fecha implícita

Para calcular la edad actual en MySQL a partir de otro campo como; la fecha de nacimiento, RFC o cualquier otro dato que lo contenga implícitamente, podemos utilizar algunas funciones.

MySQL utiliza diferentes tipos de datos para almacenar la información; por lo que se debe revisar que tipo de dato es el utilizado para almacenar la información y de ser necesario hacer la conversión.
El tipo de dato DATE en MySQL sigue el siguiente formato AAAA-MM-DD, por lo que si tiene otro orden, es necesario; reacomodar la fecha.

Para mostrar el proceso más claramente utilizare una tabla de ejemplo donde hay un campo que cuenta con la fecha implícita, en forma análoga al RFC, cuatro letras seguidas de 3 pares de números que indican el AA-MM-DD, y un par de caracteres al final.

edad_implicita
ID cadena_fecha_implicita algun_otro_dato
int varchar varchar
1 LARA901212SG Estos datos
2 LUIS950123QW son ficticios
3 IVAN650430ER para el
4 LORE120621P7 ejemplo
5 YULI090628YO del calculo
6 HOLA001011HI de la edad
7 ROJA88111145 desde el
8 AZUL990913S4 RFC o CURP


7 de abril de 2020

Palabras Claves MySQL / MariaDB

DISTINCT, LIMIT y ORDER BY


Se anexa archivo vehículos.sql para realizar las pruebas, donde se incluyen varias marcas de vehículos que se comercializan en México, el año de su fundación y el país donde se originó la marca (las últimas dos columnas fueron obtenidas de Wikipedia).


DISTINCT

En algunas situaciones se tienen múltiples registros duplicados en una tabla, puede tener más sentido retornar solo registros únicos, en lugar de recuperar los duplicados. La palabra clave DISTINCT en SQL es utilizada en conjunto con SELECT para eliminar todos los registros duplicados y retornar solo los registros únicos.

La sintaxis básica de DISTINCT es como se muestra a continuación:
SELECT DISTINCT column_name1, column_name2
FROM table_name;
Si la tabla tiene campos repetidos, solo mostrara los valores distintos de la columna. Omitiendo las entradas repetidas.
SELECT DISTINCT PaisOrigen
FROM marcas;
PaisOrigen
Japón
Italia
Inglaterra
Alemania
China
Estados Unidos
Corea
Francia
España
Suecia
México


LIMIT

Por default, todos los resultados que satisfacen las condiciones especificadas en la declaración SQL son retornados. Sin embargo, se sugiere recuperar solo un subconjunto de registros. En MySQL esto se logra utilizando la palabra clave LIMIT.

La sintaxis para LIMIT es como sigue:
SELECT column list
FROM table_name
LIMIT [numero de registros];
OR LIMIT [desplazamiento, numero de registros];

Por ejemplo, podemos recuperar los primeros cinco registros de la tabla “vehículos”
SELECT ID, Marca, PaisOrigen, FoundationYear
FROM marcas
LIMIT 4;
ID
Marca
PaisOrigen
FoundationYear
1
Acura
Japón
1986
2
Alfa Romeo
Italia
1910
3
ASTON MARTIN
Inglaterra
1913
4
Audi
Alemania
1909

También se puede tomar un subconjunto de registros de un desplazamiento particular. En el siguiente ejemplo se toman cinco registros, comenzando desde la novena posición:
SELECT ID, Marca, PaisOrigen, FoundationYear
FROM marcas
LIMIT 9,5;
ID
Marca
PaisOrigen
FoundationYear
10
Chevrolet
Estados Unidos
1911
11
Chrysler
Estados Unidos
1925
12
Dodge
Estados Unidos
1900
13
Ferrari
Italia
1947
14
Fiat
Italia
1899

Como se puede observar esto produce resultados comenzando desde el número diez de ID y no nueve, porque MySQL comienza a contar desde cero, lo que significa que el desplazamiento comienza desde la primera fila que es 0, no 1.


Nombres completamente calificados

En SQL se puede proveer el nombre de la tabla antes del nombre de la columna, separándola con un punto. Las siguientes declaraciones son equivalentes:
SELECT column FROM table;
SELECT table.column FROM table;
El termino de la sintaxis mencionada anteriormente es llamado el “nombre completamente calificados” de esa columna. Esta forma de escribir es útil cuando se trabaja con múltiples tablas que pueden compartir los mismos nombres de columnas.

ORDER BY

ORDER BY es utilizado con SELECT para ordenar los datos recuperados.

SELECT *
FROM marcas
ORDER BY Marca;
Las filas son ordenadas alfabéticamente por la columna “marcas”. Por defecto, la palabra clave ORDER BY ordena los resultados en orden ascendente.

ORDER BY puede ordenar por múltiples columnas los datos recuperados, para esto separa la lista de columnas posterior a ORDER BY con comas.

Para ordenar por “PaisOrigen” y “FoundationYear”
SELECT * FROM marcas
ORDER BY PaisOrigen DESC, FoundationYear ASC
LIMIT 10;
ID
Marca
PaisOrigen
FoundationYear
60
Scania
Suecia
1891
37
Volvo
Suecia
1927
49
SAAB
Suecia
1945
55
Dina
México
1951
33
Suzuki
Japón
1909
53
Isuzu
Japón
1916
24
Mazda
Japón
1920
27
Nissan
Japón
1933
35
Toyota
Japón
1937
54
Hino
Japón
1942

Como se tienen varios países que se repiten, serán ordenados por la columna PaisOrigen en orden descendente, y en orden ascendente por FoundationYear.
El comando ORDER BY comienza a ordenar en la misma secuencia que las columnas. Ordenara por la primera columna listada, luego por la segunda y así sucesivamente. Puede utilizar las palabras clave DESC y ASC, para ordenar en forma descendente y ascendente respectivamente.