SGBD
SGBD
Relaciones: son asociaciones entre entidades, existen distintos tipos, uno a uno (un paquete de producto para cada producto),
uno a muchos (un médico para todos) y muchos a muchos (un estudiante puede tener muchos cursos y muchos estudiantes
pueden tener un curso)
Atributos: Un atributo de una relación o de una tabla corresponde a una columna de la tabla. Los atributos están desordenados y
se referencian por nombres y no por la posición que ocupan. Esto significa que no se puede, por ejemplo, hacer referencia al
tercer atributo de una relación. Todos los valores de los atributos son atómicos y una relación que satisfaga esta condición se
llama relación normalizada. Un atributo extrae sus valores desde un dominio simple. Formalmente, un atributo es una función que
se define entre un Dominio y un determinado tipo de Entidad de la base de datos. Dicha función asocia una ocurrencia de Tipo
de Entidad con un determinado elemento del dominio.
Llaves: es un registro que se usa para identificar un registro. Cuando identifica en forma única a un registro es llamada llave
primaria, (número de pedido), la llave secundaria si no es única. A un registro. Las llaves concatenadas es una clave construida
con una combinación de conceptos de datos.
Metadatos: Los metadatos describen a los datos, el nombre la longitud y composición de cada registro y pueden contener
restricciones acerca del valor de un concepto de datos.
Diagrama Entidad-Relación
Tipos de organización de Bases
de Datos:
Visión Lógica y Física: Cada usuario
ve los datos de forma diferente, el
modelo lógico debe ser
transformado en físico, involucrado
con la manera en que son accedidos,
guardados y relacionados.
Hay 3 tipos de bases de datos
estructurados lógicamente:
a) Estructuras de datos
jerárquicas: implican que una
entidad no puede tener más de una
entidad que la posea. Esta es una estructura basándose en ramificaciones donde una entidad puede poseer varias entidades
subordinadas las cuales se semejan a las ramas de un árbol. Podemos tomar como ejemplo de base de datos jerárquica a una
organización donde tenemos como entidad principal la Vice- Presidencia de Informática donde todas sus Gerencias son
subordinadas a la Vice Presidencia y a su vez cada Departamento es subordinado pero de una gerencia en específico.
b) Estructuras de datos en red: permite a cualquier entidad tener cualquier cantidad de subordinados o superiores,
conectados con enlaces de red, alivian los problemas de las estructuras jerárquicas. Una estructura en forma de red permite
que cualquier entidad cuente con cualquier número de subordinados o superiores. Las entidades se conectan mediante el uso de
enlaces de red, los cuales son datos comunes a ambas entidades conectadas.
Esta estructura se caracteriza por el enlace común de varias entidades.
Existe estructura en red simple y compleja.
Una de las ventajas de este tipo de estructura es que en un mismo dato pueden ser utilizados por distintas entidades.
Una de sus desventajas es que puede existir redundancia en los datos existentes.
Representamos al mundo real como registros lógicos que representan a una entidad y que se relacionan entre sí por medio de
flechas.
c) Estructura de datos relacional: consiste en una o más tablas de dos dimensiones a las que se les llama relaciones, los
renglones contienen registros y las columnas atributos. Es bastante simple mantener estas tablas. Una de las ventajas las
preguntas ad hoc son manejadas eficientemente. Para que estas estructuras sean eficientes deben ser normalizadas.
Una base de datos relacional consiste en una o más tablas bidimensionales, las cuales se refieren como relaciones. Los renglones
de las tablas representan los registros y las columnas contienen los atributos. Podemos llamar también relacional a la base de
datos construida por relaciones entre dos tablas o más.
Se caracteriza por trabajarse en forma de matriz, es decir, por filas y columnas.
Entre sus ventajas tenemos que; es mas eficiente la manera de manejar consultas especificas y es más factible para el
crecimiento de la base de datos.
Representa al mundo real mediante tablas relacionadas entre sí por columnas comunes.
Componentes principales de una base de datos
Datos. Los datos son la Base de Datos propiamente dicha. La cual es ingresada ó proporcionada por los usuarios del proceso de
negocio.
Hardware. El hardware se refiere a los dispositivos de almacenamiento en donde reside la base de datos, así como a los
dispositivos periféricos (unidad de control, canales de comunicación, etc.) necesarios para su uso.
Software. Está constituido por un conjunto de programas que se conoce como Sistema Manejador de Base de Datos (DMBS:
Data Base Management System). Este sistema maneja todas las solicitudes formuladas por los usuarios a la base de datos.
Usuarios. Existen tres clases de usuarios relacionados con una Base de Datos:
El programador de aplicaciones, quien crea programas de aplicación que utilizan la base de datos.
El usuario final, quien accesa la Base de Datos por medio de un lenguaje de consulta o de programas de aplicación.
El Administrador de la Base de Datos (DBA: Data Base Administrator), quien se encarga del control general del Sistema de Base
de Datos.
Los modelos semánticos capturan un mayor significado de los datos e intentan representar la estructura real de los datos
independientemente de las características de almacenamiento, es decir ellos están orientados a las aplicaciones. Existen, hoy en
día, numerosos y muy variados modelos semánticos, entre ellos se encuentran: el modelo Entidad-Relación de P. Chen en [Che-
76], el modelo Entidad-Relación-Extendido (ERE) de Teorey et al. en [T-86] y el modelo IFO propuesto por Abiteboul en [ABI-
]. De modelos anteriores solo será tratado el segundo de ellos en detalle más adelante.
Los modelos básicos constituyen el grupo de modelos que han sido diseñados orientándose al computador, sobre ellos se han
desarrollado la mayoría de los SMBD. Ellos son: el modelo de jerárquico, el modelo redes, el modelo relacional, el modelo
orientado por objetos y el objeto-relacional. Al igual que los anteriores, ellos serán vistos en detalle en las secciones siguientes.
Modelo Entidad-Relación-Extendido(ERE)
El modelo Entidad-Relación (E-R) propuesto por P. Chen en [CHE-76] fue la primera versión del modelo ERE. Dicha primera
versión se fue modificando con el paso del tiempo debido a la necesidad de tener constructos mas adecuados para la gran
diversidad de aplicaciones que existen hoy en día en el área de las bases de datos.
Así, la proposición de P. Chen ha sido modificada y enriquecida semánticamente por otros autores. Debido al gran poder
expresivo que tiene hoy en día, este modelo es el primero en popularidad y en utilización en la etapa de diseño conceptual de
base de datos. En este modelo se emplea el enfoque de diseño de arriba-hacia-abajo y los conceptos de abstracción de datos.
El modelo ERE representa la información por medio de tres conceptos básicos: entidades, relaciones y atributos. Su principal
objetivo es producir vistas conceptuales de los datos de la aplicación. Cada vista se expresa en términos de los conceptos
básicos ilustrados en los diagramas ERE. El modelo está basado en la teoría de conjuntos y en la de las relaciones.
Entidad, según el diccionario Larousse, es "lo que constituye la esencia del ser // colectividad considerada como una unidad".
Para los efectos de las aplicaciones en base de datos
Una entidad puede ser un objeto como: una casa, una planilla, un carro, etc.; un sujeto
como una persona; o un evento o actividad como: un partido de football, un viaje, etc.
Las entidades se agrupan en conjuntos denominados conjunto entidad y se representan en los diagramas ERE como un
rectángulo con el nombre del conjunto entidad dentro. La figura II.2 muestra un ejemplo de dicha representación.
Una misma entidad puede pertenecer a varios conjuntos entidad. Por ejemplo, un médico hospitalizado pertenece a los conjuntos
entidad paciente y médico.
Una relación es una asociación entre dos o más entidades de un mismo tipo o de tipos diferentes. Las relaciones o asociaciones
también se agrupan en conjuntos, recibiendo el nombre de conjunto relación. Los conjuntos relación se representan
gráficamente por medio de un rombo que encierra el nombre asociado al conjunto relación especificado. Ejemplos de estos son:
propietario que asocia un automóvil a un empleado, dicta que asocia un profesor con una asignatura, etc. La figura II.3 ilustra el
conjunto relación propietario.
• Jerárquico y redes
• Relacional
• Orientado por objetos
• Objeto-Relacional
Conceptos básicos
Los conceptos básicos del modelo son:
Dominio:
es un conjunto de valores
Ejm: D1 = {´rojo`, ´verde`, ´negro`, ´azul`} D2 = {`ford´, ´chevrolet`, ´fiat`, ´toyota`, ´renault`}
Relación: es un subconjunto del producto cartesiano de una lista de dominios, no necesariamente disjuntos.
Ejm: R1 = {(´rojo`,`ford´), (´verde`,`ford´), (´negro`, ´chevrolet`), (´azul`, ´toyota`)}
R2 = {(´fiat`, ´verde`)}
R3 = { }
R D1 D2
´verde` ´ford`
´azul` ´fiat`
Atributo:
es la columna de una relación identificada con un nombre.
Ejm:
R color marca
´verde` ´ford`
´azul` ´fiat`
Tabla columna
• De la relación: ningún componente de un valor de los atributos que conforman la clave primaria puede ser nulo.
• De referencia: sea A la clave primaria de R1 y también un atributo foráneo de R2, entonces para toda tupla de R2
donde A nulo debe existir la tupla correspondiente en R1.
• De los valores de un atributo: son los predicados definidos por el administrador de bases de datos sobre los valores
de los atributos usando el lenguaje de definición de datos.
Ejemplo:
fechaInicio fechaFin restricciones de integridad de
fechaInscripción fechaInicio los valores de los atributos.
Semestre Código fechaInicio fechaFin fechaInscripción
dirección, dirEnvio Dirección de envío del cliente (un cliente puede Cadena(80),sub(dirección,i,1) {letras} {/,-,’}
tener varias) con i desde 1 hasta 80
Tipos de restricciones de integridad: Se tienen ocho tipos que son los siguientes:
Restricciones de dominio o integridad de dominio: Están referidas al tipo de dato del atributo o columna. El valor que se puede
asignar a una columna debe estar en el dominio especificado para dicha columna. Se permite a un dato estar marcado para
contener un valor especial definido por el diseñador de la BD (NoDefinido), no contener valor alguno o contener el valor nulo si:
Existe la posibilidad de desconocer la información (nulo aplicable)
No tiene sentido asignar un valor del dominio (nulo inaplicable)
Ejemplo: cant es de tipo Entero siempre positivo.
Restricciones de rango o integridad de columna: Se refiere al intervalo de variación de los valores del dominio del atributo y
de los tipos de datos definidos en el SMBD. Ejemplo: edad es de tipo Entero siempre positivo entre 0 y 120.
Integridad de entidad o de dependencias funcionales: Se refiere al hecho de tener un atributo que está determinado por uno
o varios atributos. Estas restricciones están aseguradas con la normalización de las tablas de la BD. Ningún componente de una
clave primaria puede contener valores nulos. Ningún componente de una clave foránea debe permitir un valor nulo por inaplicable,
aunque si puede permitir valor nulo por desconocimiento de información. Ejemplo: cedula determina edad.
Dependencias multivaluadas: Son aquellas donde uno o varios atributos multideterminan un atributo. Estas están aseguradas
con la normalización de las tablas de la BD. Ejemplo: cedulaEstudiante multidetermina deportePractica.
Dependencias de Combinación: Al igual que las anteriores, constituyen restricciones semánticas sobre los atributos de una
relación. Están relacionadas con las interrelaciones de grado superior a 2 definidas en el modelo E/R. Constituyen una
generalización, es decir, una dependencia funcional es una dependencia multivaluada y toda dependencia multivaluada es también
una dependencia de combinación, pero la inversa no siempre es cierta. Ejm.: R: {Profesor, Asignatura, Texto},
Profesor à Asignatura ó Asignatura à Texto ó Texto à Profesor
Integridad referencial: Son las dependencias de inclusión en varias tablas o de claves foráneas. Para cada clave foránea debe
existir un valor equivalente de una clave primaria y en el mismo dominio. Ejemplo: Se tienen las tablas Carro(placa, modelo,
color) y ModeloMarca(modelo, marca), en ellas observamos que el atributo modelo es clave en la tabla ModeloMarca y está
incluida en la tabla Carro, por tanto el atributo modelo es una clave foránea en la relación Carro.
Restricciones aritméticas: Son las expresiones aritméticas que deben cumplir algunos atributos de una tabla o que involucra a
varias tablas de la BD. Ejemplo: En la BD formada por las tablas siguientes:
Producto(codPro, nomPro, cantExistencia, color)
Venta(codVen, nomCli, codProVen, cantVen, fechaVen)
Compra(codCom, fechaCom, codProCom, cantCom, nomProveedor)
Para todo producto identificado con su código codPro de la tabla Producto, la cantExistencia debe ser mayor que la
cantidad vendida cantVen para el producto codProVen, ya que no se puede vender una cantidad de producto mayor que la
que se tiene en existencia.
Valores invariantes que no son posibles de expresar en el esquema: Ejemplo: Tomando la BD descrita anteriormente, se
tiene que en todo momento la cantidad comprada menos la cantidad vendida debe ser igual a la cantidad en existencia (cantCom
- cantVen = cantExistencia), para cada producto presente en la BD.
Restricciones temporales: Son aquellas aserciones que deben ser cumplidas periódicamente o en momentos específicos.
Ejemplo: En una BD de trasacciones bancarias al finalizar cada mes, el saldo de cada cuenta debe ser igual a la suma de
depósitos en la cuenta menos la suma de los retiros de la cuenta.
Normalización
La normalización es el proceso de organizar los datos en una base de datos. Incluye desde la creación de tablas y el
establecimiento de relaciones entre ellas hasta el diseño de las reglas de protección de datos y la creación de bases de datos
más flexibles gracias a la eliminación de redundancias y dependencias incoherentes.
Los datos redundantes desperdician espacio en disco y crean problemas de mantenimiento. Si es necesario cambiar datos que
aparecen en más de un sitio, el cambio deberá ser exactamente igual en todos estos sitios. Por ejemplo, un cambio de dirección
de un cliente es mucho más fácil de implementar si los datos sólo se almacenan en la tabla Clientes y en ningún otro lugar de la
base de datos.
¿Qué es una "dependencia incoherente"? Aunque para un usuario puede resultar intuitivo buscar la dirección de un determinado
cliente en la tabla Clientes, es posible que no tenga sentido buscar en esa misma tabla el sueldo del empleado que atiende a
dicho cliente. El salario del empleado está relacionado con el empleado (es decir, existe una dependencia entre ambos), por lo
que debe moverse a la tabla Empleados. Las dependencias incoherentes pueden dificultar el acceso a los datos, ya que la ruta de
acceso a los mismos puede estar rota o no encontrarse.
Existen unas cuantas reglas para la normalización de bases de datos. Cada regla se denomina "forma normal". Si se cumple la
primera regla, se dice que la base de datos está en la "primera forma normal". Si se cumplen las tres primeras reglas, se
considera que la base de datos está en la "tercera forma normal". Aunque existen otros niveles de normalización, se considera
que la tercera forma normal es el máximo nivel necesario para la mayoría de las aplicaciones.
Como sucede con muchas reglas formales y especificaciones, los escenarios del mundo real no siempre permiten cumplir a la
perfección estas reglas. En general, la normalización exige utilizar tablas adicionales y algunos usuarios consideran que es algo
molesto. Si decide no cumplir alguna de las tres primeras reglas de normalización, asegúrese de que su aplicación anticipe
cualquier posible problema, como datos redundantes y dependencias incoherentes.
Formas normales
El objetivo de las tres primeras formas normales es permitir la descomposición de relaciones sin pérdida de información, a
partir de las DFE y obtener así el esquema conceptual relacional normalizado.
• Primera forma normal (1FN): Una relación está en 1FN si todo atributo contiene un valor atómico.
Ejemplo:
• Persona(cedula, nombre, apellido, sexo, telefono, direccion)
los primeros cinco atributos son atómicos y el atributo direccion puede ser considerado atómico en aquellas
aplicaciones donde esta columna no va a ser utilizada como un atributo de búsqueda, lo que implica que la
relación Persona está en 1FN.
• Estudiante(cedula, apellido, nombre, escuela, materias, notas)
es claro que los primeros cuatro atributos son atómicos, pero también es claro que los dos últimos no lo
están, por lo tanto la relación no está en 1FN. Para convertirla a 1FN se proyecta en dos relaciones,
obteniendo:
Estudiante(cedula, apellido, nombre, escuela)
Cursa(cedula, materia, nota)
• Segunda forma normal (2FN): Una relación está en 2FN si y solo si:
1. la relación está en 1FN
2. todo atributo que no pertenece a una clave no puede depender de una parte de esa clave.
Ejemplo:
• Proveedor(codProv, codArt, dirProv, precio)
Ella está en 1FN considerando la dirección como una columna atómica, pero dadas las DFE siguientes:
(codProv, codArt) precio y codProv dirProv, ella no está en 2FN, pues hay un atributo no clave (dirProv)
que depende de una parte de la clave. Para normalizarla se proyecta en dos relaciones:
Proveedor(codProv, dirProv)
ProveeArticulos(codProv, codArt, precio)
• Carro(placa, marca, modelo, color)
está en 2FN.
La segunda forma normal permite eliminar las redundancias para que ningún atributo esté determinado por una parte de una
clave.
• Tercera forma normal (3FN): Una relación está en 3FN si y solo si:
1. la relación está en 2FN
2. todo atributo que no pertenece a la clave no depende de un atributo que no es clave.
Ejemplo:
• Carro(placa, marca, modelo, color)
está en 2FN, pero no en 3FN ya que se tiene la DFE modelo marca. Para normalizarla se proyecta en dos
relaciones:
Carro(placa, modelo, color)
ModelosDeCarros(modelo, marca)
La tercera forma normal permite asegurar la eliminación de redundancias debidas a las dependencias transitivas.
Un esquema normalizado hasta 3FN debe cumplir con el juramento siguiente:
• Forma normal de Boyce-Codd (FNBC): Una relación está en FNBC si y solo si las solas DFE son aquellas dentro de las
cuales una clave determina un atributo.
Ejemplo:
Examen(cedEst, codMat, cedProf, nota) está en 3FN
(cedEst, codMat) cedProf no está en FNBC si
cedProf codMat cada profesor dicta
(cedEst, codMat) nota una única materia
para resolver el problema se proyecta para que cumpla con la FNBC
Examen(cedEst, codMat, nota)
Dicta(codMat, cedProf)
No se preserva la DFE (cedEst, codMat) cedProf
En general, la descomposición en FNBC es sin pérdida pero NO preserva las DFE, después ellas pueden obtenerse por
reunión o producto.
• Dependencias multivaluadas (DM): Sea R(A1, A2, ..., A n) y X e Y dos subconjuntos de atributos de {A1, A2, ..., An}. Se
dice que X -» Y, si dados los valores de X hay un conjunto de valores Y asociados y este conjunto es independiente de
otros atributos Z = R – X – Y de R.
Las DM caracterizan la independencia entre Y y Z correlacionadas por X.
Las DF son un caso particular de las DM, por lo cual X Y X -» Y
• Dependencias multivaluadas elementales (DME): Una DME es una DM X -» Y de una relación R tal que:
a. Y no es vacío y es disjunto de X
b. R no contiene otra DM del tipo X’ -» Y’ tal que X’ X y Y’ Y
Ejemplo: EstMatDeporte (nroEst, codMat, deporte)
EstMatDeporte nroEst codMat Deporte
105 ‘PD10’ ‘tennis’
105 ‘PD10’ ‘natación’
145 ‘AL10’ ‘tennis’
145 ´FI20’ ´futbol`
nroEst -» codMat, nroEst-» deporte, pues un estudiante puede cursar varias materias y puede practicar varios
deportes, pero codMat es independiente de deporte y en este caso solo están correlacionados a través de nroEst.
• Cuarta forma normal (4FN): Una R está en 4FN si y solo si las solas DME son aquellas donde una clave determina un
atributo. Una R en 4FN está en 3FN y en FNBC.
Ejemplo: EstMatDeporte (nroEst, codMat, deporte) no está en 4FN, por lo que se proyecta según sus DME como:
Cursa(nroEst, codMat)
Practica(nroEst, deporte)
• Teorema de Fagin (1979): R(A, B, C) se puede descomponer sin pérdida en R1(A, B) y R2(A, C) si y solo si se cumplen
en R las DM A -» B | C. Demuestra que toda R tiene una descomposición, no siempre única, en 4FN sin pérdida de
información.
Ejemplo: Curso(nomCur, prof, texto)
Suministro #E #P #J
E1 P1 J2
E1 P2 J1
E2 P1 J1
E1 P1 J1
No está en 5FN pues #E -» #P, #P -» #J, #J -» #E, no es posible descomponerla en 2 relaciones, pero si es posible
en 3 relaciones, así:
R1 #E #P R2 #P #J R3 #E #J
E1 P1 P1 J2 E1 J2
E1 P2 P2 J1 E1 J1
E2 P1 P1 J1 E2 J1
Razones de Uso:
• Para facilitar el análisis del sistema y realizar un rápido y adecuado mantenimiento.
• Para definir, asignar y documentar un solo significado a todos los elementos de la B.D.
• Para especificar características propias de un sistema como componentes, reglas de negocio entre otros.
• Para localizar errores y omisiones en el sistema.
• Es un requisito indispensable en la entrega formal de un sistema.
Nombre Regla
RV_MESE @col BETWEEN 0 and 12
RV_SINO @col IN('S','N')
RV_NUME_RUC @col BETWEEN '00000000000' AND '99999999999'
...
DEFAULTS
Nombre Regla
DF_ANNO datepart(year,getdate())
DF_TIPO_SITU ACT'
DF_SINO_SI S'
...
2.- Tipos de Datos definidos para el sistema.
¿Qué es Unicode?
Básicamente Unicode proporciona un número único para cada carácter, sin importar la plataforma, ni el programa, ni el idioma,
permitiendo un fácil traspaso entre distintos sistemas de codificación y plataformas.
Las computadoras sólo trabajan con números. Almacenan letras y otros caracteres mediante la asignación de un número a cada
uno. Antes de que se inventara Unicode, existían cientos de sistemas de codificación distintos para asignar estos números.
Ninguna codificación específica podía contener caracteres suficientes: por ejemplo, la Unión Europea, por sí sola, necesita
varios sistemas de codificación distintos para cubrir todos sus idiomas. Incluso para un solo idioma como el inglés, no había un
único sistema de codificación que se adecuara a todas las letras, signos de puntuación y símbolos técnicos de uso común.
Además, estos sistemas de codificación presentan problemas entre ellos. Es decir, dos sistemas de codificación pueden utilizar
el mismo número para dos caracteres distintos o bien utilizar números distintos para el mismo carácter. Toda computadora
(especialmente los servidores) necesita ser compatible con muchos sistemas de codificación distintos; sin embargo, cada vez
que los datos se traspasan entre distintos sistemas de codificación o plataformas, dichos datos siempre corren el riesgo de
sufrir daños.
Unicode proporciona un número único para cada carácter, sin importar la plataforma, ni el programa, ni el idioma.
Para ello, este método utiliza dos bytes por cada carácter. Cómo referencia, en el formato ASCII clásico es suficiente un solo
byte para representar cada carácter. Esta mayor cantidad de espacio, normalmente está prevista por los programas y sistemas
operativos que soportan esta codificación, y no debería representar un problema en circunstancias normales.
sp_addtype
image smalldatetime
Se requieren comillas para delimitar los parámetros que tengan espacios o signos de puntuación incrustados. Para obtener más
información acerca de los tipos de datos disponibles, consulte Tipos de datos.
n Es un entero no negativo que indica la longitud del tipo de datos elegido.
p Es un entero no negativo que indica el número total máximo de cifras decimales que se pueden almacenar, a ambos
lados del separador decimal. Para obtener más información, consulte decimal y numeric.
s Es un entero no negativo que indica el número máximo de cifras decimales que se pueden almacenar a la derecha del
separador decimal, y tiene que ser menor que la precisión decimal o igual a esta. Para obtener más información, consulte
"decimal y numeric" en este volumen.
[@nulltype =] 'null_type'
Indica la forma en que el tipo de datos definido por el usuario trata los valores nulos. El argumento null_type es de tipo
varchar(8), su valor predeterminado es NULL y tiene que estar entre comillas simples ('NULL', 'NOT NULL' o 'NONULL'). Si
no se define explícitamente null_type en sp_addtype, se establece según el criterio predeterminado actual para valores nulos.
Utilice la función del sistema GETANSINULL para determinar el criterio predeterminado actual para los valores nulos, que se
puede ajustar mediante la instrucción SET o sp_dboption. El criterio para los valores nulos se tiene que definir explícitamente.
Nota El parámetro null_type sólo define el criterio predeterminado para los valores nulos de este tipo de datos. Si se define
explícitamente un criterio para los valores nulos cuando se utiliza este tipo de datos definido por el usuario durante la creación
de una tabla, este criterio tendrá precedencia sobre el criterio para valores nulos definido. Para obtener más información,
consulte ALTER TABLE y CREATE TABLE.
[@owner =] 'owner_name'
Especifica el propietario o el creador del nuevo tipo de datos. El argumento owner_name es de tipo sysname. Cuando no se
especifica, owner_name es el usuario actual.
Valores del código de retorno
0 (correcto) o 1 (error)
Conjuntos de resultados
Ninguna
Observaciones
Los nombres de los tipos de datos definidos por el usuario tienen que ser únicos en la base de datos, pero tipos de datos
definidos por el usuario con distintos nombres pueden tener la misma definición.
Al ejecutar sp_addtype se crea un tipo de datos definido por el usuario que se agrega a la tabla del sistema systypes de una
base de datos concreta, a menos que sp_addtype se ejecute con master como la base de datos actual. Si el tipo de datos
definido por el usuario tiene que estar disponible en todas las nuevas bases de datos definidas por el usuario, agréguelo a model.
Después de crear un tipo de datos definido por el usuario, puede utilizarse en CREATE TABLE o ALTER TABLE, así como
enlazarse a valores predeterminados y reglas.
No se pueden definir tipos de datos definidos por el usuario que utilicen los tipos de datos timestamp o table de SQL Server.
Permisos
De forma predeterminada, los permisos de ejecución corresponden a la función public.
Ejemplos
A. Crear un tipo de datos definido por el usuario que no admita valores NULL
Este ejemplo crea un tipo de datos definido por el usuario denominado ssn (número de la seguridad social) que está basado en el
tipo de datos varchar de SQL Server. El tipo de datos ssn se utiliza en columnas que almacenan números de la seguridad social
de 11 cifras (999-99-9999). La columna no puede ser NULL.
Observe que varchar(11) está entre comillas simples porque contiene signos de puntuación (paréntesis).
USE master
EXEC sp_addtype ssn, 'VARCHAR(11)', 'NOT NULL'
B. Crear un tipo de datos definido por el usuario que admita valores NULL
Este ejemplo crea un tipo de datos definido por el usuario (basado en el tipo de datos datetime) denominado birthday que
permite valores NULL.
USE master
EXEC sp_addtype birthday, datetime, 'NULL'
C. Crear tipos de datos definidos por el usuario adicionales
Este ejemplo crea dos tipos de datos definidos por el usuario adicionales, telephone y fax, para números de teléfono y fax
locales e internacionales.
USE master
EXEC sp_addtype telephone, 'varchar(24)', 'NOT NULL'
EXEC sp_addtype fax, 'varchar(24)', 'NULL'
PDRMSs usa el Lenguage Estructurado de Busqueda Structured Query Language (SQL, ahora SQL2) como el Data Definition
Language) ( Definicion de lenguage de datos) (DLL) y el Data Manipulation Language(DML).
CREATE TABLE
[ database_name.[ owner ] . | owner. ] table_name
( { < column_definition >
| column_name AS computed_column_expression
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)
[ ON { filegroup | DEFAULT } ]
[ TEXTIMAGE_ON { filegroup | DEFAULT } ]
Ejemplos
A. Utilizar restricciones PRIMARY KEY
El ejemplo siguiente muestra la definición de columna de una restricción PRIMARY KEY con un índice agrupado sobre la columna
job_id de la tabla jobs (que permite al sistema suministrar el nombre de la restricción) en la base de datos de ejemplo pubs.
job_id smallint
PRIMARY KEY CLUSTERED
Este ejemplo muestra cómo se puede suministrar un nombre para la restricción PRIMARY KEY. Esta restricción se utiliza en la
columna emp_id de la tabla employee. Esta columna se basa en un tipo de datos definido por el usuario.
emp_id empid
CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED
B. Utilizar restricciones FOREIGN KEY
Una restricción FOREIGN KEY se utiliza para hacer referencia a otra tabla. Las claves externas pueden ser claves de una única
columna o de varias columnas. El ejemplo siguiente muestra una restricción FOREIGN KEY de una única columna sobre la tabla
employee que hace referencia a la tabla jobs. Sólo se requiere la cláusula REFERENCES para una restricción FOREIGN KEY de
una única columna.
job_id smallint NOT NULL
DEFAULT 1
REFERENCES jobs(job_id)
También puede utilizar la cláusula FOREIGN KEY de forma explícita y volver a formular el atributo de columna. Observe que no
es necesario que el nombre de la columna sea el mismo en ambas tablas.
FOREIGN KEY (job_id) REFERENCES jobs(job_id)
Las restricciones de claves de varias columnas se crean como restricciones de tabla. En la base de datos pubs, la tabla sales
incluye una restricción PRIMARY KEY multicolumna. Este ejemplo muestra cómo hacer referencia a esta clave desde otra tabla;
el nombre explícito de restricción es opcional.
CONSTRAINT FK_sales_backorder FOREIGN KEY (stor_id, ord_num, title_id)
REFERENCES sales (stor_id, ord_num, title_id)
C. Utilizar restricciones UNIQUE
Las restricciones UNIQUE se utilizan para exigir la unicidad en las columnas de claves no principales. Una columna de
restricción PRIMARY KEY incluye automáticamente una restricción de unicidad; sin embargo, una restricción UNIQUE puede
aceptar valores NULL. Este ejemplo muestra una columna llamada pseudonym de la tabla authors. Exige la restricción de que los
pseudónimos de los autores sean únicos.
pseudonym varchar(30) NULL
UNIQUE NONCLUSTERED
El ejemplo siguiente muestra una restricción UNIQUE creada en las columnas stor_name y city de la tabla stores, donde
stor_id es actualmente la restricción PRIMARY KEY; no debe haber dos almacenes iguales en la misma ciudad.
CONSTRAINT U_store UNIQUE NONCLUSTERED (stor_name, city)
D Utilizar definiciones DEFAULT
Los valores predeterminados suministran un valor (con las instrucciones INSERT y UPDATE) cuando no se especifica ninguno. En
la base de datos pubs, se utilizan muchas definiciones DEFAULT para asegurar que se introducen los datos y marcadores de
posición adecuados.
En la tabla jobs, una cadena de caracteres predeterminada suministra una descripción (columna job_desc) cuando la descripción
actual no se introduce explícitamente.
DEFAULT 'New Position - title not formalized yet'
En la tabla employee, los empleados pueden trabajar para una imprenta o para la compañía primaria. Cuando no se suministra una
compañía de forma explícita, se introduce la compañía primaria (observe que, como se muestra aquí, se pueden anidar
comentarios en la definición de la tabla).
DEFAULT ('9952')
/* By default the Parent Company Publisher is the company
to whom each employee reports. */
Además de constantes, las definiciones de DEFAULT pueden incluir funciones. Utilice este ejemplo para obtener la fecha actual
de una entrada:
DEFAULT (getdate())
Las funciones niládicas pueden mejorar también la integridad de los datos. Para realizar el seguimiento del usuario que insertó
una fila, utilice la función niládica para USER (no escriba las funciones niládicas entre paréntesis):
DEFAULT USER
E. Utilizar restricciones CHECK
Este ejemplo muestra las restricciones realizadas a los valores introducidos en las columnas min_lvl y max_lvl de la tabla jobs.
Estas dos restricciones no tienen nombre:
CHECK (min_lvl >= 10)
y
CHECK (max_lvl <= 250)
Este ejemplo muestra una restricción con nombre con una restricción de patrón sobre los datos de caracteres introducidos en
la columna emp_id de la tabla employee.
CONSTRAINT CK_emp_id CHECK (emp_id LIKE
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' OR
emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')
Este ejemplo especifica que pub_id debe estar en una lista específica o seguir un modelo dado. Esta restricción afecta a la
columna pub_id de la tabla publishers.
CHECK (pub_id IN ('1389', '0736', '0877', '1622', '1756')
OR pub_id LIKE '99[0-9][0-9]')
F. Definiciones de tablas completas
El ejemplo siguiente muestra definiciones completas de tablas con las definiciones de restricciones de tres tablas (jobs,
employee y publishers) creadas en la base de datos pubs.
/* ************************** jobs table ************************** */
CREATE TABLE jobs
(
job_id smallint
IDENTITY(1,1)
PRIMARY KEY CLUSTERED,
job_desc varchar(50) NOT NULL
DEFAULT 'New Position - title not formalized yet',
min_lvl tinyint NOT NULL
CHECK (min_lvl >= 10),
max_lvl tinyint NOT NULL
CHECK (max_lvl <= 250)
)
Permiso a tablas
GRANT
Crea una entrada en el sistema de seguridad que permite a un usuario de la base de datos actual trabajar con datos de la base
de datos actual o ejecutar instrucciones Transact-SQL específicas.
Sintaxis
Permisos de la instrucción:
GRANT { ALL | statement [ ,...n ] }
TO security_account [ ,...n ]
Permisos del objeto:
GRANT
{ ALL [ PRIVILEGES ] | permission [ ,...n ] }
{
[ ( column [ ,...n ] ) ] ON { table | view }
| ON { table | view } [ ( column [ ,...n ] ) ]
| ON { stored_procedure | extended_procedure }
| ON { user_defined_function }
}
TO security_account [ ,...n ]
[ WITH GRANT OPTION ]
[ AS { group | role } ]
PRIVILEGES
Es una palabra clave opcional que se puede incluir para cumplir con SQL-92.
permission
Se trata de un permiso de objeto que se concede. Cuando se conceden permisos sobre una tabla, una función de valores de tabla
o una vista, la lista de permisos puede incluir uno o más de los siguientes permisos: SELECT, INSERT, DELETE, REFERENCES o
UPDATE. Es posible suministrar una lista de columnas junto con los permisos SELECT y UPDATE. Si no se suministra una lista de
columnas con los permisos SELECT y UPDATE, los permisos se aplican a todas las columnas de la tabla, vista o función de valores
de tabla.
Los permisos que se conceden a objetos en un procedimiento almacenado sólo pueden incluir EXECUTE. Los permisos que se
conceden a objetos en una función de valores escalares pueden incluir EXECUTE y REFERENCES.
Para tener acceso a una columna en una instrucción SELECT es necesario disponer de permiso para utilizar SELECT en esa
columna. Para actualizar una columna mediante una instrucción UPDATE es necesario disponer de permiso para utilizar UPDATE
en esa columna.
Para crear una restricción FOREIGN KEY que haga referencia a una tabla es necesario disponer de permiso para utilizar
REFERENCES en esa tabla.
Para crear una FUNCTION o VIEW con la cláusula WITH SCHEMABINDING que haga referencia a un objeto es necesario
disponer de permiso para utilizar REFERENCES en ese objeto.
column
Es el nombre de la columna de la base de datos actual sobre la que se conceden los permisos.
table
Es el nombre de la tabla de la base de datos actual sobre la que se conceden los permisos.
view
Es el nombre de la vista de la base de datos actual sobre la que se conceden los permisos.
stored_procedure
Es el nombre del procedimiento almacenado de la base de datos actual sobre el que se conceden los permisos.
extended_procedure
Es el nombre del procedimiento almacenado extendido sobre el que se conceden los permisos.
user_defined_function
Es el nombre de la función definida por el usuario sobre la que se conceden los permisos.
WITH GRANT OPTION
Especifica que se concede a security_account la capacidad de conceder el permiso de objeto especificado a otras cuentas de
seguridad. La cláusula WITH GRANT OPTION sólo es válida con los permisos de objeto.
AS {group | role}
Especifica el nombre opcional de la cuenta de seguridad de la base de datos actual que tiene los permisos necesarios para
ejecutar la instrucción GRANT. AS se utiliza cuando se conceden permisos sobre un objeto a un grupo o función, y es necesario
que los permisos de objetos se concedan además a otros usuarios que no son miembros del grupo o función. Debido a que sólo un
usuario, y no un grupo o función, puede ejecutar una instrucción GRANT, un miembro específico del grupo o función concederá
los permisos del objeto bajo la autoridad del grupo o función.
Observaciones
Los permisos entre bases de datos diferentes no están permitidos. Sólo se deben conceder permisos a los usuarios de la base
de datos actual y sobre objetos e instrucciones de la base de datos actual. Si un usuario necesita permisos para objetos de otra
base de datos, cree la cuenta del usuario en la otra base de datos o conceda a la cuenta del usuario acceso a la otra base de
datos y a la base de datos actual.
Nota Los procedimientos almacenados en el sistema son la excepción ya que los permisos EXECUTE ya están concedidos a la
función public, lo que permite a cualquiera ejecutarlos. Sin embargo, después de su ejecución, los procedimientos almacenados
del sistema comprueban la pertenencia del usuario a la función. Si el usuario no es miembro de la función fija de servidor o de
base de datos que corresponda para ejecutar el procedimiento almacenado, éste no continuará.
Se puede utilizar la instrucción REVOKE para retirar permisos concedidos y la instrucción DENY para evitar que un usuario
obtenga permisos mediante la instrucción GRANT referida a su cuenta de usuario.
Un permiso concedido quita los permisos denegados o revocados en el nivel en el que se concede (usuario, grupo o función). Sin
embargo, la denegación del mismo permiso en otro nivel, como el de un grupo o función que contenga al usuario, sí prevalece.
Aunque sí se aplica la revocación del mismo permiso en otro nivel, ello no impide al usuario el acceso al objeto.
Si un usuario aplica una función de aplicación, el efecto de GRANT es nulo para los objetos a los que el usuario tenga acceso con
la función de aplicación. Por ello, aunque es posible conceder a un usuario acceso a un objeto específico de la base de datos
actual, si ese usuario utiliza una función de aplicación que no tiene acceso al objeto, él tampoco tendrá acceso mientras esté
activada la función de aplicación.
ALTER TABLE
Modifica una definición de tabla al alterar, agregar o quitar columnas y restricciones, o al deshabilitar o habilitar restricciones
y desencadenadores.
Sintaxis
ALTER TABLE table
{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ COLLATE < collation_name > ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
]
[ ROWGUIDCOL ]
[ COLLATE < collation_name > ]
[ < column_constraint > ] [ ...n ]
< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[WITH FILLFACTOR = fillfactor]
[ ON { filegroup | DEFAULT } ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ,...n ] ) }
[WITH FILLFACTOR = fillfactor]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| DEFAULT constant_expression
[ FOR column ] [ WITH VALUES ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}
DROP TABLE
Quita una definición de tabla y todos los datos, índices, desencadenadores, restricciones y especificaciones de permisos de la
tabla. Las vistas o procedimientos almacenados que hagan referencia a la tabla quitada se deben quitar explícitamente con
la instrucción DROP VIEW o DROP PROCEDURE.
Sintaxis
DROP TABLE table_name
Argumentos
table_name
Es el nombre de la tabla que se va a quitar.
Observaciones
No se puede utilizar DROP TABLE para quitar una tabla a la que se haga referencia con una restricción FOREIGN KEY. Primero
se debe quitar la restricción FOREIGN KEY o la tabla de referencia.
El propietario de una tabla puede quitar la tabla de cualquier base de datos. Cuando se quita la tabla, las reglas o valores
predeterminados de la misma pierden sus enlaces y se quitan automáticamente las restricciones o desencadenadores asociados
con ella. Si vuelve a crear una tabla, debe volver a enlazar las reglas y valores predeterminados apropiados, volver a crear los
desencadenadores y agregar todas las restricciones necesarias.
No puede utilizar la instrucción DROP TABLE sobre las tablas del sistema.
Si elimina todas las filas de una tabla (DELETE tablename) o utiliza la instrucción TRUNCATE TABLE, la tabla existe hasta que
se quite.
Permisos
Los permisos para utilizar DROP TABLE pertenecen de manera predeterminada al propietario de la tabla y no se pueden
transferir. Sin embargo, los miembros de la función fija de servidor sysadmin o de las funciones fijas de base de datos
db_owner y db_ddladmin pueden quitar cualquier objeto si especifican el propietario en la instrucción DROP TABLE.
Ejemplos
A. Quitar una tabla de la base de datos actual
Este ejemplo quita la tabla titles1, y sus datos e índices de la base de datos actual.
DROP TABLE titles1
B. Quitar una tabla de otra base de datos
Este ejemplo quita la tabla authors2 de la base de datos pubs. Se puede ejecutar desde cualquier base de datos.
DROP TABLE [Link].authors2
2. La asociación "Amigos de la Fiesta" desea recoger en una base de datos toda la información acerca de las corridas de
toros que se celebran en España y de todos los datos relacionados con ellas.
Se
desea tener información acerca de cada corrida, identificada conjuntamente por un número de orden, la feria en la
que se celebra y el año de celebración (por ejemplo: orden = 2, feria = San Isidro, año = 1990); las corridas que no se
celebran durante una feria tienen 0 en el campo Feria y se numeran correlativamente dentro de ese año.
En una determinada corrida actúan una serie de toreros (mínimo 1 y máximo 6) de los que se desea guardar su DNI,
nombre, apodo y fecha en que tomó la alternativa. Además se desea saber quién fue el torero (padrino) que le dio la
alternativa en su día (un torero puede dar la alternativa a varios compañeros o a ninguno).
En cada corrida un torero obtiene una serie de premios (número de orejas, de rabos y si salió por la puerta grande) de
los que se desea mantener información.
Cada torero puede tener un apoderado. A su vez, un apoderado lo puede ser de varios toreros. De él se desea saber su
DNI, nombre, dirección y teléfono.
Una corrida se celebra en una plaza de toros de la que se desea saber su nombre (que se supone único), localidad,
dirección y aforo. En una misma plaza se pueden celebrar varias corridas de toros.
Cada toro pertenece a una ganadería determinada. De cada ganadería se quiere conocer su código, nombre, localidad,
procedencia y antigüedad (fecha de creación).
En cada corrida son estoqueados al menos 6 toros. Cada toro viene identificado por el código de la ganadería a la que
pertenece, el año en que nació y un número de orden. Además se desea mantener información acerca de su nombre y
color, así como del orden en que fue toreado.
3. La empresa Personal Quality desea incorporar en su política de contratación criterios de calidad del personal basados
en la medición de sus habilidades o competencias.
La
empresa desea medir las competencias intelectuales de todos sus empleados y además desea conocer las
competencias emocionales de sus directivos (por ejemplo, la capacidad de trabajo en grupo, la motivación, capacidad de
liderazgo, etc.). De todas ellas se desea conocer: su código de identificación, su nombre y su descripción. Además, para
cada competencia emocional se desea conocer, lo que se ha denominado el umbral; es decir, el valor mínimo de cada
competencia por debajo del cual ningún empleado podrá ser directivo. Se requiere también que todo directivo mantenga
este umbral mínimo en, al menos, 5 competencias emocionales.
Para
llevar a cabo este estudio, Personal Quality ha contactado con el Emocional Skill Center quien le ha proporcionado
una batería de Test. Cada competencia está asociada a un conjunto de test que permiten medirla. Un test puede medir
una única competencia. Cada test se identifica por un nombre y debe tener asociado un conjunto de preguntas, una
plantilla para su corrección así como el modo en que se deberán interpretar los resultados.
Cada empleado se identifica por un código interno. Además se quiere conocer el nombre, la dirección y un teléfono de
contacto de cada empleado.
4. La gestión de una farmacia requiere poder llevar control de los medicamentos existentes, así como de los que se van
sirviendo, para lo cual se pretende diseñar un sistema acorde a las siguientes especificaciones:
la farmacia se requiere una catalogación de todos los medicamentos existentes, para lo cual se almacenará un código
En
de medicamento, nombre del medicamento, tipo de medicamento (jarabe, comprimido, pomada, etc.), unidades en stock,
unidades vendidas y precio. Existen medicamentos de venta libre, y otros que sólo pueden dispensarse con receta médica.
La farmacia adquiere cada medicamento a un laboratorio, o bien los fabrica ella misma. Se desea conocer el código del
laboratorio, nombre, teléfono, dirección, fax así como el nombre de la persona de contacto.
Los medicamentos se agrupan en familias, dependiendo del tipo de enfermedades a las que dicho medicamento se aplica.
La farmacia tiene algunos clientes que realizan los pagos de sus pedidos a fin de cada mes (clientes con crédito). La
farmacia quiere conocer las unidades de cada medicamento comprado (con o sin crédito) así como la fecha de compra.
Además, es necesario tener los datos bancarios de los clientes con crédito, así como la fecha de pago de las compras que
realizan.
5. Se trata de diseñar una base de datos para una red de agencias franquiciadas a TECHNOHOUSE, empresa
especializada en el alquiler y compra de inmuebles.
Cada
agencia tiene un titular propio y un conjunto de vendedores. Tanto el titular como los vendedores sólo pueden
pertenecer a una agencia. Sobre las agencias interesa almacenar su dirección, teléfonos (que pueden ser varios), fax,
etc. Además, cada agencia tiene asignada una zona de actuación que es única.
Las agencias disponen de inmuebles tanto para alquilar como para vender (o ambas cosas), en el primer caso figurará el
precio de alquiler y la fianza a depositar, mientras que en el segundo caso, además del precio de venta, se indica si el
inmueble está o no hipotecado.
Por otro lado, los inmuebles pueden ser locales comerciales, o pisos. En ambos casos se identifican por un código,
interesando conocer el propietario, la dirección y la superficie en m2.
Además, en el caso de pisos interesa conocer el número de habitaciones (incluyendo el salón), el número de cuartos de
baño, el tipo de gas (natural, ciudad, butano), y si es interior o exterior. Para los locales comerciales se debe conocer si
dispone de licencia de apertura.
Un cliente puede acudir a varias agencias, en cada una se le asigna un vendedor, que es el encargado de seleccionar los
inmuebles que cumplen las características deseadas, y en caso de estar interesado, el cliente debe dar una señal para
reservar el inmueble (o los inmuebles) que desea.
6. La empresa “X” desea llevar un control de sus departamentos, empleados y proyectos según las siguientes
especificaciones:
Se
desea conocer el nombre, salario y número de la seguridad social de cada empleado, así como el nombre, fecha de
nacimiento y estudios que cursa, de cada uno de sus hijos. Existen varios tipos de empleados: directores (encargados de
un departamento), representantes de ventas (se ocupan de la representación en un número de regiones) e ingenieros
(encargados de realizar los proyectos de la empresa); hay, además, otros empleados, como secretarios, auxiliares de
laboratorio, etc. Un director no puede ejercer ninguna otra función; sin embargo, un representante de ventas puede
desempeñar también las funciones de un ingeniero y viceversa.
Los distintos departamentos concede becas de estudio a los hijos de los empleados. Estas becas no están tipificadas,
sino que son ayudas que se conceden dependiendo del presupuesto del que disponga el departamento. Se desea conocer la
fecha de concesión de cada beca así como la cuantía de ésta.
Un ingeniero puede tener varias especialidades que se desean conocer.
De los departamentos se necesita saber, el nombre, localización y empleados que trabajan en él. Un departamento
tiene, como mínimo 2 empleados y como máximo 30 y está al cargo de un único director. Cada departamento tiene un
director distinto.
Un departamento puede controlar un número de proyectos, de los que se desea conocer su nombre y fecha de
comienzo.
En la realización de un proyecto no puede haber involucrados más de 5 ingenieros. Todo ingeniero debe estar asociado a
1 proyecto como mínimo y a 2 como máximo. En el caso de que un departamento no tenga ningún proyecto, sus empleados
podrán estar trabajando en proyectos de otros departamentos.
7. Se trata de diseñar la base de datos para la administración de un consorcio de hospitales, que permita gestionar
datos acerca del personal así como de los pacientes de los mismos. De cada hospital interesa almacenar además de su
nombre dirección, teléfono, fax, etc.
personal de los hospitales (del que interesa almacenar su DNI, nombre, apellidos, dirección y teléfono) se divide en
El
personal administrativo y personal sanitario (dentro de este se distingue a su vez ATS y médicos).
Los
médicos tienen una especialidad que interesa conocer (pediatría, obstetricia, etc.) y sólo trabajan, al igual que el
resto del personal, en un hospital.
Los pacientes pueden acudir a varios hospitales del consorcio, pudiendo ser atendidos por varios médicos.
Se desea conocer los datos personales de los pacientes que van a ingresar en el hospital, así como el número de
seguridad social, compañía aseguradora, la fecha de admisión y la sala (habitación) en la que deben permanecer.
Cada sala se identifica por un número de sala dentro de cada hospital y se desea conocer el número de camas de las que
dispone cada sala.
Cada admisión de un paciente en el hospital lleva asociada una o varias fichas de tratamiento en las que se indica la
enfermedad y el médico que la atiende. Cada tratamiento se identifica por el nombre de la enfermedad del tratamiento
que es único para cada admisión.
Además, cada tratamiento da lugar a distintos resultados que permiten realizar el seguimiento de cada enfermedad de
un paciente. El resultado debe indicar la fecha y hora en que éste tuvo lugar, así como un comentario (por ejemplo,
indicando si el paciente tiene fiebre etc.). Para un mismo tratamiento sólo puede haber un resultado en un mismo día, a
una misma hora.