3. Modelo Relacional - ZornStolz/MSI_Wiki GitHub Wiki
En el Modelo Relacional el usuario percibe cada base de datos como un conjunto de tablas
Elementos
Relación
Las relaciones contienen información de los objetos representados en la base de datos. Una relación es una tabla bidimensional cuyas filas corresponden a registros individuales y las columnas son los atributos.
Cada relación en una base de datos tiene un nombre único.
Cada celda contiene un valor atómico.
Los atributos tienen nombres únicos.
Los valores de los atributos pertenecen al mismo dominio.
No hay tuplas duplicadas.
El orden de las tuplas y el orden de los atributos no tienen significado.
- Atributo: Pueden aparecer en cualquier orden en la relación. Cada columna contiene valores de un solo atributo.
- Tupla: representa un objeto único de datos implícitamente estructurados en una tabla.
Dominio
Los dominios permiten al ingeniero definir en un solo lugar el significado y fuente de los valores que los atributos pueden tomar. Esto permite que se eviten los errores cuando se quieran hacer consultas u operaciones sobre la base de datos.
Ejemplo: Tomaremos como entidad la tabla Hotel que tiene como atributos hotelNo, hotelName, city
Grado
El grado de una relación es el número de conjunto de atributos que contiene
El grado de esta tabla es 3 por la cantidad de atributos
Cardinalidad
La cardinalidad de una relación es el número de tuplas que contiene.
La cardinalidad de esta tabla es 5 que son la cantidad de tuplas existentes.
Llaves primaria
Una llave primaria es un campo o grupo de campos que identifica en forma única un registro
La llave primaria de la tabla Hotel es hotelNo
Llave Foranea
Tipos de relación (TablaA - TablaB)
-
Uno a Uno: En este tipo de relación cada llave foranea de la tabla es la llave primaria de la otra.
-
Uno a muchos: En este tipo la llave primaria de la TablaA pasa a ser la llave foranea de la TablaB.
-
Muchos a Muchos: Solo en este tipo de relación crea una nueva tabla donde su llave primaria esta compuesta por las llaves primarias de la TablaA y TablaB.
Tabla Hotel.
Tabla Room donde se puede evidenciar que depende de Hotel.
Clave foranea de Room es hotelNo.
Base de datos relacional
Una colección de relaciones normalizadas con diferentes nombres.
Reglas y restrincciones
Hasta ahora hemos visto como modelar todo nuestro diseño a una sintaxis entendible para cualquier otro diseñador, también hemos mencionado algunas peculiaridades, reglas, como estándar de nombrado. Aquí las veremos con más detalle otras reglas que hacen que el modelo sea mucho más completo.
-
La clave primaria tiene una regla de integralidad que nos dice que el valor de este atributo no puede ser
null
, es decir, no puede crearse un registro sin colocar su respectiva clave primaria. además, la clave primaria es única, no pueden existir por ningún motivo dos claves primarias iguales en una entidad. -
La clave foránea tiene una regla de entidad referencial, esta nos dicta que la clave foránea debe coincidir con la clave primaria de otra entidad. Por ejemplo, en la relación que une autor y obra, obra tendrá un atributo que será una clave foránea, esta clave referencia a una clave primaria de autor.
-
Reglas Generales estas son reglas especiales que dependiendo del problema pueden ser agregadas al dominio del problema. Estas son agregadas para limitar o condicionar el funcionamiento de algunos atributos. Estas reglas son puestas por el propio usuario y no hacen parte de las reglas por obligatoriedad mencionadas anteriormente.
Ejemplos de esto serian: para una fecha el diseñador limite fechas hasta y desde un cierto periodo de tiempo; rangos de precios para el costo de algún servicio, etc.
Transformación de elementos de un modelo conceptual en relaciones y tablas.
Partiendo de un modelo conceptual (modelo Entidad - Relación), se puede obtener un esquema relacional siguiendo las siguientes reglas.
Tomaremos como ejemplo el enunciado y modelo conceptual anterior para hacer la transformación.
Modelo conceptual del enunciado museo.
3. Entidad - Tabla
Cada entidad se representa como una tabla y sus atributos como columnas de esta.
Entidad Museo y sus atributos en modelo conceptual
Representación en modelo relacional
Museo (idMuseo, Nombre, Dirección)
Representación de la tabla con tuplas
2. Entidad débil - Tabla
Cada entidad débil se representa como una tabla, cuyas columnas serán los atributos de ésta, añadiendo una columna más para la llave primaria de la Entidad fuerte de la que depende.
Entidad débil con dependencia de la entidad Empleado
Representación de la entidad Empleado en modelo relacional
Empleado(idEmpleado, nombre, cargo, teléfono, área)
Representación de la entidad débil MiembroFamiliar en modelo relacional
MiembroFamiliar(idEmpleado, nombre, edad, teléfono)
Representación de la tabla Empleado como tupla
Representación de la tabla MiembroFamiliar como tupla
3. Relaciones 1:N - Tablas
Se crea una tabla con los atributos de la Entidad del extremo “N” como columnas y una columna del atributo principal de la Entidad del extremo “1”.
Representación relación de 1:N modelo conceptual
Representación entidad Museo modelo relacional
Museo(idMuseo, Nombre, Dirección)
Representación entidad Entrada modelo relacional
Entrada(idEntrada, costo, idMuseo)
Representación de la tabla Museo como tupla
Representación de la tabla Entrada como tupla
4. Relación N:M - Tabla
Se crea una tabla con los atributos principales de ambas Entidades como columnas y tantas columnas como atributos tenga esa relación.
Representación de relación N:M en modelo conceptual
Representación de entidad Obra en modelo relacional
Obra(idObra, nombre, antiguedad, fecha adquisición, valuación, seguro)
Representación de entidad Autor en modelo relacional
Autor(idAutor, nombre, periodo)
Representación de relación "tiene" en modelo relacional
Tiene(idAutor, idObra)
Representación de la tabla Obra en tupla
Representación de la tabla Autor en tupla
Representación de la tabla "Tiene" en tupla
5. Relación 1:1 - Clave Primaria
La clave principal de una de las entidades se propaga a la que tenga mayor cardinalidad o, sino, se escoge la opción más lógica en el caso concreto para decidir de qué Entidad será propagada su clave primaria
Representación de la relación 1:1 en modelo Conceptual
Representación de entidad Obra en modelo relacional
Obra(idObra, nombre, antiguedad, fecha adquisición, valuación, seguro)
Representación de entidad Autor en modelo relacional
Autor(idAutor, nombre, periodo, idObra)
Representación de la tabla obra en tupla
Representación de la tabla Autor en tupla
6. Restricciones - Dominios
Podemos fijar ciertas restricciones a la hora de realizar tuplas en tablas del modelo relacional que nos ayudaran mucho si luego necesitamos validar un tipo de dato.
Podemos definir para nuestro modelo conceptual las siguientes restricciones. Es solo un ejemplo, puede variar.
7. Modelo Relacional generado desde DataModeler para SQL
Modelo relacional de Museo
Implementando en SQL el modelo relacional
Como en el modelo relacional ya todo está transformado en tablas en SQL solo sería copiar nuestro modelo siguiendo todas las reglas anteriormente establecidas en combinación con la sintaxis de SQL. Veamos:
CREATE TABLE Autor (
idAutor NUMBER(4) NOT NULL,
nombre VARCHAR2(30),
periodo VARCHAR2(30)
);
ALTER TABLE autor ADD CONSTRAINT autor_pk PRIMARY KEY ( idautor );
Tenemos las palabras reservadas CREATE
y TABLE
como podemos intuir, estos comandos dictan la instrucción de creación de una nueva tabla, en este caso el nombre de la tabla es Autor. A continuación vemos entre paréntesis y finalizado por un ;
una seria de instrucciones, dentro podemos observar la creación de los atributos de esta entidad. Para la creación de los atributos basta con escribir primero el nombre, luego tipo de dato (este pedirá su tamaño máximo de caracteres, si aplica) por ultimo una coma ,
si se va a agregar más de un dato.
Podemos observar que el atributo idAutor
tiene un NOT NULL
esto es porque será la llave primaria, por tanto, se agrega esa condición. Como este atributo es la clave primaria hace falta un proceso más, ultima línea que podemos observar ALTER ...
pone unas restricciones del programa sobre el atributo para hacer la clave primaria.
Cualquier otra cantidad de restricciones hacia diferentes atributos seria de forma similar.
Existen muchos tipos de datos y formas de realizar las restricciones sobre los atributos, recomendamos al usuario o usuaria que las consulte en su IDE de trabajo.
En el siguiente Código podemos observar la creación de la tabla Entrada la cual sigue los mismos pasos que la anterior.
CREATE TABLE Entrada (
idEntrada NUMBER(4) NOT NULL,
telefono NUMBER(3),
museo_idMuseo NUMBER(4) NOT NULL
);
ALTER TABLE entradas ADD CONSTRAINT entradas_pk PRIMARY KEY ( identrada );
ALTER TABLE entradas
ADD CONSTRAINT entrada_museo_fk FOREIGN KEY ( museo_idmuseo )
REFERENCES museo ( idMuseo );
Como se puede ver la llave foránea a Museo esta como atributo, más abajo se le aplican las reglas para volverla foránea y posteriormente hacer que referencie a el atributo idMuseo.
Por último, con nuestras tablas creadas, SQL nos permite escribir líneas de ccódigo para insertar datos en tablas. En el ejemplo de abajo se estaría insertando una entrada válida para la tabla veamos por qué:
INSERT INTO Autor (idAutor, nombre, periodo)
VALUES ('6969', 'Leonardo da Vinci', '1452 - 1519');
Primero se debe usar el comando INSERT INTO
que creara un nuevo registro y lo pondrá en la tabla que se le diga, en este caso Autor. Entre paréntesis podemos ver que están los atributos que vamos a insertar, esto no es necesario en caso de que el registro sea completo, si ese no es el caso debemos poner entre paréntesis los datos que deseamos ingresar. después se usa la instrucción VALUES
para agregar los valores usando ' '
y comas ,
para separar los datos.
Cabe recordar que, si hemos especificado datos obligatorios, como la llave por ejemplo, y estos no están el programa de compilación arrojara un error. Tendremos errores si violamos las restricciones que hemos puesto.