# data[].attributes.body
Una tabla está en 3FN si además de estar en 2FN no existe ninguna dependencia transitiva entre los atributos que no son clave.

Vamos a explicarlo. Como dijo Bill Kent, «todo atributo no clave debe proporcionar información sobre la clave, sobre toda la clave y nada más que la clave… con la ayuda de Codd».

Bueno, en serio, supongamos que tenemos una tabla de ganadores de torneos de tenis. En ella figura el nombre del torneo, el año, el nombre del ganador y su nacionalidad. La clave sería Torneo-Año. Pues esta tabla no está en 3FN porque el atributo nacionalidad, que no es de la clave, depende del nombre del ganador (también depende de la clave). Digamos que nacionalidad aporta información sobre el ganador, pero no sobre la clave. Es una dependencia transitiva porque nacionalidad depende de ganador que a su vez depende de Torneo-Año.

# data[].attributes.body
Una tabla está en 2FN si además de estar en 1FN cumple que los atributos no clave depende de TODA la clave principal.

Por ejemplo, si tenemos una tabla con Personas, identificadas por su NIF y recogemos su empresa y dirección de trabajo, la clave sería NIF-Empresa. Pero nos encontraremos con que una misma persona puede trabajar en varias empresas. Y vemos que la dirección de trabajo no depende de TODA la clave primaria, sino solo de la empresa. Por lo tanto, no estamos en 2FN.

# data[].attributes.body
Una tabla está en Primera Forma Normal si

Todos los atributos son «atómicos». Por ejemplo, en el campo teléfono no tenemos varios teléfonos.

La tabla contiene una clave primaria única. Por ejemplo el NIF para personas, la matrícula para vehículos o un simple id autoincrementar. Si no tiene clave, no es 1FN.

La clave primaria no contiene atributos nulos. No podemos tener filas para las que no haya clave (por ejemplo, personas sin NIF o vehículos sin matrícula).

No debe existir variación en el número de columnas. Si algunas filas tienen 8 columnas y otras 3, pues no estamos en 1FN.

Los campos no clave deben identificarse por la clave. Es decir, que los campos no clave dependen funcionalmente de la clave. Esto es prácticamente lo mismo que decir que existe clave primaria.

Debe Existir una independencia del orden tanto de las filas como de las columnas, es decir, si los datos cambian de orden no deben cambiar sus significados. Por ejemplo, si en la columna 1 tenemos el primer apellido y en la columna 2 tenemos el segundo, pues no estamos en 1FN. Igualmente si en la tercera fila tenemos el tercer mejor expediente y en la quinta fila el quinto, no estamos en 1FN.

# data[].attributes.body
Las formas normales son conjuntos de criterios que utilizamos para «normalizar» (es decir, mejorar la estructura) de las bases de datos.

Vamos a repasar las tres primeras formas normales.

# data[].attributes.headline
Normalización de Base de Datos Relacional

# data[].attributes.subject
Normalización de Base de Datos Relacional

# data[].attributes.body
Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando:

DELETE FROM personas
WHERE nombre = 'LUIS'
AND apellido1 = 'LOPEZ'
AND apellido2 = 'PEREZ'

La tabla 'personas' resultante será

# data[].attributes.body
La sentencia DELETE sirve para borrar filas de una tabla.

La sintaxis de SQL DELETE es:

DELETE FROM nombre_tabla
WHERE nombre_columna = valor}

Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:

DELETE * FROM nombre_tabla;

Ejemplo de SQL DELETE para borrar una fila de la tabla personas

# data[].attributes.body
Si queremos cambiar el apellido2 'BENITO' por 'RODRIGUEZ' ejecutaremos:

UPDATE personas
SET apellido2 = 'RODRIGUEZ'
WHERE nombre = 'ANTONIO'
AND apellido1 = 'GARCIA'
AND apellido2 = 'BENITO'

Ahora la tabla 'personas' quedará así como la imagen

# data[].attributes.body
La sentencia UPDATE se utiliza para modificar valores en una tabla.

La sintaxis de SQL UPDATE es:

UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3

La cláusula SET establece los nuevos valores para las columnas indicadas.

La cláusula WHERE sirve para seleccionar las filas que queremos modificar.

Ojo: Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas las filas de la tabla.

# data[].attributes.body
Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con cualquiera de las dos sentencias siguientes:

INSERT INTO personas
VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')
INSERT INTO personas (nombre, apellido1, apellido2)
VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')

Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla personas, quedando así dicha tabla

# data[].attributes.body
La sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla.

Es posible insertar una nueva fila en una tabla de dos formas distintas

# data[].attributes.body
La sentencia Select es una sentencia SQL que pertenece al grupo DML (Data Manipulation Language) la cual nos permite recuperar información de una o más tablas en la base de datos, dependiendo de las condiciones que especifiquemos nos arrojará diferentes resultados.

# data[].attributes.body
Las sentencias DML se utilizan para controlar la información contenida en la base de datos. Las listas siguientes ofrecen ejemplos de estos tipos de sentencias DML:

Adición de registros a una tabla (mandato INSERT)

Modificación de la información de una tabla (mandato UPDATE)

Eliminación de registros de una tabla (mandato DELETE)

# data[].attributes.body
TABLE: Palabra clave opcional.

table_name

Una tabla temporal o persistente. Solo el propietario de la tabla o un superusuario puede truncarla.

Puede truncar cualquier tabla, incluidas las tablas a las que se hace referencia en limitaciones de clave externa.

No es necesario limpiar una tabla después de truncarla

# data[].attributes.body
Elimina todas las filas de una tabla sin realizar un análisis de la tabla: esta operación es una alternativa más rápida a una operación DELETE no calificada. Para ejecutar un comando TRUNCATE debe ser el propietario de la tabla o un super usuario.

# data[].attributes.body
Su utilidad es eliminar objetos como bases de datos, tablas, índices, usuarios, vistas, etc…

DROP DATABASE pcsolucion;    –> Elimina la base de datos llamada pcsolucion.

DROP TABLE redactores;    –> Elimina una tabla llamada redactores.

DROP INDEX indicejefes  ON redactores;   –> Elimina el índice llamado indicejefes de la tabla redactores.

# data[].attributes.body
Borrado de una tabla (estructura y datos)

Drop table nombre_tabla [CASCADE CONSTRAINT];

Al borrar una tabla, se borra tanto su estructura como sus datos, sus índices asociados y los privilegios concedidos sobre estas también se borran, las vistas creadas directa o indirectamente sobre esta tabla son desactivadas de forma automática por ORACLE pero no borradas.

Borrado de los registros de una tabla

Con la orden TRUNCATE se eliminan todas las filas de una tabla y se puede liberar espacio utilizado por esta tabla. Es una orden del lenguaje DDL y por tanto no se puede anular. Tampoco activa disparadores DELETE por lo que es más rápido que una orden DELETE. Su sintaxis es:

Truncate table nombre_table [{DROP | REUSE} STORAGE]

# data[].attributes.body
Para modificar la estructura de una tabla se utiliza el comando ALTER TABLE.

Añadir o modificar columnas ( nombre, tipo, valor por defecto, restricción NOT NULL)

alter table nombre_table {ADD | MODIFY} ( columna tipo [restricción,..])

Eliminación de columnas

alter table nombre_table DROP COLUMN nombre_columna

Añadir restricción de tabla

alter table nombre_tabla ADD CONSTRAINT nombre_restricción restricción

Eliminar una restricción.

alter table nombre_table DROP CONSTRAINT nombre_restricción

Activación y desactivación de una restricción.

alter table nombre_table [ENABLE VALIDATE|ENABLE NOVALIDATE|DISABLE] nombre_restricción

# data[].attributes.body
Restricciones sobre la tabla

# data[].attributes.body
Restricciones sobre columnas

# data[].attributes.body
CREATE sirve para crear objetos de la base de datos, entre estos objetos tenemos tablas, vistas etc.

Descripción de la estructura de una tabla

DESCRIBE nombre_tabla;

# data[].attributes.body
Creación de tablas (mandato CREATE).

Modificación de la estructura de una tabla (mandato ALTER) sin suprimirla y volver a crearla, como añadir columnas, eliminar columnas o cambiar definiciones de columna (por ejemplo, longitud o los valores predeterminados).

Eliminación de objetos (como tablas) de la base de datos (mandato DROP).

Particionado de tablas (mandato PARTITION).

# data[].attributes.body
Las sentencias SQL se dividen en dos categorías: lenguaje de definición de datos (DDL) y lenguaje de manipulación de datos (DML). Las sentencias DDL se utilizan para describir una base de datos, para definir su estructura, para crear sus objetos y para crear los sub objetos de la tabla.

# data[].attributes.body
DLL (Data Definition Language) que permiten crear y definir nuevas bases de datos, campos e índices.

DML (Data Manipulation Language) que permiten llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.

DCL (Data Control Language) que se encargan de definir las permisos sobre los datos.

# data[].attributes.body
El lenguaje de tipo SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales y permite así una gran variedad de operaciones.  Es uno de los éxitos de las bases relacionales.

El lenguaje SQL está compuesto por: comandos, cláusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

# data[].attributes.headline
Pasos para diseñar un modelo entidad/relación

# data[].attributes.subject
Pasos para diseñar un modelo entidad/relación

# data[].attributes.body
Dada una situación del mundo real para la cual queremos establecer un modelo Entidad/Relación que se ajuste a los requerimientos del problema, deberemos seguir los siguientes pasos:

1. Se parte de una descripción textual del problema o sistema de información a automatizar (los requisitos).

2. Se hace una lista de los sustantivos y verbos que aparecen.

3. Los sustantivos son posibles entidades o atributos.

4. Los verbos son posibles relaciones.

5. Analizando las frases se determina la cardinalidad de las relaciones y otros detalles.

6. Se elabora el diagrama (o diagramas) entidad-relación.

7. Se completa el modelo con listas de atributos y una descripción de otras restricciones que no se pueden reflejar en el diagrama.

# data[].attributes.headline
¿Cuáles son los pasos para crear un modelo entidad - relación?

# data[].attributes.subject
¿Cuáles son los pasos para crear un modelo entidad - relación?

# data[].attributes.body
Una de las cosas más importantes a la hora de establecer el modelo E/R que mejor se adapta a una situación del mundo real es establecer correctamente cada uno de sus elementos: las entidades, sus atributos, las relaciones que existen entre las entidades, la clave principal, las restricciones, etc.
Aunque no existe un método propiamente dicho podemos seguir una serie de pasos que nos ayudarán a establecer nuestro diagrama E/R.

# data[].attributes.body
Existen dos formas para la construcción de modelos relacionales:

Creando un conjunto de tablas iniciales y aplicando operaciones de normalización hasta conseguir el esquema más óptimo,

O, convertir el modelo entidad relación (ER) en tablas, con una depuración lógica y la aplicación de restricciones de integridad.

# data[].attributes.body
El Modelo Relacional se ocupa de:

La estructura de datos

La manipulación de datos

La integridad de los datos

Donde las relaciones están formadas por :

Atributos (columnas)

Tuplas (Conjunto de filas)

# data[].attributes.headline
¿Qué es el modelo relacional en base de datos?

# data[].attributes.subject
¿Qué es el modelo relacional en base de datos?

# data[].attributes.body
Es el modelo más utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente.

El modelo relacional desarrolla un esquema de base de datos (data base schema) a partir del cual se podrá realizar el modelo físico o de implementación en el DBMS.

Este modelo esta basado en que todos los datos están almacenados en tablas (entidades/relaciones) y cada una de estas es un conjunto de datos, por tanto una base de datos es un conjunto de relaciones. La agrupación se origina en la tabla: tabla -> fila (tupla) -> campo (atributo)

# data[].attributes.body
Se define una base de datos como una serie de datos organizados y relacionados entre sí, los cuales son recolectados y explotados por los sistemas de información de una empresa o negocio en particular.

# data[].attributes.body
Independencia lógica y física de los datos.

Redundancia mínima.

Acceso concurrente por parte de múltiples usuarios.

Integridad de los datos.

Consultas complejas optimizadas.

Seguridad de acceso y auditoría.

Respaldo y recuperación.

Acceso a través de lenguajes de programación estándar.

# data[].attributes.body
Las bases de datos relacionales se basan en la organización de la información en partes pequeñas que se integran mediante identificadores; a diferencia de las bases de datos no relacionales que, como su nombre lo indica, no tienen un identificador que sirva para relacionar dos o más conjuntos de datos.

# data[].attributes.body
Las bases de datos no relacionales (NoSQL) son las que, a diferencia de las relacionales, no tienen un identificador que sirva de relación entre un conjunto de datos y otros. Como veremos, la información se organiza normalmente mediante documentos y es muy útil cuando no tenemos un esquema exacto de lo que se va a almacenar.

# data[].attributes.body
Un sistema gestor de bases de datos (SGBD) es un software constituido por una serie de programas dirigidos a crear, gestionar y administrar la información que se encuentra en la base de datos. Su principal objetivo es servir de interfaz entre los usuarios y las aplicaciones para facilitar la organización de los datos, garantizar su accesibilidad, calidad e integridad, brindando a su vez una manera eficaz de administrar esa información.

El lenguaje de manipulación, un lenguaje de definición de datos y un lenguaje de consulta son los tres componentes de un gestor de base de datos; por lo que puede trabajar a diferentes niveles, pero es invisible para el usuario final.

# data[].attributes.body
Definición de los datos: Permite definir todos los objetos de la base de datos partiendo de definiciones en versión fuente, de manera que se pueden almacenar según su tipo o estructura.

Manipulación de los datos: Responde a las solicitudes del usuario para realizar operaciones de eliminación, actualización y extracción de datos, pero gracias a su independencia también permite modificar el esquema físico o lógico de la base de datos sin realizar cambios en las aplicaciones que la utilizan.

# data[].attributes.body
IMS de IBM (jerárquico)

# data[].attributes.body
Microsoft Access (relacional)

# data[].attributes.body
MongoDB es una base de datos de documentos que ofrece una gran escalabilidad y flexibilidad, y un modelo de consultas e indexación avanzado.

# data[].attributes.body
MySQL es el sistema de gestión de bases de datos relacional más extendido en la actualidad al estar basada en código abierto. Desarrollado originalmente por MySQL AB, fue adquirida por Sun MicroSystems en 2008 y esta su vez comprada por Oracle Corporation en 2010, la cual ya era dueña de un motor propio InnoDB para MySQL.

MySQL es un sistema de gestión de bases de datos que cuenta con una doble licencia. Por una parte es de código abierto, pero por otra, cuenta con una versión comercial gestionada por la compañía Oracle.

# data[].attributes.body
MongoDB (orientado a documentos)

# data[].attributes.body
Descritas las principales características de MySQL es fácil ver sus ventajas. MySQL es una opción razonable para ser usado en ámbito empresarial. Al estar basado en código abierto permite a pequeñas empresas y desarrolladores disponer de una solución fiable y estandarizada para sus aplicaciones. Por ejemplo, si se cuenta con un listado de clientes, una tienda online con un catálogo de productos o incluso una gran selección de contenidos multimedia disponible, MySQL ayuda a gestionarlo todo debida y ordenadamente

# data[].attributes.body
Desarrollo fácil

El modelo de documentos de MongoDB resulta muy fácil de aprender y usar, y proporciona a los desarrolladores todas las funcionalidades que necesitan para satisfacer los requisitos más complejos a cualquier escala. Se proporcionan drivers para más de diez lenguajes, y la comunidad ha desarrollado varias decenas más.

# data[].attributes.body
MongoDB almacena datos en documentos flexibles similares a JSON, por lo que los campos pueden variar entre documentos y la estructura de datos puede cambiarse con el tiempo

El modelo de documento se asigna a los objetos en el código de su aplicación para facilitar el trabajo con los datos

Las consultas ad hoc, la indexación y la agregación en tiempo real ofrecen maneras potentes de acceder a los datos y analizarlos

MongoDB es una base de datos distribuida en su núcleo, por lo que la alta disponibilidad, la escalabilidad horizontal y la distribución geográfica están integradas y son fáciles de usar

MongoDB es de uso gratuito. Las versiones lanzadas antes del 16 de octubre de 2018 se publican bajo licencia AGPL. Todas las versiones posteriores al 16 de octubre de 2018, incluidos los parches lanzados para versiones anteriores, se publican bajo Licencia pública del lado del servidor (SSPL) v1.