2 - Modulo-Datos Relacionales en Azure
2 - Modulo-Datos Relacionales en Azure
2 - Modulo-Datos Relacionales en Azure
relacionales en Azure
Introducción
Cuando se empezaron a usar los sistemas informáticos, cada aplicación almacenaba los datos en su propia
estructura, que era única. Cuando los desarrolladores querían crear aplicaciones para usar esos datos,
necesitaban mucha información sobre la estructura de datos en particular para encontrar los que necesitaban.
Estas estructuras de datos eran ineficaces, costosas de mantener y difíciles de optimizar para que la aplicación
tuviera un buen rendimiento. El modelo de base de datos relacional se diseñó para resolver el problema de
tener varias estructuras de datos arbitrarias. El modelo relacional proporciona una forma estándar de
representar y consultar datos que cualquier aplicación puede usar. Una de las principales ventajas del modelo
de base de datos relacional es el uso de tablas, que son una manera intuitiva, eficaz y flexible de
almacenar información estructurada y acceder a ella.
El modelo relacional, sencillo pero eficaz, se usa en organizaciones de todo tipo y tamaño para satisfacer
diferentes necesidades de administración de la información. Las bases de datos relacionales se utilizan para
realizar un seguimiento de los inventarios, procesar transacciones de comercio electrónico, administrar grandes
cantidades de información de clientes críticos y mucho más. Las bases de datos relacionales son útiles para
almacenar cualquier información que contenga elementos de datos relacionados que se deban organizar
en una estructura coherente y basada en reglas.
En este módulo, obtendrá información sobre las características clave de las bases de datos relacionales y
explorará las estructuras de datos relacionales.
Objetivos de aprendizaje
En este módulo, aprenderá a realizar lo siguiente:
Cada columna almacena los datos de un tipo de datos específico. Por ejemplo, una columna Email de una
tabla Customer probablemente se definiría para almacenar datos basados en caracteres (texto), que podrían ser
de longitud fija o variable. Una columna Price de una tabla Product podría definirse para almacenar datos
numéricos decimales, mientras que una columna Quantity de una tabla Order podría estar restringida a valores
numéricos enteros. Una columna OrderDate de la misma tabla Order se definiría para almacenar valores de
fecha y hora. Los tipos de datos disponibles que se pueden usar al definir una tabla dependen del sistema
de base de datos que se use, aunque hay tipos de datos estándar definidos por el American National Standards
Institute (ANSI) que son compatibles con la mayoría de los sistemas de base de datos.
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:
Para comprender los principios básicos de la normalización, supongamos que la tabla siguiente representa
una hoja de cálculo que una empresa usa para realizar un seguimiento de sus ventas.
Observe que los detalles del cliente y del producto están duplicados para cada artículo individual que se vende.
Además, el nombre del cliente y la dirección postal, así como el nombre del producto y el precio, están
combinados en las mismas celdas de la hoja de cálculo.
Ahora veamos el modo en que la normalización cambia la forma de almacenar los datos.
Cada entidad que se representa en los datos (cliente, producto, pedido de ventas y artículo de línea) se
almacena en su propia tabla, y cada atributo discreto de esas entidades está en su propia columna.
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. Por ejemplo, para cambiar la dirección de un cliente, solo hace falta modificar el valor en
una sola fila.
La descomposición de atributos en columnas individuales garantiza que cada valor esté restringido a un tipo de
datos adecuado. Por ejemplo, los precios de los productos deben ser valores decimales, mientras que las
cantidades de artículos de línea deben ser números enteros. Además, la creación de columnas individuales
aporta un nivel útil de granularidad a los datos a la hora de realizar las consultas; por ejemplo, puede filtrar
fácilmente los clientes que viven en una ciudad concreta.
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 (por ejemplo, un pedido tiene un
cliente asociado), la clave principal de la entidad relacionada se almacena como una clave externa. Puede buscar
la dirección del cliente (que se almacena solo una vez) para cada registro de la tabla Order si hace referencia al
registro correspondiente en la tabla Customer. 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 (lo que, por
ejemplo, impide la realización de pedidos para clientes que no existen).
En algunos casos, se puede definir una clave (principal o externa) como una clave compuesta basada en una
combinación única de varias columnas. Por ejemplo, la tabla LineItem del ejemplo anterior usa una combinación
única de OrderNo y ItemNo para identificar un artículo de línea de un pedido individual.
Exploración de SQL
SQL significa Lenguaje de consulta estructurado (por sus siglas en inglés) y se usa para comunicarse
con una base de datos relacional. Se trata del lenguaje estándar para los sistemas de administración de
bases de datos relacionales. Las instrucciones SQL se usan para realizar tareas como actualizar o recuperar
datos de una base de datos. Algunos sistemas de administración de bases de datos relacionales habituales que
utilizan SQL incluyen Microsoft SQL Server, MySQL, PostgreSQL, MariaDB y Oracle.
Nota
El Instituto Nacional Estadounidense de Estándares (ANSI) estandarizó originalmente el lenguaje
SQL en 1986 y, luego, la Organización Internacional de Normalización (ISO), en 1987. Desde
entonces, el estándar se ha ampliado varias veces a medida que los proveedores de bases de
datos relacionales han agregado nuevas características a sus sistemas. Además, la mayoría de
los proveedores de bases de datos incluyen sus propias extensiones que no forman parte del
estándar, lo que ha dado lugar a la creación de varios dialectos de SQL.
Puede usar instrucciones SQL como SELECT, INSERT, UPDATE, DELETE, CREATE y DROP para realizar
prácticamente cualquier tarea que deba llevarse a cabo con una base de datos. Si bien estas instrucciones SQL
forman parte del estándar SQL, muchos sistemas de administración de bases de datos también cuentan con
extensiones propias adicionales para controlar los detalles de ese sistema de administración de bases de datos.
Estas extensiones proporcionan una funcionalidad que no se incluye en el estándar de SQL y contienen áreas
como la administración de la seguridad y la capacidad de programación. Por ejemplo, Microsoft SQL Server y los
servicios de base de datos de Azure basados en el motor de base de datos de SQL Server usan Transact-SQL.
Esta implementación incluye extensiones propias para escribir procedimientos almacenados y desencadenadores
(código de aplicación que se puede almacenar en la base de datos), y administrar cuentas de usuario.
PostgreSQL y MySQL también tienen sus propias versiones de estas características.
Transact-SQL (T-SQL). Esta versión de SQL la usan los servicios Microsoft SQL Server y Azure SQL.
pgSQL. Se trata del dialecto, con extensiones, que se implementa en PostgreSQL.
PL/SQL. Se trata del dialecto que utiliza Oracle. PL/SQL significa "lenguaje de procedimientos/SQL".
Los usuarios que planeen trabajar específicamente con un sistema de base de datos única deben conocer los
pormenores del dialecto y la plataforma de SQL preferidos.
Nota
Los ejemplos de código SQL de este módulo se basan en el dialecto de Transact-SQL, a menos
que se indique lo contrario. La sintaxis de otros dialectos suele ser similar, pero puede variar en
algunos detalles.
Tipos de instrucción SQL
Las instrucciones SQL se agrupan en tres grupos lógicos principales:
Instrucciones DDL
Las instrucciones DDL se usan para crear, modificar y quitar tablas y otros objetos de una base de datos
(tabla, procedimientos almacenados, vistas, etc.).
Instrucción Descripción
CREATE Permite crear un nuevo objeto en la base de datos, como una tabla o una vista.
ALTER Permite modificar la estructura de un objeto. Por ejemplo, una tabla para agregar una nueva
columna.
DROP Permite quitar un objeto de la base de datos.
RENAME Permite cambiar el nombre de un objeto existente.
Advertencia
La instrucción DROP es muy eficaz. Al quitar una tabla, se pierden todas las filas de esa tabla.
Salvo en el caso de que tenga una copia de seguridad, no podrá recuperar los datos.
En el siguiente ejemplo se crea una nueva tabla de base de datos. Los elementos entre paréntesis especifican los
detalles de cada columna, como el nombre, el tipo de datos, si la columna debe contener siempre un valor
(distinto de NULL) y si los datos de la columna se usan para identificar de forma única una fila (CLAVE
PRINCIPAL). Cada tabla debe tener una clave principal, aunque SQL no aplica forzosamente esta regla.
Nota
Las columnas marcadas como NOT NULL se denominan columnas obligatorias. Si omite la
cláusula NOT NULL, puede crear filas que no contengan un valor en la columna. Se considera
que una columna vacía de una fila tiene un valor NULL.
Los tipos de datos disponibles para las columnas de una tabla variarán en función del sistema de administración
de bases de datos. Aun así, la mayoría de los sistemas de administración de bases de datos admiten tipos
numéricos como INT (un número entero), DECIMAL (un número decimal) y tipos de cadena como VARCHAR
(VARCHAR significa "datos de caracteres de longitud variable"). Para obtener más información, consulte la
documentación del sistema de administración de bases de datos que ha seleccionado.
Instrucciones DCL
Los administradores de bases de datos suelen usar instrucciones DCL para administrar el acceso a objetos
de una base de datos mediante la concesión, denegación o revocación de permisos a usuarios o grupos
específicos.
Instrucción Descripción
GRANT Concesión de permiso para llevar a cabo acciones específicas
DENEGAR Denegación de permiso para llevar a cabo acciones específicas
REVOKE Retirada de un permiso concedido
Por ejemplo, la siguiente instrucción GRANT permite a un usuario denominado user1 leer, insertar y modificar
datos en la tabla Product.
Instrucciones DML
Las instrucciones DML se usan para manipular las filas de las tablas. Estas instrucciones permiten recuperar
(consultar) datos, insertar nuevas filas o modificar filas existentes. También puede eliminar filas si ya no las
necesita.
Instrucción Descripción
SELECT Lectura de filas de una tabla
INSERT Permite insertar nuevas filas en una tabla.
UPDATE Modificación de datos en filas existentes
DELETE Eliminación de filas existentes
La forma básica de una instrucción INSERT insertará una fila cada vez. De forma predeterminada, las
instrucciones SELECT, UPDATE y DELETE se aplican a todas las filas de una tabla. Normalmente, se aplica una
cláusula WHERE con estas instrucciones para especificar criterios, de forma que solo se seleccionen, actualicen
o eliminen las filas que cumplan estos criterios.
Advertencia
SQL no ofrece solicitudes de confirmación, por lo que debe tener cuidado al usar DELETE o
UPDATE sin una cláusula WHERE, ya que podría perder o modificar una gran cantidad de datos.
El código siguiente es un ejemplo de una instrucción SQL que permite seleccionar todas las filas (indicadas con *)
de la tabla Customer, donde el valor de la columna Ciudad es "Seattle":
Para recuperar solo un subconjunto específico de columnas de la tabla, puede enumerarlas en la
cláusula SELECT, tal como se muestra a continuación:
Si una consulta devuelve muchas filas, estas no necesariamente aparecen en una secuencia concreta. Si quiere
ordenar los datos, puede agregar una cláusula ORDER BY. Los datos se ordenarán por la columna especificada:
También puede ejecutar instrucciones SELECT que recuperen datos de varias tablas mediante una
cláusula JOIN. Las combinaciones indican cómo las filas de una tabla se conectan con las filas de la otra para
determinar qué datos se van a devolver. Una condición de combinación típica coincide con una clave externa de
una tabla y su clave principal asociada en la otra tabla.
En la consulta siguiente se muestra un ejemplo que une las tablas Customer y Order. La consulta usa alias de
tabla para abreviar los nombres de tabla al especificar qué columnas deben recuperarse en la cláusula SELECT y
qué columnas deben coincidir en la cláusula JOIN.
En el ejemplo siguiente se muestra cómo modificar una fila existente mediante SQL. Se cambia el valor de la
columna Address de la tabla Customer para las filas que tienen el valor 1 en la columna ID. Todas las demás
filas permanecen sin cambios:
Advertencia
Si omite la cláusula WHERE, una instrucción UPDATE modificará todas las filas de la tabla.
Use la instrucción DELETE para quitar filas. Debe especificar la tabla en la que se va a realizar la eliminación y
una cláusula WHERE que identifique las filas que se van a eliminar:
Advertencia
Si omite la cláusula WHERE, una instrucción DELETE quitará todas las filas de la tabla.
La instrucción INSERT tiene un formato ligeramente diferente. Debe especificar una tabla y las columnas en una
cláusula INTO, y una lista de valores que se van a almacenar en estas columnas. El lenguaje SQL estándar
solo admite la inserción de una fila cada vez, tal como se muestra en el ejemplo siguiente. Algunos dialectos le
permiten especificar varias cláusulas VALUES para agregar varias filas a la vez:
Nota
En este tema se describen algunas instrucciones SQL y sintaxis básicas para ayudarle a
comprender cómo se usa SQL para trabajar con objetos en una base de datos. Si quiere obtener
más información sobre cómo consultar datos con SQL, revise la ruta de aprendizaje Introducción
a las consultas con Transact-SQL en Microsoft Learn.
Puede definir un procedimiento almacenado con parámetros a fin de crear una solución flexible para las acciones
comunes que podrían tener que aplicarse a los datos en función de una clave o criterios específicos. Por ejemplo,
se podría definir el siguiente procedimiento almacenado para cambiar el nombre de un producto en función del
identificador de producto especificado.
Cuando haya que cambiar el nombre de un producto, puede ejecutar el procedimiento almacenado y pasar el
identificador del producto y el nuevo nombre que se va a asignar:
¿Qué es un índice?
Un índice le ayuda a buscar datos en una tabla. Piense en el índice de una tabla como en el índice de la parte
final de un libro. El índice de un libro contiene un conjunto ordenado de contenido, junto a las páginas en las que
aparece. El índice le servirá para buscar la referencia a un elemento del libro. Puede usar los números de página
del índice para ir directamente a las páginas correctas del libro. Sin el índice, es posible que tenga que leer todo
el libro para encontrar el contenido que está buscando.
Cuando se crea un índice en una base de datos, se especifica una columna de la tabla; el índice contiene una
copia de estos datos con un criterio de ordenación y punteros a las filas correspondientes de la tabla. Cuando el
usuario ejecuta una consulta que especifica esa columna en la cláusula WHERE, el sistema de administración de
bases de datos puede utilizar el índice para capturar los datos más rápidamente que si tuviera que examinar toda
la tabla fila por fila.
Por ejemplo, podría usar el código siguiente para crear un índice en la columna Name de la tabla Product:
El índice crea una estructura basada en árbol que el optimizador de consultas del sistema de base de datos
puede usar para buscar rápidamente filas en la tabla Product en función de un nombre específico (Name).
Para una tabla que contiene pocas filas, el uso del índice probablemente no sea más eficaz que simplemente leer
toda la tabla y buscar las filas solicitadas por la consulta (en cuyo caso, el optimizador de consultas omitirá el
índice). Pero cuando una tabla tiene muchas filas, los índices pueden mejorar drásticamente el
rendimiento de las consultas.
Puede crear muchos índices en una tabla. Por lo tanto, si también quisiera buscar productos basados en el
precio, podría resultar útil crear otro índice en la columna Price de la tabla Product. Sin embargo, los índices no
son gratuitos. Un índice consume espacio de almacenamiento y, cada vez que inserte datos en una tabla, los
actualice o los elimine, tendrá que hacer el mantenimiento de sus índices. Este trabajo adicional puede ralentizar
las operaciones de inserción, actualización y eliminación. Debe conseguir un equilibrio entre tener índices
que aceleren las consultas y el coste de realizar otras operaciones.