El Lenguaje de Base
de Datos SQL
Integrantes:
Luis Zapata C.I 33.090.731
Anyelis Betancourt C.I 33.442.235
Cesar Vilera C.I 26.695.662
Adriana Paris C.I 31.640.298
Cheylis Silvera C.I 34.050.819
El Tigre, Edo. Anzoátegui, 2025
Índice
Introducción ............................................................................... 2
1. Introducción al Lenguaje SQL ................................................3
1.1 ¿Qué es el Lenguaje SQL? ................................................3
1.2 Importancia de SQL ..........................................................3
1.3 Ventajas de utilizar SQL ...................................................4
1.3.1 Fácil manipulación de datos ......................................4
1.3.2 Procesamiento rápido de consultas ............................4
1.3.3 Seguridad de datos robusta ........................................4
1.3.4 Similitud y compatibilidad ........................................4
1.3.5 Escalabilidad .............................................................4
1.3.6 Soporte de código abierto ..........................................4
1.4 Características de SQL .....................................................4
1.5 Historia de SQL ...............................................................5
2. Definición de Esquemas en SQL ...........................................6
2.1 Tipos de Datos .................................................................6
2.1.1 Numéricos .................................................................6
2.1.2 Cadenas de caracteres ...............................................7
2.1.3 Cadenas binarias .......................................................8
2.1.4 Fecha y hora ..............................................................8
2.1.5 Otras ..........................................................................8
2.2 Definición de Tablas ........................................................9
2.3 Modificación de Relaciones en Esquemas ......................10
2.4 Valores por Defecto ........................................................10
2.5 Índices .............................................................................12
2.5.1 Creación y uso de índices ........................................13
2.5.2 Selección con Índices ..............................................13
3. Claves y Foreign Keys .........................................................14
3.1 Declaración de Claves Primarias ...................................14
3.2 UNIQUE ........................................................................15
3.3 Restricciones Sobre Claves .............................................................16
3.3.1 Clave principal .........................................................................16
3.3.2 Clave externa ...........................................................................16
3.4 Declaración de Restricciones de Integridad Referencial ................16
3.5 Mantenimiento de Integridad Referencial ......................................17
3.6 Chequeo Diferido de Restricciones ................................................18
Conclusión ................................................................................................19
Introducción
Imagina que SQL es como el carné de identidad de las bases de datos. Es ese lenguaje que, aunque tiene
sus años (¡nació en los 70!), sigue siendo el rey indiscutible para hablar con los datos almacenados en
sistemas como MySQL, SQL Server o PostgreSQL. Este documento es como tu guía de supervivencia para
entenderlo sin morir en el intento. No importa si eres nuevo en esto o ya le has peleado un rato; aquí
vas a encontrar desde lo más básico (qué diablos es una tabla o un tipo de dato) hasta trucos más
avanzados para que tus consultas vuelen.
SQL no es solo para programadores hardcore. Su magia está en que, con comandos casi en inglés como
SELECT o INSERT, puedes pedirle a la base de datos casi cualquier cosa: desde "muéstrame todos los
clientes que gastaron más de 100 euros" hasta "actualiza los precios de estos productos". Y lo mejor: es
universal. Lo que aprendes aquí te sirve en Oracle, en PostgreSQL, en casi cualquier sistema serio que
guarde datos de forma ordenada (eso que llaman "bases relacionales").
El documento empieza contándote por qué SQL manda en el mundo de los datos: es rápido, seguro (con
permisos y cifrado), escala desde lo tiny hasta lo enorme, y tiene una comunidad gigante detrás (muchas
herramientas son gratis y de código abierto). Luego se mete en el barro: cómo diseñar tus tablas, elegir
el tipo de dato correcto (¿sabías que hay enteros de 1, 2, 4 y hasta 8 bytes? O que TEXT está obsoleto y
mejor uses VARCHAR), poner valores por defecto (por si alguien olvida llenar un campo), y cómo ligar
tablas con llaves foráneas (esas que aseguran que no existan "datos huérfanos").
También le dedica un buen rato a los índices, esos "atajos" que hacen que tus búsquedas no sean
lentísimas (como el índice de un libro, pero para datos). Te explica cuándo usarlos, cómo crearlos y hasta
cómo evitar que se vuelvan un dolor de cabeza. Y no podían faltar las llaves primarias (el DNI único de
cada fila) y las restricciones UNIQUE (para que no se repitan correos, por ejemplo).
2
1. Introducción al Lenguaje SQL
1. ¿Qué es el Lenguaje SQL?
SQL es la abreviatura de Structured Query Language (lenguaje de consulta estructurado),
un lenguaje diseñado para interactuar con bases de datos relacionales. SQL permite realizar
tareas como actualizar y recuperar datos de bases de datos.
Una base de datos SQL, también conocida como base de datos relacional, es una
colección estructurada de datos organizados en tablas, a las que se puede tener acceso mediante
un lenguaje de consulta estructurado. Es lo contrario de una base de datos NoSQL. Cada fila de
una tabla representa una entidad de datos y cada columna define un campo de información
específico. A través de SQL se puede tener acceso a los datos de estas tablas, así como
administrarlos, modificarlos, actualizarlos, controlarlos y organizarlos.
Los sistemas de administración de bases de datos relacionales comunes que utilizan SQL
incluyen Oracle, Sybase, Microsoft SQL Server, MySQL, PostgreSQL, MariaDB y más.
Aunque muchos sistemas de bases de datos adoptan un lenguaje de programación como
SQL, a menudo incorporan extensiones propietarias únicas específicas para sus plataformas. Sin
embargo, los comandos SQL fundamentales como «SELECT», «INSERT» y «CREATE» son de
aplicación universal para la mayoría de las operaciones de bases de datos.
2. Importancia de SQL
A diferencia de los lenguajes de programación de propósito general, SQL está diseñado
específicamente para bases de datos relacionales, y las bases de datos relacionales, a su vez,
están optimizadas para SQL. Este diseño mutuo hace de SQL una herramienta de gestión de
datos altamente eficiente. La naturaleza declarativa de SQL lo hace accesible incluso para
usuarios con experiencia limitada en programación, lo que lo convierte en un lenguaje ideal para
principiantes. Su uso generalizado y su integración con otros lenguajes de programación como
Python y Java también lo convierten en una habilidad valiosa en entornos de programación y
datos más amplios.
3
3. Ventajas de utilizar SQL
SQL ofrece muchas ventajas, por lo que se ha mantenido como uno de los lenguajes de
programación más utilizados y duraderos.
3.1 Fácil manipulación de datos:
Los sencillos comandos de SQL (como GROUP BY, ORDER BY, GRANT y REVOKE)
permiten a usuarios de todos los niveles trabajar con bases de datos.
3.2 Procesamiento rápido de consultas:
Los índices SQL y las técnicas de optimización de consultas mejoran la velocidad de
recuperación de los datos y, por lo tanto, aumentan el rendimiento de la base de datos.
3.3 Seguridad de datos robusta:
Las bases de datos SQL incluyen características de seguridad como autenticación de
usuarios, controles de acceso y cifrado para proteger los datos.
3.4 Similitud y compatibilidad:
SQL cumple con las normas ANSI e ISO SQL, que ayudan a garantizar la compatibilidad
con varios sistemas y plataformas, incluidos los entornos de nube y las herramientas de big data.
3.5 Escalabilidad:
SQL puede gestionar eficazmente bases de datos tanto pequeñas como grandes,
adaptándose a las crecientes necesidades de datos sin pérdidas significativas de rendimiento.
3.6 Soporte de código abierto:
Muchas bases de datos SQL son de código abierto y cuentan con el apoyo de una
comunidad amplia y activa que contribuye a la mejora continua y a la resolución de problemas.
4. Características de SQL
En esencia, el SQL es un lenguaje declarativo de alto nivel ya que, al manejar conjuntos
de registros y no registros individuales, ofrece una elevada productividad en la codificación y en
la orientación a objetos. Una sentencia de SQL puede resultar equivalente a más de un programa
que emplee un lenguaje de bajo nivel.
4
Una base de datos, dicen los expertos, implica la coexistencia de múltiples tipos de
lenguajes. El denominado Data Definition Language (también conocido como DDL) es aquél
que permite modificar la estructura de los objetos contemplados por la base de datos por medio
de cuatro operaciones básicas. SQL, por su parte, es un lenguaje que permite manipular datos
(Data Manipulation Language o DML) que contribuye a la gestión de las bases de datos a través
de consultas.
5. Historia de SQL
SQL fue introducido en la década de 1970 por los investigadores de IBM Donald D.
Chamberlin y Raymond F. Boyce, que desarrollaron el lenguaje de programación después de
conocer el modelo relacional de Edgar F. Codd. La versión inicial de SQL se llamaba SEQUEL
(Structured English Query Language) y fue diseñada para manipular y recuperar datos
almacenados en el sistema original de administración de bases de datos cuasi relacionales de
IBM, System R, que un grupo del Laboratorio de Investigación de IBM en San José había
desarrollado durante la década de 1970.
La primera implementación disponible a nivel comercial de programación SQL fue
introducida por Relational Software, Inc. (ahora Oracle) en 1979. SQL fue estandarizado por el
American National Standards Institute (ANSI) en 1986, con estandarización por la Organización
Internacional de Normalización (ISO) en 1987.
Los servidores SQL ofrecían dos ventajas principales sobre las API de lectura-escritura
más antiguas, como ISAM o VSAM. Para empezar, SQL introdujo el concepto de acceder a
muchos registros con un solo comando. En segundo lugar, eliminó la necesidad de especificar
cómo alcanzar un registro, es decir, con o sin un índice.
A lo largo de los años, la programación de servidores SQL ha experimentado varias
revisiones para mantenerse al día con las necesidades cambiantes de la industria de las bases de
datos. Por ejemplo, SQL:2011 introdujo datos temporales y mejoras para las funciones de
ventana y una cláusula FETCH.
SQL:2016 trajo la coincidencia de patrones de fila, las funciones de tabla polimórficas y
las operaciones en los datos JSON almacenados en campos de cadena de caracteres. SQL:2019
5
agregó la Parte 15, matrices multidimensionales (operadores y tipo de matriz MD) a las
instrucciones SQL.
La evolución de SQL también incluyó el desarrollo de varios sistemas de bases de datos.
Por ejemplo, MS SQL Server de Microsoft se inició en 1988 cuando Microsoft colaboró con
Ashton-Tate y Sybase con el fin de desarrollar software de creación y mantenimiento de bases de
datos.
2. Definición de Esquemas en SQL
1. Tipos de Datos
1.1 Numéricos
1.1.1 INT: Datos numéricos enteros con una capacidad máxima de almacenamiento de 4
bytes, lo que engloba un abanico comprendido entre el -[Link] y [Link].
1.1.2 BIGINT: Datos numéricos enteros con una capacidad máxima de almacenamiento
de 8 bytes, lo que engloba un abanico comprendido entre el -[Link].854.775.808 y
[Link].854.775.807 Con fin de ahorrar recursos y definir un modelo más eficiente.
1.1.3 SMALLINT: Datos numéricos enteros con una capacidad máxima de
almacenamiento de 2 bytes, lo que engloba un abanico comprendido entre el -32.768 y 32.767.
1.1.4 TINYINT: Datos numéricos enteros con una capacidad máxima de almacenamiento
de 1 bytes, lo que engloba un abanico comprendido entre el 0 y 255.
1.1.5 BIT: Tipo de dato que solo puede almacenar los valores 0, 1 o NULL. Funciona
igual que el tipo boolean de otros sistemas independientes.
1.1.6 DECIMAL: Datos numéricos con precisión y escalas fijas. La precisión estará
comprendida entre 1 y 38 y el tamaño de almacenamiento variará en función de la precisión,
siendo el mínimo de bytes 5 y el máximo 17.
1.1.7 NUMERIC: Tipo de dato funcionalmente sinónimo a DECIMAL, pudiendo
utilizarse indistintamente.
1.1.8 MONEY: Tipo de dato que representa valores monetarios o de moneda con una
capacidad máxima de 8 bytes, lo que engloba un abanico comprendido entre el -
[Link].477,5808 y el [Link].477,5807.
6
1.1.9 SMALLMONEY: Tipo de dato que representa valores monetarios o de moneda con
una capacidad máxima de 4 bytes, lo que engloba un abanico comprendido entre el -
214.748,3648 y el 214.748,3647.
1.1.10 FLOAT: Datos numéricos aproximados de coma flotante. Donde n de
FLOAT[(n)], dependerá la precisión y capacidad máxima de almacenamiento 4 - 8 bytes. El
valor de n comprenderá los valores entre 1 y 53, siendo 53 el valor por defecto.
1.1.11 REAL: Datos numéricos aproximados de coma flotante. El tipo real será el
equivalente a FLOAT (24) lo que definirá una capacidad de almacenamiento de 4 bytes.
1.2 Cadenas de caracteres
1.2.1 No Unicode
[Link] CHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño fijo.
Donde n de CHAR(n) indica el tamaño de la cadena de bytes comprendido entre el valor de 1 a
8000.
[Link] VARCHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño
variable. Donde n de VARCHAR indica el tamaño de la cadena de bytes comprendido entre el
valor de 1 a 8000.
[Link] TEXT: Para el almacenamiento de valores de gran tamaño de datos de longitud
fija y variable de caracteres y binarios no Unicode. El tamaño de almacenamiento será de
[Link] bytes. Este tipo será eliminado en versiones futuras de SQL-Server por lo que se
recomienda descartar su uso actualmente.
1.2.2 Unicode
[Link] NCHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño fijo.
Donde n de NCHAR(n) indica el tamaño de la cadena de bytes comprendido entre el valor de 1 a
4000.
[Link] NVARCHAR: Para el almacenamiento de caracteres alfanuméricos de tamaño
variable. Donde n de NVARCHAR(n) indica el tamaño de la cadena de bytes comprendido entre
el valor de 1 a 4000.
7
[Link] NTEXT: Para el almacenamiento de valores de gran tamaño de datos de longitud
fija y variable de caracteres y binarios Unicode. El tamaño de almacenamiento será de
[Link] bytes. Este tipo será eliminado en versiones futuras de SQL-Server por lo que se
recomienda descartar su uso actualmente.
1.3 Cadenas binarias
1.3.1 BINARY: Para el almacenamiento de datos binarios de longitud fija. Donde n de
BINARY(n) indica el tamaño de longitud, comprendida en un valor entre 1 a 8000 bytes.
1.3.2 VARBINARY: Para el almacenamiento de datos binarios de longitud variable.
Donde n de VARBINARY(n) indica el tamaño de longitud, comprendida en un valor entre 1 a
8000 bytes.
1.3.3 IMAGE: Para el almacenamiento de datos binarios de longitud variable con un
tamaño de almacenamiento de [Link] bytes. Este será eliminado en versiones futuras de
SQL-Server por lo que se recomienda descartar su uso actualmente.
1.4 Fecha y hora
1.4.1 DATE: Para almacenar una fecha en formato por defecto: YYYY-MM-DD. Dicho
formato podrá ser modificado utilizando máscaras de entrada.
1.4.2 DATETIME: Para almacenar una fecha y hora con fracciones de segundo en
formato por defecto AAAA-MM-DD hh:mm:ss. Dicho formato podrá ser modificado utilizando
máscaras de entrada.
1.4.3 SMALLDATETIME: Para almacenar una fecha y hora sin fracciones de segundo
en formato por defecto AAAA-MM-DD hh:mm:ss. Los segundos siempre estarán a O (:00).
1.4.4 DATETIME2: Para almacenar una fecha y hora con un rango y precisión mayor
que DATETIME, en formato por defecto AAA-MM-DD hh:mm:ss[nnnnnnn]. Dicho formato
podrá ser modificado utilizando máscaras de entrada.
1.4.5 DATETIMEOFFSET: Para almacenar una fecha y hora con un rango y precisión
como DATETIME2, agregando, además, reconocimiento de la zona horaria basado en UTC
(hora universal coordinada u hora del meridiano de Greenwich). El formato por defecto será
AAAA-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm.
1.4.6 TIME: Para almacenar una hora en formato por defecto: hh:mm:ss[.nnnnnnn].
8
1.5 Otras
1.5.1 CURSOR: Para recorrer registros y resultados de una consulta. Ver en más detalle
en la sección de CURSOR.
1.5.2 ROWVERSION: Para exponer números binarios generados automáticamente
utilizado usualmente para indicar la versión de las filas de una tabla.
1.5.3 HIERARCHYID: Para representar la posición en una jerarquía de árbol.
1.5.4 UNIQUEIDENTIFIER: Para almacenar identificadores únicos globales (GUID).
1.5.5 SQL_VARIANT: Para almacenar valores de varios tipos de datos admitidos en
SQL Server.
1.5.6 XML: Para almacenar datos XML.
1.5.7 TABLE: Para almacenar temporalmente un conjunto de filas y devolver el resultado
con valores de tabla.
1.5.8 GEOMETRÍA ESPACIAL: Para almacenar datos espaciales planares en un sistema
de coordenadas euclídeo.
1.5.9 GEOGRAFÍA ESPACIAL: Para almacenar datos espaciales elipsoidales como
coordenadas de latitud y longitud GPS.
2. Definición de Tablas
Las tablas son objetos de base de datos que contienen todos sus datos. En las tablas, los
datos se organizan con arreglo a un formato de filas y columnas, similar al de una hoja de
cálculo. Cada fila representa un registro único y cada columna un campo dentro del registro. Por
ejemplo, en una tabla que contiene los datos de los empleados de una compañía puede haber una
fila para cada empleado y distintas columnas en las que figuren detalles de los mismos, como el
número de empleado, el nombre, la dirección, el puesto que ocupa y su número de teléfono
particular.
El número de tablas de una base de datos se limita solo por el número de objetos admitidos
en una base ([Link]). Una tabla definida por el usuario estándar puede tener hasta
1.024 columnas. El número de filas de la tabla solo está limitado por la capacidad de
almacenamiento del servidor.
9
Puede asignar propiedades a la tabla y a cada columna de la tabla para controlar los datos
admitidos y otras propiedades. Por ejemplo, puede crear restricciones en una columna para
no permitir valores nulos o para proporcionar un valor predeterminado si no se especifica un
valor, o puede asignar una restricción de clave en la tabla que exige la unicidad o definir una
relación entre las tablas.
Los datos de la tabla se pueden comprimir por filas o por página. La compresión de datos
puede permitir que se almacenen más filas en una página. Para obtener más información,
consulte Data Compression.
3. Modificación de Relaciones en Esquemas
En el ámbito de las bases de datos, una relación se establece generalmente a través de
claves foráneas (foreign keys), que enlazan una tabla con otra. Modificar una relación implica
alterar, eliminar o añadir estas restricciones. Las operaciones se realizan comúnmente utilizando
el lenguaje de consulta estructurado (SQL).
Las principales modificaciones que se pueden realizar son:
Añadir una relación (Clave Foránea): Si dos tablas existen, pero no están
relacionadas, puedes crear un vínculo entre ellas.
Eliminar una relación (Clave Foránea): Si una relación existente ya no es necesaria,
se puede suprimir.
Modificar el comportamiento de una relación: Se pueden ajustar las acciones que
ocurren en la tabla secundaria cuando se actualiza o elimina un registro en la tabla
principal (ON DELETE CASCADE u ON UPDATE CASCADE).
Añadir una Relación
Para establecer una nueva relación entre dos tablas, se utiliza el comando ALTER TABLE
para añadir una restricción de clave foránea. Es necesario que la columna que será la clave
foránea ya exista en la tabla secundaria.
10
Eliminar una Relación
Para quitar una relación existente, también se utiliza ALTER TABLE, pero en este caso
para eliminar la restricción de la clave foránea. Es crucial conocer el nombre de la restricción
para poder eliminarla.
4. Valores por Defecto
Si al insertar registros no se especifica un valor para un campo que admite valores nulos,
se ingresa automáticamente "null" y si el campo está declarado "identity", se inserta el siguiente
de la secuencia. A estos valores se les denomina valores por defecto o predeterminados.
Un valor por defecto se inserta cuando no está presente al ingresar un registro y en
algunos casos en que el dato ingresado es inválido.
Para campos de cualquier tipo no declarados "not null", es decir, que admiten valores
nulos, el valor por defecto es "null". Para campos declarados "not null", no existe valor por
defecto, a menos que se declare explícitamente con la cláusula "default".
Para todos los tipos, excepto los declarados "identity", se pueden explicitar valores por
defecto con la cláusula "default".
Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para
ello utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del
campo "autor" de la tabla "libros" sea "Desconocido" y el valor por defecto del campo "cantidad"
sea "0":
create table libros(
codigo int identity,
titulo varchar(40),
autor varchar(30) not null default 'Desconocido',
editorial varchar(20),
precio decimal(5,2),
cantidad tinyint default 0
);
11
Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad",
Sql Server insertará los valores por defecto; el siguiente valor de la secuencia en "codigo", en
"autor" colocará "Desconocido" y en cantidad "0".
Entonces, si al definir el campo explicitamos un valor mediante la cláusula "default", ése
será el valor por defecto.
Ahora, al visualizar la estructura de la tabla con "sp_columns" podemos entender lo que
informa la columna "COLUMN_DEF", muestra el valor por defecto del campo.
También se puede utilizar "default" para dar el valor por defecto a los campos en
sentencias "insert".
Si todos los campos de una tabla tienen valores predeterminados (ya sea por ser
"identity", permitir valores nulos o tener un valor por defecto), se puede ingresar un registro de la
siguiente manera:
insert into libros default values;
La sentencia anterior almacenará un registro con los valores predeterminados para cada
uno de sus campos.
Entonces, la cláusula "default" permite especificar el valor por defecto de un campo. Si
no se explicita, el valor por defecto es "null", siempre que el campo no haya sido declarado "not
null".
Los campos para los cuales no se ingresan valores en un "insert" tomarán los valores por
defecto:
Si tiene el atributo "identity": el valor de inicio de la secuencia si es el primero o el
siguiente valor de la secuencia, no admite cláusula "default";
Si permite valores nulos y no tiene cláusula "default", almacenará "null";
Si está declarado explícitamente "not null", no tiene valor "default" y no tiene el
atributo "identity", no hay valor por defecto, así que causará un error y el "insert" no
se ejecutará.
Si tiene cláusula "default" (admita o no valores nulos), el valor definido como
predeterminado;
12
Para campos de tipo fecha y hora, si omitimos la parte de la fecha, el valor
predeterminado para la fecha es "1900-01-01" y si omitimos la parte de la hora,
"00:00:00".
Un campo sólo puede tener un valor por defecto. Una tabla puede tener todos sus campos
con valores por defecto. Que un campo tenga valor por defecto no significa que no admita
valores nulos, puede o no admitirlos.
5. Índices
Un índice SQL es una estructura de base de datos que mejora el rendimiento de las consultas al
permitir una recuperación de datos más rápida. En lugar de escanear cada fila de una tabla, el
motor de base de datos utiliza un índice para localizar registros rápidamente. Esto hace que los
índices sean esenciales para la optimización SQL consultas, especialmente cuando se trabaja con
grandes conjuntos de datos.
Se crea un índice utilizando el CREATE INDEX declaración. Se puede aplicar a una sola
columna o a varias columnas. La estrategia de indexación adecuada puede mejorar drásticamente
la velocidad de las consultas.
CREATE INDEX idx_column
ON table_name (column_name);
Los índices mejoran el rendimiento, pero no siempre son necesarios. Funcionan mejor cuando:
Acelerar las consultas SELEC: Siempre que lo uses WHERE, ORDER BY, o JOIN, un
índice hace que las búsquedas sean significativamente más rápidas.
Reducción de escaneos de mesa: Sin un índice, el motor de base de datos debe verificar
cada fila para encontrar resultados coincidentes. Esto es lento para mesas grandes. Los
índices permiten búsquedas directas, lo que reduce la carga de trabajo.
Aplicando la unicidad: Un índice único garantiza que no existan valores duplicados en
una columna, lo que evita problemas de integridad de los datos. Esto se usa comúnmente
para correos electrónicos, nombres de usuario y otros identificadores únicos.
6. Selección con Índices
La selección de índices es una de las técnicas más importantes utilizadas en la
optimización de consultas. Al utilizar los índices adecuados, SQL Server puede acelerar sus
consultas y mejorar drásticamente el rendimiento de sus aplicaciones.
13
En una operación de búsqueda, SQL Server navega por todo el índice del árbol B para
encontrar rápidamente los registros requeridos sin necesidad de escanear el índice o la tabla. Esto
es similar a utilizar un índice al final de un libro para encontrar un tema rápidamente, en lugar de
leer el libro completo. Una vez encontrado el primer registro, SQL Server puede escanear el
nivel de la hoja de índice hacia adelante o hacia atrás para encontrar registros adicionales. Se
pueden utilizar operadores de igualdad y desigualdad en un predicado, incluidos =, <, >, <=,
>=, <>, !=, !<, !>, ENTRE, y EN. Por ejemplo, los siguientes predicados se pueden hacer
coincidir con una operación de búsqueda de índice si hay un índice en la columna especificada, o
un índice de varias columnas con esa columna como clave de índice principal:
ID del producto = 771
Precio unitario < 3,975
Apellido = ‘Allen’
Apellido ME GUSTA ‘Marrón%’
En el caso de un índice de varias columnas, SQL Server solo puede usar el índice para
buscar en la segunda columna si hay un predicado de igualdad en la primera columna. Entonces,
SQL Server puede usar un índice de varias columnas para buscar en ambas columnas en los
siguientes casos, suponiendo que exista un índice de varias columnas en ambas columnas en el
orden presentado:
ID de producto = 771 Y ID de pedido de venta > 34000
Apellido = ‘Smith’ Y Nombre = ‘Ian’
Dicho esto, si no hay un predicado de igualdad en la primera columna, o si el predicado
no se puede evaluar en la segunda columna, como es el caso en una expresión compleja,
entonces SQL Server solo puede usar un índice de varias columnas para buscar solo en la
primera columna, como en los siguientes ejemplos:
ID de producto = 771 Y ABS (ID de pedido de venta) = 34000
ID de producto < 771 Y ID de pedido de venta = 34000
Apellido > ‘Smith’ Y Nombre = ‘Ian’
Sin embargo, SQL Server lo es no capaz de utilizar un índice de varias columnas para
una búsqueda de índice en los siguientes ejemplos, ya que ni siquiera puede buscar en la primera
columna:
14
ABS (ID de producto) = 771 Y ID de pedido de venta = 34000
Apellido COMO ‘%Smith’ Y Nombre = ‘Ian’
3. Claves y Foreing Keys
1. Declaración de Claves Primarias
La clave primaria se utiliza para identificar en forma única cada línea en la tabla. Puede
ser parte de un registro real, o puede ser un campo artificial (uno que no tiene nada que ver con
el registro real). Una clave primaria puede consistir en uno o más campos en una tabla. Cuando
se utilizan múltiples campos como clave primaria, se los denomina claves compuestas.
Las claves primarias pueden especificarse cuando se crea la tabla (utilizando CREATE
TABLE) o cambiando la estructura existente de la tabla (utilizando ALTER TABLE).
MySQL:
CREATE TABLE Customer
(SID integer,
Last_Name varchar(30),
First_Name varchar(30),
PRIMARY KEY (SID));
2. UNIQUE
Una restricción UNIKE en SQL es una restricción de base de datos que garantiza la
unicidad de los valores en una o más columnas dentro de una tabla. Garantiza que todos los
valores en las columnas especificadas sean únicos, lo que significa que no puede haber dos filas
que tengan los mismos valores en las columnas restringidas. Intentar insertar o actualizar un
registro con un valor duplicado en las columnas restringidas generará un error, lo que evitará la
duplicación de datos.
Utilizarías una restricción ÚNICA en SQL cuando lo necesites:
Hacer cumplir la integridad de los datos: Asegúrese de que columnas específicas o
combinaciones de columnas contengan valores únicos, evitando la duplicación de datos.
15
Implementar reglas de negocio: Hacer cumplir las reglas comerciales que requieren
singularidad, como garantizar que cada dirección de correo electrónico o identificación
de empleado sea única en una base de datos.
Mejorar el rendimiento de las consultas: Optimice el rendimiento de las consultas
utilizando restricciones únicas en las columnas que se utilizan con frecuencia como
criterios de búsqueda.
Definir claves primarias: Las restricciones ÚNICAS se utilizan a menudo para definir
claves principales, que identifican de forma única cada fila de una tabla.
La sintaxis para crear una restricción ÚNICA en SQL varía ligeramente entre sistemas de bases
de datos, pero aquí hay una representación general:
CREATE TABLE table_name (
column1 data_type,
column2 data_type,
-- ...
CONSTRAINT constraint_name UNIQUE (column1, column2)
);
3. Restricciones Sobre Claves
3.1Clave principal
Una tabla suele tener una columna o una combinación de columnas cuyos valores
identifican de forma única cada fila de la tabla. Estas columnas se denominan claves principales
de la tabla y exigen la integridad de entidad de la tabla. Debido a que las restricciones de clave
principal garantizan datos únicos, con frecuencia se definen en una columna de identidad.
Cuando especifica una restricción de clave principal en una tabla, Motor de base de datos exige
la unicidad de los datos mediante la creación automática de un índice único para las columnas de
clave principal. Este índice también permite un acceso rápido a los datos cuando se usa la clave
principal en las consultas. Si se define una restricción de clave principal para más de una
columna, puede haber valores duplicados dentro de la misma columna, pero cada combinación
de valores de todas las columnas de la definición de la restricción de clave principal debe ser
única.
16
3.2Clave externa
Una clave externa (FK) es una columna o combinación de columnas que se usa para
establecer y aplicar un vínculo entre los datos de dos tablas a fin de controlar los datos que se
pueden almacenar una tabla de clave externa. En una referencia de clave externa, se crea un
vínculo entre dos tablas cuando las columnas de una de ellas hacen referencia a las columnas de
la otra que contienen el valor de clave principal. Esta columna se convierte en una clave externa
para la segunda tabla.
4. Declaración de Retracciones de Integridad Referencial
Una restricción de integridad referencial de Entity Data Model (EDM) es similar a una
restricción de integridad referencial de una base de datos relacional. Del mismo modo que una
columna (o columnas) de una tabla de base de datos puede hacer referencia a la clave principal
de otra tabla, una propiedad (o propiedades) de un tipo de entidad puede hacer referencia a la
clave de entidad de otro tipo de entidad. El tipo de entidad al que se hace referencia se denomina
extremo principal de la restricción. El tipo de entidad que hace referencia al extremo principal se
denomina extremo dependiente de la restricción.
Una restricción de integridad referencial se define como parte de una asociación entre dos
tipos de entidad. La definición para una restricción de integridad referencial especifica la
siguiente información:
El extremo principal de la restricción. Es un tipo de entidad a cuya clave de entidad
hace referencia el extremo dependiente.
La clave de entidad del extremo principal.
El extremo dependiente de la restricción. Es un tipo de entidad que tiene una o varias
propiedades que hacen referencia a la clave de entidad del extremo principal.
La propiedad o propiedades que hacen la referencia del extremo dependiente.
5. Mantenimiento de Integridad Referencial
Además de las consideraciones de eficiencia y rendimiento, el trabajo del DBMS es
mantener varias formas de integridad de los datos que se refiere al tipo de datos almacenados en
17
una columna y cualquier restricción que pueda aplicarse, como un rango restringido de valores.
Integridad de la entidad es el requisito de poder identificar de forma única cada entidad
individual, lo que se traduce en necesidad de claves primarias. Integridad referencial es el
requisito de que el valor de cualquier campo clave externo debe identificarse un registro único en
la tabla principal relacionada. El conjunto de valores clave principales en la tabla principal define
el dominio de la columna de clave externa en la tabla secundaria.
Si un valor de clave externa no tiene una clave principal coincidente en la tabla principal,
los datos son inconsistentes. La existencia de Un valor de clave externa sugiere que existe una
relación, pero si no se puede encontrar el registro relacionado, se puede encontrar información
vital Es posible que falte información sobre el registro del niño.
Puede haber razones genuinas para eliminar un registro principal de la base de datos. Si
surge esa situación, allí Son esencialmente dos opciones:
Insista en que el usuario elimine cualquier registro secundario relacionado antes de
intentar eliminar el registro principal
Elimine automáticamente cualquier registro secundario relacionado cuando se elimine el
registro principal.
El primer caso suele ser el predeterminado y en esa situación un intento de eliminar el
registro principal daría como resultado un error mensaje si existen registros infantiles
relacionados. Sin embargo, un diseñador de aplicaciones puede decidir gestionar la
eliminación de niños registros con código de aplicación que revisa explícitamente
cualquier registro relacionado y aplica las condiciones apropiadas para determinar si
eliminarlos o no automáticamente. Esto permite situaciones complejas y registros
detallados manejo en comparación con la incorporación de este comportamiento en la
definición de la base de datos.
La eliminación automática de registros secundarios se conoce como operación de
eliminación en cascada. Como parte de la definición de la base de datos, El comportamiento en
cascada se puede especificar en la declaración CREATE TABLE
18
6. CHEQUEO DIFERIDO DE RESTRICCIONES
Las restricciones CHECK exigen la integridad del dominio mediante la limitación de los
valores que puede aceptar una columna. Son similares a las restricciones FOREIGN KEY porque
controlan los valores que se colocan en una columna. La diferencia reside en la forma en que
determinan qué valores son válidos: las restricciones FOREIGN KEY obtienen la lista de valores
válidos de otra tabla, mientras que las restricciones CHECK determinan los valores válidos a
partir de una expresión lógica que no se basa en datos de otra columna. Por ejemplo, es posible
limitar el intervalo de valores para una columna salary creando una restricción CHECK que sólo
permita datos entre 15.000 y 100.000 dólares. De este modo se impide que se escriban salarios
superiores al intervalo de salario normal
19
Conclusión
Al final del día, SQL sigue siendo ese viejo conocido que nunca pasa de moda. Puede que hayan surgido
nuevas formas de manejar datos (como las bases NoSQL), pero cuando hablamos de organización,
seguridad y relaciones entre información, las bases relacionales y su lenguaje estrella siguen siendo la
opción más confiable. Este documento te ha mostrado por qué: desde su diseño pensado para hablar
directamente con los datos hasta su capacidad para crecer contigo, manejando desde proyectos
pequeños hasta sistemas masivos sin perder el ritmo.
Lo más valioso que llevas después de leer esto es entender que SQL no es solo escribir consultas. Es
saber diseñar buenas estructuras desde el principio: elegir el tipo de dato correcto (nada de usar TEXT
en pleno 2023), definir llaves primarias que identifiquen registros como huellas dactilares, y crear
relaciones entre tablas con llaves foráneas que eviten inconsistencias. Todo eso, al final, te ahorra horas
de debugging y dolores de cabeza. Porque sí, un esquema bien hecho es como los cimientos de una
casa: si están torcidos, todo lo demás se tambalea.
Y no subestimes el poder de los índices. Son esos aliados silenciosos que transforman una consulta lenta
en un resultado instantáneo. Pero ojo: no son varitas mágicas. Usarlos bien implica entender cuándo son
útiles (en búsquedas frecuentes o campos críticos) y cuándo pueden entorpecer (en tablas con
actualizaciones constantes). Este documento te dio las pistas para no meter la pata: desde cómo
crearlos hasta cómo el motor de bases de datos los "lee" para acelerar las búsquedas.
La seguridad y la integridad de los datos tampoco son temas menores. Cosas como las restricciones
CHECK, los valores por defecto, o el ON DELETE CASCADE (que borra en cascada registros huérfanos) no
son solo detalles técnicos. Son lo que separa una base de datos profesional de un caos donde los
números se repiten, las fechas no cuadran y los registros pierden sentido. SQL te da las herramientas
para blindar todo eso, y ya viste cómo aplicarlas.
¿Lo mejor? Todo esto funciona igual en MySQL, SQL Server, PostgreSQL… Los detalles pueden variar,
pero el corazón es el mismo. Lo que aprendiste aquí sobre cómo pensar en relaciones, optimizar
consultas o garantizar que los datos sean consistentes, te sirve en cualquier esquina del ecosistema SQL.
Incluso con los nuevos estándares (como el soporte para JSON o datos geoespaciales), la esencia sigue
intacta.
20