TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX CAPITULO II BASES DE DATOS Introducción Objetivos de los sistemas de gestión de base de datos (SGBD) Concepción de una base de datos Problemas adquiridos por una mala concepción de una base de datos Estructura básica del lenguaje de programación SQL Motores de Bases de Datos PostgreSQL Características MySQL Características Análisis de las Bases de Datos (Ventajas, Desventajas) RENAN NAZATE ORTIZ 35 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Introducción Una base de datos está generalmente definida como un conjunto integrado de datos que modelizan un universo dado. Este universo está compuesto por objetos inter-relacionados, los objetos de un mismo tipo constituyen una entidad y el lazo habido entre entidades se le denomina asociación. El proceso de descripción de asociaciones y entidades se llama modelización y se hace con la ayuda de un modelo de datos, existen actualmente cuatro modelos de datos diferentes: Modelo jerárquico. Éstas son bases de datos que como su nombre indica, almacenan su información en una estructura jerárquica. En este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de información puede tener varios hijos. El nodo que no tiene padre es llamado raíz, y a los nodos que no tienen hijos se los conoce como hojas. Una de las principales limitaciones de este modelo es su incapacidad de representar eficientemente la redundancia de datos. Fig. 2.1 Estructura del modelo jerárquico Modelo en red. Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la modificación del concepto de nodo: se RENAN NAZATE ORTIZ 36 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX permite que un mismo nodo tenga varios padres (posibilidad no permitida en el modelo jerárquico). Fue una gran mejora con respecto al modelo jerárquico, ya que ofrecía una solución eficiente al problema de redundancia de datos; pero, aun así, la dificultad que significa administrar la información en una base de datos de red ha significado que sea un modelo utilizado en su mayoría por programadores más que por usuarios finales. Fig. 2.2 Estructura del modelo de red Modelo objeto. Este modelo, bastante reciente, y propio de los modelos informáticos orientados a objetos, trata de almacenar en la base de datos los objetos completos (estado y comportamiento). Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del paradigma de objetos: Encapsulación - Propiedad que permite ocultar la información al resto de los objetos, impidiendo así accesos incorrectos o conflictos. Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases. Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a distintos tipos de objetos. RENAN NAZATE ORTIZ 37 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la definición de la base de datos. Una operación (llamada función) se especifica en dos partes. La interfaz (o signatura) de una operación incluye el nombre de la operación y los tipos de datos de sus argumentos (o parámetros). La implementación (o método) de la operación se especifica separadamente y puede modificarse sin afectar la interfaz. Los programas de aplicación de los usuarios pueden operar sobre los datos invocando a dichas operaciones a través de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse independencia entre programas y operaciones. Modelo relacional. Éste es el modelo más utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Su idea fundamental es el uso de "relaciones". Estas relaciones podrían considerarse en forma lógica como conjuntos de datos llamados "tuplas". Pese a que ésta es la teoría de las bases de datos relacionales, la mayoría de las veces se conceptualiza de una manera más fácil de imaginar. Esto es pensando en cada relación como si fuese una tabla que está compuesta por registros (las filas de una tabla), que representarían las tuplas, y campos (las columnas de una tabla). En este modelo, el lugar y la forma en que se almacenen los datos no tienen relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar para un usuario esporádico de la base de datos. La información puede ser recuperada o almacenada mediante "consultas" que ofrecen una amplia flexibilidad y poder para administrar la información. RENAN NAZATE ORTIZ 38 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Características MODELO RELACIONAL valores atómicos Columnas con nombre Distinción de columnas individuales por dominios y por nombres Normalmente varía con el tiempo Durante su diseño, una base de datos relacional pasa por un proceso al que se le conoce como normalización de una base de datos. Objetivos de los sistemas de gestión de base de datos (SGBD): Las funciones de los SGBD son: a. Permitir la definición de todos los datos (L.D.D) b. Permitir manipular datos (L.M.D) c. Establecer controles para la seguridad de estos datos (L.M.C) d. Permitir los accesos concurrentes. a. Definición de datos: La misión es describir y definir todos los esquemas que participen en la base de datos. Esto consiste en la descripción de los objetos, la descripción de todas las estructuras que formen nuestra base de datos. Definición de vista: Es una visión parcial de la tabla. “cuando en una tabla alguna parte de esta no quiero que tenga derecho a manipularla nadie” b. Manipulación de datos: Recoge todas las operaciones de intercambio de datos entre las tablas, estas operaciones pueden ser RENAN NAZATE ORTIZ 39 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX de consulta o de puesta al día (inserción, modificación, supresión) estas operaciones se realizan con la ayuda del denominado L.M.D. -consultas Operaciones - insertar datos - puesta al día - modificar datos - suprimir datos c. Seguridad de los datos: Consiste en garantizar que sólo los usuarios autorizados puedan efectuar operaciones correctas sobre la Base de Datos para ello se dispone de 2 tipos. Control sobre la base de datos Control sobre las tablas d. Gestión de los accesos concurrentes: El principal objetivo de la implantación de una base de datos es poner a disposición de un gran número de usuarios en conjunto integrado de datos, estos datos podrán ser manipulados por los diferentes usuarios y es ahora cuando se debe garantizar la coherencia de los datos después de las diversas manipulaciones. Esto se garantiza con la ayuda del concepto de transacción “se define como transacción a una unidad lógica de tratamiento que aplicada a un estado coherente de una base de datos restituye un nuevo estado coherente de la base de datos pero con estos modificados, únicamente puede ser modificada completamente anulado”. Concepción de una base de datos: El ciclo de vida de una base de datos puede descomponerse en 3 etapas: Concepción: La fase de concepción consiste en reproducir en el mundo real con ayuda de uno de los modelos de datos conocidos RENAN NAZATE ORTIZ 40 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX (relacional). El resultado de esta fase es un esquema escrito según un formalismo cualquiera no interpretable por el SGBD. Creación de la Base de Datos vacía: La 2ª fase consiste en traducir este esquema en órdenes comprensibles para el SGBD. Como resultado se obtiene la estructura de la base de datos desprovista de cualquier tipo de información. Explotación: Es en esta fase donde los registros serán manipulados con la ayuda de los lenguajes de programación. Es ahora cuando los usuarios pueden consultar los datos y ponerlos a punto durante el resto de la vida de la base de datos. Problemas adquiridos por una mala concepción de una base de datos: En las tablas hay que procurar que no haya duplicidad de datos: Redundancia de datos: Si un cliente ha realizado más de un pedido todos los datos de este cliente estarán repetidos tantas veces como pedidos haya, lo mismo sucede para los artículos esto es opuesto al principal objetivo de una base de datos que consiste en evitar la repetición de los mismos. Puestas al día múltiple: Para poder asegurar la coherencia de los datos es necesario efectuar puestas a días múltiples. ”Cuando un cliente cambia de dirección” Incoherencia de los datos: Sí una operación de puesta al día múltiple no se ha realizado completamente el estado de la base de datos queda incoherente y puede producir errores importantes. Pérdida de datos: La supresión de una línea en la tabla de pedidos entraña la pérdida de todos los datos relativos a un cliente si no ha efectuado ningún otro pedido. Esto es cierto también para un artículo que no ha sido pedido por ningún otro cliente. Estas anormalidades RENAN NAZATE ORTIZ 41 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX constituyen lo que se ha convenido en llamar “comportamiento anormal de las tablas”, para evitar esto existe un proceso llamado “normalización” que entre otras cosas intenta esclarecer los conceptos de “dependencia funcional y estado de las tablas”. Dependencia funcional: Este concepto se aplica a las columnas y consiste en hacer corresponder un único valor a aquella columna o columnas que consideremos más significativas. Estado de la tabla: Se dice que una tabla esta en estado de 1ª forma normal si toda columna de esta tabla no puede tener más que valores atómicos, un valor es atómico si él no es divisible. Estructura básica del lenguaje de programación SQL: Base de datos: Esta compuesta de un conjunto de tablas del sistema creadas implícitamente por él y por un conjunto de tablas y vistas creadas por el usuario. Tablas: Representan una entidad o a una asociación entre entidades. Las tablas están compuestas de columnas o de líneas o filas llamadas convencionalmente campos y registros. Una columna representa un atributo de la entidad y para describirla es necesario especificar un nombre y un tipo de datos, una particularidad de las columnas es que pueden permitir o no valores nulos. Fila: Es una combinación de los diferentes atributos del objeto (registro). Vistas: Es una tabla virtual definida sobre las tablas bases descritas por el usuario su objeto es permitir a los usuarios manipular un subconjunto de datos. RENAN NAZATE ORTIZ 42 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Usuarios: Uno de los objetivos de un sistema de gestión de base de datos es el de afianzar la seguridad de los datos, para hacer esto el lenguaje de programación genera todos los usuarios y sus permisos de acceso para acceder a una base de datos, cada usuario debe disponer de su autorización correspondiente y es el propietario de la base de datos el que debe dar y retirar permisos de acceso. Motores de Bases de Datos Se puede deducir que un motor de Bases de Datos (DBM por sus siglas en inglés) facilita las funciones de: almacenar físicamente, garantizar consistencia, garantizar integridad, atomicidad transaccional, y manejar vistas a la información. Como algunos ejemplos podemos citar a PostgreSQL, MySQL, Oracle, Sybase entres otros. [www-10] Aplicación Motor de datos Base de datos Fig. 2.3 Diagrama que representa el uso de un DBM PostgreSQL PostgreSQL es un SGBDR gratuito que soporta base de datos Objeto y SQL, es además un Sistema de Base de Datos Objeto – Relacional que corre bajo diversas plataformas hardware y sistemas operativos. RENAN NAZATE ORTIZ 43 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Postgres ofrece una potencia adicional sustancial al incorporar los siguientes cuatro conceptos adicionales básicos en una vía en la que los usuarios pueden extender fácilmente el sistema. Clases. Es una implantación de un tipo de objetos. Especifica una estructura de datos y los métodos operativos permisibles que se aplican a cada uno de sus objetos. Herencia. Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases. Tipos. Es un conjunto de objetos que tienen un mismo comportamiento (comparten una misma funcionalidad) que se puede observar desde afuera. Funciones. Permiten realizar y aumentar la potencia del motor de base de datos con la utilización de estas funciones. Otras características que aportan potencia y flexibilidad adicional: Restricciones (Constraints). Mediante estas restricciones en la implementación del código no se podrá acceder a ciertas partes en las que se declare no accesible. Disparadores (triggers). Son triggers que hacen ejecutar una acción cuando un evento ocurre en la base de datos. Acciones. Una acción es una función del disparador Eventos. Son utilizados para modificar una base de datos (INSERT, UPDATE, DELETE) Reglas (rules). Las reglas son las políticas y las que se deben tener en cuenta en el análisis de una base de datos a realizar. RENAN NAZATE ORTIZ 44 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Integridad transaccional. La integridad referencial es un sistema de reglas que utilizan la mayoría de las bases de datos relacionales para asegurarse que los registros de tablas relacionadas son válidos y que no se borren o cambien datos relacionados de forma accidental produciendo errores de integridad. Características: Implementación del estándar SQL92/SQL99. Soporta distintos tipos de datos: además del soporte para los tipos base, también soporta datos de tipo fecha, monetarios, elementos gráficos, datos sobre redes (MAC, IP...), cadenas de bits, etc. También permite la creación de tipos propios. Incorpora una estructura de datos array. Incorpora funciones de diversa índole: manejo de fechas, geométricas, orientadas a operaciones con redes, etc. Permite la declaración de funciones propias, así como la definición de disparadores. Soporta el uso de índices, reglas y vistas. Incluye herencia entre tablas (aunque no entre objetos, ya que no existen), por lo que a este gestor de bases de datos se le incluye entre los gestores objeto-relaciónales. Permite la gestión de diferentes usuarios, como también los permisos asignados a cada uno de ellos. [www-11, 12] RENAN NAZATE ORTIZ 45 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Como un ejemplo claro de la utilización del código PostgreSQL es el siguiente ejemplo en la realización de la base de datos para el sistema del Hospital Comunitario “San José Obrero”. /*#===================================================== #Sistema de bases para el hospital "San José Obrero" #create database sanjose; #==================================================== #=========================================================== # Table: USUARIO #=========================================================== #drop table usuario*/ create table usua_previ ( usuario varchar(40) not null, contras varchar(30) not null, previle varchar(30) not null, constraint PK_PREV_US primary key (usuario)); /*#==================================================== #Tabla medicamentos_farmacia necesaria para llenar datos #acerca de los medicinas utilizados #====================================================== #drop table farmacia*/ create table farmacia ( cod_medi_insu_farmacia varchar (30) not null, nombre_comer_insumo_medicamento varchar (60) not null, nombre_generico_medicamento varchar (60) default null, precio_unitario decimal not null, presentacion char (6) not null, stock_insu_medicamento int not null, cant_llevada decimal not null, cant_llevada_unit decimal not null, fecha_adquisicion date not null, RENAN NAZATE ORTIZ 46 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX fecha_caducidad date not null, constraint PK_MEDICAMENTOS_FARMACIA primary (cod_medi_insu_farmacia)); /*#==================================================== #Tabla procedimiento para llenar datos #acerca de datos acerca del procedimiento #====================================================== #drop table procedimiento*/ create table procedimiento ( cod_cirugia varchar (30) not null, procedimiento_cirugia varchar (60) not null, num_puntos_ci decimal null, num_puntos_ay decimal null, valor_puntos decimal null, valor_total_ciru decimal not null, valor_total_ayu decimal not null, valor_apro decimal null, constraint PK_PROCEDI primary key (cod_cirugia)); /*#==================================================== #Tabla datos_personal cirugia para llenar datos #acerca de Medicos, enfermeras, etc. #====================================================== #drop table datos_personal*/ create table datos_personal ( cc_personal varchar (10) not null, nombre_personal varchar (60) not null, telef_personal varchar (9) default null, direccion varchar (75) default null, edad int default null, especialidad varchar (25) default null, constraint PK_DAT_PERSON primary key (cc_personal)); RENAN NAZATE ORTIZ 47 key TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX /*#===================================================== #Tabla examen_laboratorio para llenar datos de examenes reazados al paciente #======================================================*/ create table examen_laboratorio ( cod_examen varchar (30) not null, nombre_examen varchar (60) not null, presenta varchar (5) not null, precio_unitario_examen decimal not null, fecha_examen date null, constraint PK_DATO_EXAMEN_PERSON primary key (cod_examen)); /*#===================================================== #Tabla recien_nacido para llenar datos del recien nacido #======================================================*/ create table recien_nacido ( cod_rn varchar (30) not null, apell_rn varchar (40) not null, hora_naci_rn timestamp not null, hcl_rn varchar (15) null, sexo_rn char (2) null, APGAR varchar (10) null, cama_rn int null, diash_rn int null, telefono_rn varchar (9) null, direccion_rn varchar (75) null, acompanante varchar (25) null, fecha_sali_rn date null, peso_rn decimal null, talla_rn decimal null, pc_rn decimal null, pt_rn decimal null, constraint PK_VIDA_NUEVA primary key (apell_rn,hora_naci_rn)); RENAN NAZATE ORTIZ 48 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX /*#========================================================== #Tabla paciente para llenar datos del paciente Hospitalizado #========================================================== #drop table paciente*/ create table paciente ( cod_paciente varchar(30) not null, apell_nom_paciente varchar(60) not null, cc_paciente varchar(10) null, HCL_paciente varchar(15) default null, fecha_hora_paciente timestamp not null, edad_paciente int not null, sexo_paciente char(1) not null, estado_civil_paciente varchar(2) not null, fecha_naci_paciente date null, direccion_paciente varchar(75) default null, telefono_paciente varchar(9) default null, cama_paciente int default null, dias_hospitalizados int default null, fecha_egre_paciente date null, nombre_acompanante varchar(25) default null, costo varchar(30) default null, nfactura varchar(30) default null, constraint PK_PACIENTE primary key (cod_paciente)); --constraint FK_CIRU_PROCE foreign key (cod_cirugia) references procedimiento (cod_cirugia)); /*#==================================================== #Tabla cirugia_paciente para llenar datos #acerca de datos acerca de la cirugia #====================================================== #drop table cirugia_paciente*/ create table cirugia_paciente ( cod_paciente varchar(30) not null, cod_ciru_dere varchar (30) not null, RENAN NAZATE ORTIZ 49 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX hora_quiro varchar (30) not null, dia_hospi varchar (30) not null, vderqui decimal not null, vderhos decimal not null, vderamedi decimal not null, vtotalquiro decimal not null, vtotalhos decimal not null, anestesia_paciente varchar (120) not null, constraint PK_CIRUGIA primary key (cod_paciente), constraint FK_CIRU_PACI foreign key (cod_paciente) references paciente (cod_paciente)); /*#==================================================== #Tabla examenes_laboratorio necesaria para llenar datos #acerca de los examenes realizados. #====================================================== #drop table examenes_paciente*/ create table examenes_paciente ( cod_paciente varchar(30) not null, nombre_examen_laboratorio varchar (60) not null, cod_exa_labo varchar (30) not null, presenta varchar (5) not null, cantidad int not null, precio_unitario_examen decimal not null, precio_total decimal not null, fecha_hora_examen timestamp not null, constraint PK_EXAMENES_LABORATORIO primary key (cod_paciente, nombre_examen_laboratorio, cod_exa_labo), constraint FK_EXAMLABO_PACIENTE foreign key (cod_paciente) references paciente (cod_paciente)); /*#==================================================== #Tabla datos_personal_paciente para llenar datos #acerca de honorarios medicos. RENAN NAZATE ORTIZ 50 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX #====================================================== #drop table datos_personal_paciente*/ create table datos_personal_paciente ( cod_paciente varchar (30) not null, cod_perso_proce varchar (30) not null, cirujano varchar (60) null, ayudante varchar (60) null, anestesista varchar (60) null, instrumentista varchar (60) null, circulante varchar (60) null, pediatra varchar (60) null, puntosciru decimal null, puntosayu decimal null, valpuntos decimal null, vtotalciru decimal null, vtotalayu decimal null, vanestesista decimal null, vinstru decimal null, vcirculante decimal null, vpediatra decimal null, constraint PK_DATOPERPAC primary key (cod_paciente), constraint FK_COD_PACI foreign key (cod_paciente) references paciente (cod_paciente)); /*#==================================================== #Tabla farmacia_paciente para complementar datos #acerca de todos los datos utilizados de farmacia #====================================================== #drop table farmacia_paciente*/ create table farmacia_paciente ( cod_paciente varchar (30) not null, cod_farma_farma varchar (30) not null, nom_me_in_sele varchar (60) not null, presenta varchar (10) not null, RENAN NAZATE ORTIZ 51 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX cant_utilizada decimal not null, valor_unit decimal not null, valor_total decimal not null, diferencia varchar (40) not null, constraint PK_FARMACIA_PAC primary key (cod_paciente,cod_farma_farma,diferencia), constraint FK_CO_PACIENT foreign key (cod_paciente) references paciente (cod_paciente)); insert into usua_previ values ('Administrador','hcsjobrero','Administrador'); MySQL MySQL es una base de datos muy popular. Es un servidor multi-hilos de bases de datos de código abierto, confiable, rápido, compacto, poderoso y multiplataforma podemos hacer las bases de datos a código abierto. Una gran ventaja es que se puede utilizar gratis y su código fuente siempre esta disponible. Características: El principal objetivo de MySQL es la velocidad y robustez. Esta escrito en C y C++, testado con GCC 2.7.2.1. Usa GNU autoconf para su portabilidad. Posee clientes C, C++, Java, Perl, TCL, etc. Es multiproceso, es decir puede usar varias CPU si éstas están disponibles. Puede trabajar en distintas plataformas y Sistemas Operativos (SO) distintos. RENAN NAZATE ORTIZ 52 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Su sistema de contraseñas y privilegios es muy flexible y seguro. Tiene registros de longitud fija y variable. Tiene 16 índices por tabla, cada índice puede estar compuesto de 1 a 15 columnas o partes de ellas con una longitud máxima de 127 bytes. Todas las columnas pueden tener valores por defecto. Todos los datos están grabados en formato ISO8859_1. Los clientes usan TCP o UNIX Socket para conectarse al servidor. El servidor soporta mensajes de error en distintas lenguas. Todos los comandos tienen -help o -? Para las ayudas. Diversos tipos de columnas como enteros de 1, 2, 3, 4, y 8 bytes, coma flotante, doble precisión, carácter, fechas, enumerados, etc. [www-13] Como un ejemplo claro de la utilización del código MySQL es el siguiente ejemplo en la realización de la base de datos para el sistema del Hospital Comunitario “San José Obrero”. #===================================================== #Sistema de bases para el hospital "San José Obrero" #create database paquetes_quirurgicos; #==================================================== #=========================================================== # Table: USUARIO #=========================================================== #drop table usuario create table usua_previ ( RENAN NAZATE ORTIZ 53 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX usuario varchar(40) not null, contras varchar(30) not null, previle varchar(30) not null, constraint PK_PREV_US primary key (usuario)); #==================================================== #Tabla medicamentos_farmacia necesaria para llenar datos #acerca de los medicinas utilizados #====================================================== #drop table farmacia create table farmacia ( cod_medi_insu_farmacia varchar (30) not null, nombre_comer_insumo_medicamento varchar (60) not null, nombre_generico_medicamento varchar (60) default null, precio_unitario double not null, presentacion char (6) not null, stock_insu_medicamento int not null, cant_llevada double default '1' not null, cant_llevada_unit double not null, fecha_adquisicion date not null, fecha_caducidad date not null, constraint PK_MEDICAMENTOS_FARMACIA primary (cod_medi_insu_farmacia)); #==================================================== #Tabla procedimiento para llenar datos #acerca de datos acerca del procedimiento #====================================================== #drop table procedimiento create table procedimiento ( cod_cirugia varchar (30) not null, procedimiento_cirugia varchar (60) not null, num_puntos_ci double null, num_puntos_ay double null, RENAN NAZATE ORTIZ 54 key TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX valor_puntos double null, valor_total_ciru double not null, valor_total_ayu double not null, valor_apro double null, constraint PK_PROCEDI primary key (cod_cirugia)); #===================================================== #Tabla recien_nacido para llenar datos del niño nacido #====================================================== create table recien_nacido ( cod_rn varchar (30) not null, apell_rn varchar (40) not null, hora_naci_rn datetime not null, hcl_rn varchar (15) null, sexo_rn char (2) null, APGAR varchar (10) null, cama_rn int null, diash_rn int null, telefono_rn varchar (9) null, direccion_rn varchar (75) null, acompanante varchar (25) null, fecha_sali_rn date null, peso_rn double null, talla_rn double null, pc_rn double null, pt_rn double null, constraint PK_VIDA_NUEVA primary key (apell_rn,hora_naci_rn)); #==================================================== #Tabla datos_personal para llenar datos #acerca de Medicos, enfermeras, etc. #====================================================== #drop table datos_personal create table datos_personal ( RENAN NAZATE ORTIZ 55 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX cc_personal varchar (10) not null, nombre_personal varchar (60) not null, telef_personal varchar (9) default null, direccion varchar (75) default null, edad int default null, especialidad varchar (25) default null, constraint PK_DAT_PERSON primary key (cc_personal)); #========================================================== #Tabla paciente para llenar datos del paciente Hospitalizado #========================================================== #drop table paciente create table paciente ( cod_paciente varchar(30) not null, apell_nom_paciente varchar(60) not null, cc_paciente varchar(10) null, HCL_paciente varchar(15) default null, fecha_hora_paciente datetime not null, edad_paciente int not null, sexo_paciente char(1) not null, estado_civil_paciente varchar(2) not null, fecha_naci_paciente date null, direccion_paciente varchar(75) default null, telefono_paciente varchar(9) default null, cama_paciente int default null, dias_hospitalizados int default null, fecha_egre_paciente date default null, nombre_acompanante varchar(25) default null, costo varchar(30) default null, nfactura varchar(30) default null, constraint PK_PACIENTE primary key (cod_paciente), constraint FK_CIRU_PROCE foreign procedimiento (cod_cirugia)); RENAN NAZATE ORTIZ 56 key (cod_cirugia) references TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX #==================================================== #Tabla cirugia_paciente para llenar datos #acerca de datos acerca de la cirugia #====================================================== #drop table cirugia_paciente create table cirugia_paciente ( cod_ciru_paci varchar (30) not null, cod_ciru_dere varchar (30) not null, hora_quiro varchar (30) not null, dia_hospi varchar (30) not null, vderqui double not null, vderhos double not null, vderamedi double not null, vtotalquiro double not null, vtotalhos double not null, anestesia_paciente varchar (120) not null, constraint PK_CIRUGIA primary key (cod_ciru_paci), constraint FK_CIRU_PACI foreign key (cod_paciente) references paciente (cod_paciente)); #==================================================== #Tabla examenes_laboratorio necesaria para llenar datos #acerca de los examenes realizados. #====================================================== #drop table examenes_paciente create table examenes_paciente ( cod_exa_paci varchar (30) not null, nombre_examen_laboratorio varchar (60) not null, cod_exa_labo varchar (30) not null, presenta varchar (5) not null, cantidad int not null, precio_unitario_examen double not null, precio_total double not null, fecha_hora_examen datetime not null, RENAN NAZATE ORTIZ 57 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX constraint PK_EXAMENES_LABORATORIO primary key (cod_exa_paci, nombre_examen_laboratorio, cod_exa_labo), constraint FK_EXAMLABO_PACIENTE foreign key (cod_paciente) references paciente (cod_paciente)); #==================================================== #Tabla datos_personal_paciente para llenar datos #acerca de honorarios medicos. #====================================================== #drop table datos_personal_paciente create table datos_personal_paciente ( cod_perso_paci varchar (30) not null, cod_perso_proce varchar (30) not null, cirujano varchar (60) null, ayudante varchar (60) null, anestesista varchar (60) null, instrumentista varchar (60) null, circulante varchar (60) null, pediatra varchar (60) null, puntosciru double null, puntosayu double null, valpuntos double null, vtotalciru double null, vtotalayu double null, vanestesista double null, vinstru double null, vcirculante double null, vpediatra double null, constraint PK_DATOPERPAC primary key (cod_perso_paci,cod_perso_proce), constraint FK_COD_PACI foreign key (cod_paciente) references paciente (cod_paciente)); RENAN NAZATE ORTIZ 58 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX #==================================================== #Tabla farmacia _ paciente para complementar datos #acerca de todos los datos utilizados de farmacia #====================================================== #drop table farmacia_paciente create table farmacia_paciente ( cod_farma_paci varchar (30) not null, cod_farma_farma varchar (30) not null, nom_me_in_sele varchar (60) not null, presenta varchar (10) not null, cant_utilizada double not null, valor_unit double not null, valor_total double not null, diferencia varchar (40) not null, constraint PK_FARMACIA_PAC primary key (cod_farma_paci,cod_farma_farma,diferencia), constraint FK_CO_PACIENT foreign key (cod_paciente) references paciente (cod_paciente)); insert into usua_previ values ('Administrador','hcsjobrero','Administrador'); RENAN NAZATE ORTIZ 59 TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX Análisis de las Bases de Datos (Ventajas, Desventajas) La información y comparativas existentes sobre MySQL y PostgreSQL para ver cuál DBM puede ser mejor es abundante pero muy confusa. Se tiene muchos comentarios al respecto, la mayoría de ellos catalogables como las que se producen en comparaciones "Linux vs. Windows", "Mac vs. PC", etc. [www-14] CUADRO COMPARATIVO DE MySQL Y PostgreSQL POSTGRESQL MYSQL VENTAJAS Por su arquitectura de diseño, Mayor rendimiento y Mayor escala muy bien al aumentar el velocidad tanto al conectar con el número de CPUs y la cantidad de servidor como al servir selects y RAM. demás. Soporta transacciones y desde la Mejores utilidades de administración versión 7.0, claves ajenas (con (backup, recuperación de errores, comprobaciones de integridad etc.). referencial). Tiene mejor soporte para triggers y Aunque se cuelgue, no suele perder procedimientos en el servidor. información ni corromper los datos. Mejor integración con PHP. No hay límites en el tamaño de los registros. Soporta un subconjunto de SQL92 Mejor control de acceso, en el MAYOR que el que soporta MySQL. sentido de qué usuarios tienen Además, tiene ciertas acceso a qué características orientadas a objetos. qué permisos. RENAN NAZATE ORTIZ 60 tablas y con las TECNICAS DE PROGRAMACION VISUAL PARA APLICAICIONES DOS CAPAS EN LA PLATAFORMA LINUX MySQL se comporta mejor que Postgres a la hora de modificar o añadir campos a una tabla "en caliente". DESVENTAJAS Consume más recursos y carga más No soporta transacciones, "roll el sistema. backs" ni subselects. Límite del tamaño de cada fila de las tablas a 8k!!! (Se puede ampliar a No considera las claves ajenas. 32k recompilando, pero con un Ignora coste añadido en el rendimiento). la dejándola integridad en referencial, manos Es de 2 a 3 veces más lenta que programador de la aplicación. MySQL. Menos funciones en PHP. RENAN NAZATE ORTIZ 61 del