Todo es una relación en el mundo SQL

En el artículo anterior, revisamos las últimas tendencias de desarrollo en el campo de las bases de datos y SQL.

En este artículo, presentaremos las características básicas de SQL y la idea de programación más importante: todo es una relación. Primero revisemos algunos conceptos básicos de bases de datos relacionales.

base de datos relacional

La base de datos relacional se refiere a una base de datos basada en un modelo relacional. El modelo relacional se compone de tres partes: estructura de datos relacionales, conjunto de operaciones relacionales y restricciones de integridad relacional.

estructura de datos

En el modelo relacional, la estructura lógica utilizada para almacenar datos se llama relación ; para los usuarios, una relación es una tabla bidimensional (Tabla).

La siguiente es una tabla de información de empleados, que es muy similar a una tabla de Excel, compuesta de filas (Fila) y columnas (Columna).

avatar

En diferentes escenarios, es posible que escuche diferentes declaraciones sobre el mismo concepto. Aquí, hemos enumerado algunos conceptos comunes en bases de datos relacionales:

  • Las relaciones , también llamadas tablas , se utilizan para representar entidades en el mundo real (Entidad) o relaciones entre entidades (Relación). Por ejemplo, los empleados, departamentos y puestos de una empresa son todas entidades, correspondientes a la tabla de información del empleado, la tabla de información del departamento y la tabla de información del puesto respectivamente; los productos vendidos y los pedidos son todas entidades, y existe una conexión entre ellos, correspondiente a la lista de pedidos. .
  • Las filas , también conocidas como registros (registro), representan una sola entidad en una relación. La fila de datos con el trabajo número 4 en la figura anterior almacena la información relacionada de "Zhuge Liang". Una relación (tabla) puede verse como una colección de filas.
  • Una columna , también llamada campo , representa un atributo de una entidad. La segunda columna de la figura anterior contiene los nombres de los empleados. Cada columna de la tabla tiene un tipo de datos correspondiente. Los tipos de datos comunes incluyen el tipo de carácter, el tipo de número, el tipo de fecha y hora, etc.

Con la estructura relacional, necesita definir operaciones de datos basadas en relaciones.

Conjunto de operaciones

Las operaciones de datos comunes incluyen agregar (Crear), consultar (Recuperar), actualizar (Actualizar) y eliminar (Eliminar), o denominadas colectivamente agregar, eliminar, modificar y verificar (CRUD).

Entre ellos, la operación más utilizada y más compleja es la consulta, específicamente incluyendo selección (Selección), proyección (Proyección), unión (Unión), intersección (Intersección), diferencia (excepción) y producto cartesiano (cartesiano) producto) y así sucesivamente. Introduciremos cómo utilizar sentencias SQL para completar las distintas operaciones de datos anteriores.

Para mantener la integridad de los datos o cumplir con los requisitos comerciales, el modelo relacional también define las restricciones de integridad.

Restricciones de integridad

Se definen tres restricciones de integridad en el modelo relacional: integridad de la entidad , integridad referencial e integridad definida por el usuario .

  • La integridad de la entidad significa que el campo de clave principal de la tabla no puede estar vacío. En realidad, cada entidad es única. Por ejemplo, todo el mundo tiene un número de identificación único; en las bases de datos relacionales, este campo que identifica de forma única cada fila de datos se denomina clave principal y el campo de clave principal no puede estar vacío. Cada tabla puede tener exactamente una clave primaria.
  • La integridad referencial se refiere a la integridad de las referencias de claves externas. La clave externa (Clave externa) representa la relación entre las dos tablas, por ejemplo, los empleados pertenecen a un determinado departamento; por lo tanto, hay un campo de número de departamento en la tabla de empleados, que se refiere al campo de número de departamento en la tabla de departamento. Para las referencias de clave externa, los datos referenciados deben existir y los empleados no pueden pertenecer a un departamento inexistente; antes de eliminar un departamento, los empleados del departamento también deben tratarse en consecuencia.
  • La integridad definida por el usuario se refiere a las restricciones que se personalizan en función de las necesidades comerciales. La restricción NOT NULL asegura que el campo correspondiente no tendrá un valor nulo, por ejemplo, el empleado debe tener un nombre; la restricción única (UNIQUE) se usa para asegurar que el valor en el campo no se repetirá y la dirección de correo electrónico de cada empleado debe ser única; Las restricciones de comprobación (CHECK) pueden definir más reglas comerciales. Por ejemplo, el salario debe ser mayor que 0, los caracteres deben estar en mayúsculas, etc .; el valor predeterminado (DEFAULT) se utiliza para insertar datos predeterminados en el campo.

Las cuatro bases de datos involucradas en esta columna admiten estas restricciones de integridad de la siguiente manera:

base de datos Restricción no vacía Restricción única Restricción de clave primaria Restricción de clave externa Comprobar restricción Defaults
Oráculo colocarse colocarse colocarse colocarse colocarse colocarse
MySQL colocarse colocarse colocarse Soporte * colocarse* colocarse
servidor SQL colocarse colocarse colocarse colocarse colocarse colocarse
PostgreSQL colocarse colocarse colocarse colocarse colocarse colocarse

* Solo el motor de almacenamiento InnoDB en MySQL admite restricciones de clave externa; MySQL 8.0.16 agrega soporte para restricciones de verificación.

Storage Engine (Storage Engine) es un componente que se utiliza para administrar, acceder y modificar datos físicos en MySQL. Los diferentes motores de almacenamiento proporcionan diferentes funciones y características. A partir de MySQL 5.5, el motor de almacenamiento InnoDB se utiliza de forma predeterminada, que admite procesamiento de transacciones (ACID), bloqueo de nivel de fila, recuperación de fallas, control de concurrencia de múltiples versiones (MVCC) y restricciones de clave externa.

Las bases de datos relacionales utilizan SQL como lenguaje estándar para acceder y manipular datos. Ahora, experimentemos intuitivamente las características de las declaraciones SQL.

SQL: un lenguaje de programación orientado a conjuntos

Habrá varios ejemplos en esta sección. Aún no hemos comenzado formalmente a aprender declaraciones SQL, por lo que podemos ignorar los detalles por ahora.

Características gramaticales

SQL es un lenguaje de programación declarativo con una sintaxis cercana al lenguaje natural (inglés). A través de unas simples palabras en inglés, como SELECT, INSERT, UPDATE, CREATE, DROP, etc., para completar la mayoría de las operaciones de la base de datos. El siguiente es un ejemplo de consulta simple:

SELECT emp_id, emp_name, salary
  FROM employee
 WHERE salary > 10000
 ORDER BY emp_id;

Incluso si no ha aprendido las declaraciones SQL, siempre que sepa el significado de algunas palabras, puede comprender el papel de la declaración. Consulta a los empleados cuyo salario mensual (salario) es mayor que 10000 en la tabla de empleados (empleado), devuelve el número de trabajo, el nombre y el salario mensual y los clasifica por número de trabajo. Como puede ver, la declaración SQL es muy simple e intuitiva.

SELECT, FROM, etc.en la consulta anterior se denominan palabras clave (también llamadas cláusulas) y generalmente se escriben en mayúscula; los nombres de las tablas, los nombres de las columnas, etc. generalmente están en minúsculas; los puntos y comas (;) indican el final de la declaración. Las sentencias SQL no distinguen entre mayúsculas y minúsculas, pero seguir ciertas reglas puede facilitar la lectura del código.

SQL es un lenguaje declarativo La idea principal de un lenguaje declarativo es decirle a la computadora lo que quiere (qué), pero no cómo hacerlo. Estos lenguajes también incluyen HTML, expresiones regulares y programación funcional.

Orientado a la colección

Para las sentencias SQL, el objeto sobre el que opera es una colección (tabla) y el resultado de la operación también es una colección (tabla). Por ejemplo, la siguiente consulta:

SELECT emp_id, emp_name, salary
  FROM employee;

Entre ellos, empleado es una tabla, que es el objeto de la consulta; al mismo tiempo, el resultado de la consulta también es una tabla. Entonces, podemos continuar expandiendo la consulta:

SELECT emp_id, emp_name, salary
  FROM (
       SELECT emp_id, emp_name, salary
         FROM employee
       ) dt;

Usamos el resultado de la consulta entre paréntesis (llamado dt) como valor de entrada y lo pasamos a la consulta externa; el resultado final de toda la declaración sigue siendo una tabla. En la Parte 17, presentaremos este tipo de consulta anidada en otras declaraciones es una subconsulta (Subconsulta).

Las consultas en SQL pueden completar varias operaciones de datos, como filtrar y transformar, agrupar y resumir, ordenar y mostrar; pero son esencialmente operaciones de tabla y el resultado también es una tabla.

avatar

No solo las sentencias de consulta, sino también las inserciones, actualizaciones y eliminaciones en SQL usan colecciones como objetos de operación. Veamos un ejemplo de inserción de datos:

CREATE TABLE t(id INTEGER);

-- 适用于 MySQL、SQL Server 以及 PostgreSQL
INSERT INTO t(id)
VALUES (1), (2), (3);

Primero creamos una tabla usando la instrucción CREATE TABLE, y luego usamos la instrucción INSERT INTO para insertar datos. Antes de realizar la operación de inserción, se crea una colección temporal (tabla) que contiene 3 piezas de datos en la memoria y luego la colección se inserta en la tabla de destino. Dado que normalmente insertamos un dato a la vez, pensamos que se inserta de acuerdo con la fila de datos; de hecho, un dato también es una colección, pero tiene un solo elemento.

Oracle no admite la sintaxis anterior para insertar varias filas de datos, puede utilizar la siguiente declaración de inserción:

-- 适用于 Oracle
INSERT INTO t(id)
SELECT 1 FROM DUAL
 UNION ALL
SELECT 2 FROM DUAL
 UNION ALL
SELECT 3 FROM DUAL;

UNION ALL es una operación de unión en SQL, que se utiliza para formar dos conjuntos en un conjunto más grande. Además, SQL también admite operaciones de intersección (INTERSECT), operaciones de diferencia (EXCEPT) y producto cartesiano (producto cartesiano). Los presentaremos en el Capítulo 18. Son todas operaciones que utilizan colecciones como objetos.

Hemos introducido las ideas de programación declarativa y orientada a conjuntos del lenguaje SQL. Antes de aprender formalmente a escribir sentencias SQL, se necesita algún trabajo preparatorio, principalmente para instalar una base de datos de muestra.

Base de datos de muestra

En el proceso de aprendizaje de esta columna, utilizamos principalmente un modelo de datos de empresa ficticio. La base de datos de muestra contiene 3 tablas: tabla de empleado (empleado), tabla de departamento (departamento) y tabla de posición (trabajo). El siguiente es su diagrama de estructura, también conocido como diagrama de entidad-relación:

avatar

  • La tabla de departamento (departamento) contiene los campos de identificación de departamento y nombre de departamento . La clave principal es el número de departamento. La tabla tiene un total de 6 datos.
  • La tabla de trabajos (trabajo) contiene campos para la identificación del trabajo y el título del trabajo . La clave principal es el número del trabajo. La tabla tiene un total de 10 datos.
  • La tabla de empleados (empleado) contiene campos como el número de empleado (emp id) y el nombre del empleado (nombre de emp ), la clave principal es el número de empleado, el campo de identificación de departamento es una clave externa que se refiere a la tabla de departamento y el campo de identificación de trabajo Es una clave externa que se refiere a la tabla de posiciones, y el campo de número de gerente (gerente) es una clave externa que se refiere a la tabla de empleados en sí. La tabla tiene un total de 25 datos.

Le proporcionamos tablas de muestra y scripts de creación de datos iniciales e instrucciones de instalación en GitHub, que admiten Oracle, MySQL, SQL Server y PostgreSQL. Haga clic en el enlace para descargar.

Antes de ejecutar estos scripts, debe instalar el software de la base de datos. Hay muchos tutoriales de instalación en Internet como referencia; si no puede instalar la base de datos, también puede usar este entorno de desarrollo SQL en línea gratuito: http://sqlfiddle.com , que proporciona varios servicios comunes de bases de datos relacionales. La siguiente figura es el resultado de ejecutar el script de muestra usando MySQL:

avatar

Después de seleccionar la base de datos, copie los scripts para crear tablas e insertar datos en la ventana izquierda, haga clic en "Construir esquema" para inicializar; haga clic en "Explorador" para ver la estructura de la tabla; ingrese declaraciones SQL en la ventana derecha, haga clic en "Ejecutar SQL" para ejecutar y ver resultado. La base de datos proporcionada por esta herramienta no es la última versión, pero puede ejecutar la mayoría de los ejemplos.

Todos los ejemplos de esta columna se han verificado en las siguientes versiones de la base de datos:

  • Base de datos Oracle 18c
  • MySQL 8.0
  • SQL Server 2017
  • PostgreSQL 12

Usamos la herramienta de desarrollo DBeaver para escribir todas las declaraciones SQL. Para la instalación y uso de la herramienta, consulte la publicación de mi blog . Por supuesto, también puede utilizar sus herramientas de desarrollo favoritas.

resumen

Una estructura de datos simple se define en el modelo relacional, es decir, una relación (tabla), que se utiliza para almacenar datos. SQL es un lenguaje estándar general para bases de datos relacionales. Utiliza una gramática cercana al lenguaje natural (inglés) para realizar la definición de datos, la manipulación de datos y el control de acceso de manera declarativa. Para SQL, todo es una relación (tabla).

referencias

  • [América] Abraham Silberschatz, Henry F. Korth, S.Sudarshan, Yang Dongqing, Li Hongyan, traducción de Tang Shiwei, "Concepto de sistema de base de datos (libro original 6ª edición)", Machinery Industry Press, 2012

Supongo que te gusta

Origin blog.csdn.net/horses/article/details/108729117
Recomendado
Clasificación