{"id":19913471,"url":"https://github.com/drako01/sql_distefano","last_synced_at":"2026-03-19T12:24:59.914Z","repository":{"id":168588167,"uuid":"644333306","full_name":"Drako01/sql_DiStefano","owner":"Drako01","description":"Base de Datos en SQL para gestión Clínica","archived":false,"fork":false,"pushed_at":"2023-07-20T00:46:14.000Z","size":514,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T08:46:15.970Z","etag":null,"topics":["sql","workbench"],"latest_commit_sha":null,"homepage":"","language":"PLpgSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Drako01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-23T09:53:24.000Z","updated_at":"2025-02-17T23:54:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"e16a4fce-4483-4da3-bf26-22829ed6f24b","html_url":"https://github.com/Drako01/sql_DiStefano","commit_stats":null,"previous_names":["drako01/sql_distefano"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Drako01/sql_DiStefano","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Drako01%2Fsql_DiStefano","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Drako01%2Fsql_DiStefano/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Drako01%2Fsql_DiStefano/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Drako01%2Fsql_DiStefano/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Drako01","download_url":"https://codeload.github.com/Drako01/sql_DiStefano/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Drako01%2Fsql_DiStefano/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30207392,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T03:24:23.086Z","status":"ssl_error","status_checked_at":"2026-03-07T03:23:11.444Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sql","workbench"],"created_at":"2024-11-12T21:33:07.561Z","updated_at":"2026-03-07T04:02:25.785Z","avatar_url":"https://github.com/Drako01.png","language":"PLpgSQL","readme":"\u003ch1 align=\"center\"\u003eSQL\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e \n    \u003cimg src=\"https://jobs.coderhouse.com/assets/logos_coderhouse.png\" alt=\"CoderHouse\"  height=\"100\"/\u003e\n\u003c/p\u003e\n\n---\n\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e \n\u003cimg src=\"https://cdn-dynmedia-1.microsoft.com/is/image/microsoftcorp/SQL_2019_Webpage_illustration_RE4r3wO:VP1-539x400?resMode=sharp2\u0026op_usm=1.5,0.65,15,0\u0026qlt=100\u0026fit=constrain\" alt=\"SQL\" /\u003e\n\n\u003cbr\u003e\n\n---\n\n\n## Introducción:\n\n\n```sh\n\"Bienvenidos a la presentación del sistema de gestión de la clínica. \nEn el entorno de atención médica actual, la eficiencia en la gestión de los datos médicos y administrativos se ha vuelto fundamental para brindar una atención de calidad y garantizar la satisfacción de los pacientes. \nEn esta presentación, exploraremos cómo nuestro sistema de gestión de la clínica puede optimizar los procesos, mejorar la coordinación entre médicos y personal administrativo, y proporcionar una plataforma segura para el manejo de datos médicos\".\n\n```\n## Objetivos:\n\n```sh\n\"Nuestro objetivo principal es implementar un sistema de gestión de la clínica que permita mejorar la calidad de la atención médica, optimizar los procesos administrativos y garantizar la seguridad de los datos del paciente. \nBuscamos centralizar la información médica, facilitar el seguimiento de tratamientos y proporcionar una plataforma eficiente para la coordinación entre médicos y personal administrativo. \nCon este sistema, aspiramos a mejorar la experiencia del paciente y optimizar la eficiencia operativa de la clínica\".\n\n```\n\n## Situación Problematica:\n\n\n```sh\n\"Actualmente, nuestra clínica se enfrenta a varios desafíos en la gestión de los datos médicos y administrativos. \nExiste una falta de coordinación entre los médicos y el personal administrativo, lo que dificulta el seguimiento preciso de los tratamientos y la programación de citas. \nAdemás, el acceso rápido y seguro a la información del paciente es limitado, lo que afecta la eficiencia de los procesos y la toma de decisiones médicas. \nNuestro sistema de gestión de la clínica aborda estas problemáticas al centralizar la información, mejorar la comunicación y proporcionar herramientas eficientes para el manejo de datos médicos\".\n\n```\n\n\n## Modelo de negocio:\n\n\n```sh\n\"Nuestro modelo de negocio se basa en proporcionar una atención médica especializada y eficiente a nuestros pacientes. \nUtilizaremos nuestro sistema de gestión de la clínica para optimizar los procesos, mejorar la coordinación entre médicos y personal administrativo, y garantizar la seguridad de los datos. \nNuestros ingresos provendrán de consultas médicas, tratamientos, facturación de servicios y otros servicios especializados. \nA través de canales de distribución como consultorios, atención presencial y telemedicina, buscaremos llegar a nuestros pacientes de manera efectiva. \nAdemás, gestionaremos nuestros costos de manera eficiente para garantizar la sostenibilidad y rentabilidad del negocio\".\n\n```\n\n### Descripcion de la Base de Datos\n\n\u003cbr\u003e\n\n```sh\nLa base de datos \"clinica\" es un esquema que almacena información relacionada con una clínica médica. A continuación, se describe cada una de las tablas que conforman esta base de datos:\n\nTabla \"especialidadmedica\":\n\nClave primaria: id (identificador único de la especialidad).\nNo tiene claves foráneas.\nLa clave primaria \"id\" se seleccionó como identificador único para cada especialidad médica, ya que garantiza la unicidad de cada registro.\n\n\nTabla \"localidad\":\n\nClave primaria: id (identificador único de la localidad).\nNo tiene claves foráneas.\nLa clave primaria \"id\" se seleccionó como identificador único para cada localidad, asegurando la unicidad de cada registro.\n\n\nTabla \"medico\":\n\nClave primaria: id (identificador único del médico).\nClaves foráneas: especialidad_id, localidad_id (relacionadas con las tablas \"especialidadmedica\" y \"localidad\" respectivamente).\nLa clave primaria \"id\" se eligió como identificador único para cada médico.\nLas claves foráneas \"especialidad_id\" y \"localidad_id\" se utilizan para establecer la relación entre el médico y su especialidad médica y localidad respectivamente.\n\n\nTabla \"consultorios\":\n\nClave primaria: id (identificador único del consultorio).\nClave foránea: medico_id (relacionada con la tabla \"medico\").\nLa clave primaria \"id\" se seleccionó como identificador único para cada consultorio.\nLa clave foránea \"medico_id\" se utiliza para establecer la relación entre el consultorio y el médico asignado a ese consultorio.\n\n\nTabla \"obrasocial\":\n\nClave primaria: id (identificador único de la obra social).\nNo tiene claves foráneas.\nLa clave primaria \"id\" se seleccionó como identificador único para cada obra social.\n\n\nTabla \"persona\":\n\nClave primaria: id (identificador único de la persona).\nClaves foráneas: localidad_id, medico_cabecera_id, obra_social_id (relacionadas con las tablas \"localidad\", \"medico\" y \"obrasocial\" respectivamente).\nLa clave primaria \"id\" se eligió como identificador único para cada persona (paciente).\nLas claves foráneas \"localidad_id\", \"medico_cabecera_id\" y \"obra_social_id\" se utilizan para establecer las relaciones entre la persona y su localidad, médico de cabecera y obra social respectivamente.\n\n\nTabla \"turno\":\n\nClave primaria: id (identificador único del turno).\nClaves foráneas: doctor_id, paciente_id (relacionadas con las tablas \"medico\" y \"persona\" respectivamente).\nLa clave primaria \"id\" se seleccionó como identificador único para cada turno.\nLas claves foráneas \"doctor_id\" y \"paciente_id\" se utilizan para establecer las relaciones entre el turno, el médico que atenderá el turno y la persona que tiene el turno asignado.\n\n\nTabla \"empleado\":\n\nClave primaria: id (identificador único del empleado).\nClaves foráneas: localidad_id, obra_social_id (relacionadas con las tablas \"localidad\" y \"obrasocial\" respectivamente).\nLa clave primaria \"id\" se eligió como identificador único para cada empleado.\nLas claves foráneas \"localidad_id\" y \"obra_social_id\" se utilizan para establecer las relaciones entre el empleado y su localidad y obra social respectivamente.\n\n\nTabla \"vacaciones\":\n\nClave primaria: id (identificador único de las vacaciones).\nClave foránea: empleado_id (relacionada con la tabla \"empleado\").\nLa clave primaria \"id\" se seleccionó como identificador único para cada registro de vacaciones.\nLa clave foránea \"empleado_id\" se utiliza para establecer la relación entre las vacaciones y el empleado que tomó esas vacaciones.\n\n\nTabla \"vacaciones_medico\":\n\nClave primaria: id (identificador único de las vacaciones del médico).\nClave foránea: medico_id (relacionada con la tabla \"medico\").\nLa clave primaria \"id\" se seleccionó como identificador único para cada registro de vacaciones médicas.\nLa clave foránea \"medico_id\" se utiliza para establecer la relación entre las vacaciones médicas y el médico que tomó esas vacaciones.\n\n\ntabla \"tratamiento\":\n\nClave primaria: id (identificador único del tratamiento).\nClave foránea: paciente_id (relacionada con la tabla \"persona\").\nLa clave primaria \"id\" se seleccionó como identificador único para cada tratamiento.\nLa clave foránea \"paciente_id\" se utiliza para establecer la relación entre el tratamiento y el paciente que recibió el tratamiento.\n\n\ntabla \"diagnotico\": \n\nClave primaria: id (identificador único del diagnóstico).\nClave foránea: paciente_id (relacionada con la tabla \"persona\").\nLa clave primaria \"id\" se seleccionó como identificador único para cada diagnóstico.\nLa clave foránea \"paciente_id\" se utiliza para establecer la relación entre el diagnóstico y el paciente que recibió el diagnóstico.\n\n\ntabla \"tratamiento_medico\":\n\nClave primaria: id (identificador único del tratamiento médico).\nClaves foráneas: medico_id, tratamiento_id (relacionadas con las tablas \"medico\" y \"tratamiento\" respectivamente).\nLa clave primaria \"id\" se seleccionó como identificador único para cada tratamiento médico.\nLas claves foráneas \"medico_id\" y \"tratamiento_id\" se utilizan para establecer las relaciones entre el tratamiento médico, el médico que realizó el tratamiento y el tratamiento realizado.\n\n\ntabla \"factura\":\n\nClave primaria: id (identificador único de la factura).\nClave foránea: paciente_id (relacionada con la tabla \"persona\").\nLa clave primaria \"id\" se seleccionó como identificador único para cada factura.\nLa clave foránea \"paciente_id\" se utiliza para establecer la relación entre la factura y el paciente que recibió la factura.\n\n\n\nLas tablas se relacionan mediante el uso de claves primarias y claves foráneas. Por ejemplo:\n\nLa tabla \"medico\" tiene claves foráneas \"especialidad_id\" y \"localidad_id\" que se relacionan con las tablas \"especialidadmedica\" y \"localidad\" respectivamente, para indicar la especialidad y la localidad del médico.\nLa tabla \"consultorios\" tiene una clave foránea \"medico_id\" que se relaciona con la tabla \"medico\" para indicar el médico asignado a ese consultorio.\nLa tabla \"persona\" tiene claves foráneas \"localidad_id\", \"medico_cabecera_id\" y \"obra_social_id\" que se relacionan con las tablas \"localidad\", \"medico\" y \"obrasocial\" respectivamente, para indicar la localidad, el médico de cabecera y la obra social de la persona (paciente).\nLa tabla \"turno\" tiene claves foráneas \"doctor_id\" y \"paciente_id\" que se relacionan con las tablas \"medico\" y \"persona\" respectivamente, para indicar el médico que atenderá el turno y la persona que tiene el turno asignado.\nEstas relaciones permiten establecer vínculos entre los registros de las diferentes tablas y facilitan el acceso y la manipulación de los datos en la base de datos \"clinica\".\n\n\n\n```\n\n### Listado de Vistas:\n\n```sh\nVista \"vista_pacientes\":\n\n\"Descripción\": Esta vista muestra información de los pacientes que no tienen asignado un médico cabecera. Incluye el ID del paciente, nombre, apellido, edad y denominación de la obra social a la que pertenece.\n\"Objetivo\": El objetivo de esta vista es identificar a los pacientes que no tienen asignado un médico cabecera para poder tomar medidas o asignarles uno en caso necesario.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"persona\": Contiene información general de las personas, incluyendo pacientes. Se utiliza para obtener el ID, nombre, apellido y obra social del paciente.\nTabla \"obrasocial\": Contiene información sobre las obras sociales a las que pueden pertenecer los pacientes. Se utiliza para obtener la denominación de la obra social del paciente.\n\n\nVista \"vista_empleados\":\n\n\"Descripción\": Esta vista muestra información de los empleados de la clínica, incluyendo su ID, nombre, apellido, puesto y nombre de la localidad en la que trabajan.\n\"Objetivo\": El objetivo de esta vista es proporcionar una lista de los empleados de la clínica junto con información relevante, como su puesto y la localidad en la que se encuentran, lo cual puede ser útil para la gestión y organización interna de la clínica.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"empleado\": Contiene información específica de los empleados de la clínica, como su ID, nombre, apellido y puesto.\nTabla \"localidad\": Contiene información de las localidades, incluyendo el nombre de cada una. Se utiliza para obtener el nombre de la localidad en la que trabaja cada empleado.\n\n\nVista \"vista_turnos\":\n\n\"Descripción\": Esta vista muestra información de los turnos de la clínica, incluyendo el ID del turno, fecha, hora, indicador de si el turno ha sido atendido, nombre del paciente y nombre del médico asociado al turno.\n\"Objetivo\": El objetivo de esta vista es brindar una visión general de los turnos programados en la clínica, incluyendo la información relevante de cada turno, como la fecha, hora, estado de atención y los nombres del paciente y médico asociados.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"turno\": Contiene información específica de los turnos, como su ID, fecha, hora y estado de atención.\nTabla \"persona\": Utilizada para obtener el nombre del paciente asociado al turno.\nTabla \"medico\": Utilizada para obtener el nombre del médico asociado al turno.\n\n\nVista \"vista_consultorios_disponibles\":\n\n\"Descripción\": Esta vista muestra información de los consultorios disponibles en la clínica, incluyendo su ID, nombre, indicador de ocupación y nombre del médico asociado en caso de estar ocupado.\n\"Objetivo\": El objetivo de esta vista es identificar los consultorios que se encuentran disponibles en la clínica, es decir, aquellos que no están ocupados en un determinado momento. También muestra el médico asociado a cada consultorio en caso de estar ocupado, lo cual puede ser útil para gestionar la asignación de consultorios y su ocupación.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"consultorios\": Contiene información de los consultorios de la clínica, incluyendo su ID, nombre y estado de ocupación.\nTabla \"medico\": Utilizada para obtener el nombre del médico asociado a cada consultorio ocupado.\n\n\nVista \"vista_especialidades_medicas\":\n\n\"Descripción\": Esta vista muestra información de las especialidades médicas y subespecialidades, junto con la cantidad de médicos asociados a cada una.\n\"Objetivo\": El objetivo de esta vista es brindar un resumen de las especialidades médicas y subespecialidades presentes en la clínica, así como la cantidad de médicos que se especializan en cada una. Esto puede ser útil para analizar la distribución de especialidades en la clínica y la disponibilidad de médicos en cada área.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"especialidadmedica\": Contiene información de las especialidades médicas y subespecialidades, incluyendo su ID, nombre y subespecialidad.\nTabla \"medico\": Utilizada para contar la cantidad de médicos asociados a cada especialidad.\n\n\nVista \"vista_pacientes_obrasociales\":\n\n\"Descripción\": Esta vista muestra información de los pacientes junto con la obra social a la que pertenecen, y la cantidad de pacientes asociados a cada obra social.\n\"Objetivo\": El objetivo de esta vista es proporcionar una lista de los pacientes de la clínica junto con su obra social correspondiente, y además mostrar la cantidad de pacientes que pertenecen a cada obra social. Esta información puede ser útil para el análisis y seguimiento de la atención médica según la obra social de los pacientes.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"persona\": Contiene información general de las personas, incluyendo pacientes. Se utiliza para obtener el ID, nombre y apellido del paciente.\nTabla \"obrasocial\": Contiene información sobre las obras sociales a las que pueden pertenecer los pacientes. Se utiliza para obtener la denominación de la obra social del paciente.\n\n\nVista \"vista_tratamientos_paciente\":\n\n\"Descripción\": Esta vista muestra información de los tratamientos realizados a cada paciente, incluyendo el ID del tratamiento, nombre y apellido del paciente, nombre del médico que realizó el tratamiento y nombre del tratamiento realizado.\n\"Objetivo\": El objetivo de esta vista es proporcionar una lista de los tratamientos realizados a cada paciente, incluyendo el nombre del paciente, el médico que realizó el tratamiento y el nombre del tratamiento realizado. Esto puede ser útil para el seguimiento de los tratamientos realizados a cada paciente.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"tratamiento\": Contiene información de los tratamientos realizados a los pacientes, incluyendo su ID y nombre.\nTabla \"persona\": Utilizada para obtener el nombre y apellido del paciente asociado al tratamiento.\nTabla \"medico\": Utilizada para obtener el nombre del médico que realizó el tratamiento.\n\n\nVista \"vista_diagnosticos_paciente\":\n\n\"Descripción\": Esta vista muestra información de los diagnósticos realizados a cada paciente, incluyendo el ID del diagnóstico, nombre y apellido del paciente, nombre del médico que realizó el diagnóstico y nombre del diagnóstico realizado.\n\"Objetivo\": El objetivo de esta vista es proporcionar una lista de los diagnósticos realizados a cada paciente, incluyendo el nombre del paciente, el médico que realizó el diagnóstico y el nombre del diagnóstico realizado. Esto puede ser útil para el seguimiento de los diagnósticos realizados a cada paciente.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"diagnostico\": Contiene información de los diagnósticos realizados a los pacientes, incluyendo su ID y nombre.\nTabla \"persona\": Utilizada para obtener el nombre y apellido del paciente asociado al diagnóstico.\nTabla \"medico\": Utilizada para obtener el nombre del médico que realizó el diagnóstico.\n\n\nVista \"vista_consultas_medico\":\n\n\"Descripción\": Esta vista muestra información de las consultas realizadas por cada médico, incluyendo el ID de la consulta, nombre y apellido del paciente, nombre del médico que realizó la consulta y fecha de la consulta.\n\"Objetivo\": El objetivo de esta vista es proporcionar una lista de las consultas realizadas por cada médico, incluyendo el nombre del paciente, la fecha de la consulta y el nombre del médico que realizó la consulta. Esto puede ser útil para el seguimiento de las consultas realizadas por cada médico.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"turno\": Contiene información de las consultas realizadas por los médicos, incluyendo su ID y fecha.\nTabla \"persona\": Utilizada para obtener el nombre y apellido del paciente asociado a la consulta.\nTabla \"medico\": Utilizada para obtener el nombre del médico que realizó la consulta.\n\n\nVista \"vista_empleados_con_vacaciones\":\n\n\"Descripción\": Esta vista muestra información de los empleados que tomaron vacaciones, incluyendo el ID del empleado, nombre y apellido, puesto y nombre de la localidad en la que trabaja.\n\"Objetivo\": El objetivo de esta vista es proporcionar una lista de los empleados que tomaron vacaciones, incluyendo información relevante como su puesto y la localidad en la que se encuentran, lo cual puede ser útil para la gestión y organización interna de la clínica.\n\"Tablas que la componen\": Esta vista está compuesta por las siguientes tablas:\nTabla \"empleado\": Contiene información específica de los empleados de la clínica, como su ID, nombre, apellido y puesto.\nTabla \"localidad\": Contiene información de las localidades, incluyendo el nombre de cada una. Se utiliza para obtener el nombre de la localidad en la que trabaja cada empleado.\nTabla \"vacaciones\": Contiene información de las vacaciones tomadas por los empleados, incluyendo su ID y fecha de inicio y fin.\nTabla \"vacaciones_medico\": Contiene información de las vacaciones tomadas por los médicos, incluyendo su ID y fecha de inicio y fin.\n\n\n\n```\n\n### Listado de Funciones:\n\n```sh\n\n\nFunción \"calcular_edad\":\n\n\"Descripción\": Esta función calcula la edad en años a partir de la fecha de nacimiento proporcionada como parámetro.\n\"Objetivo\": El objetivo de esta función es facilitar el cálculo de la edad de una persona en años a partir de su fecha de nacimiento. Puede ser utilizada en consultas o procedimientos que requieran el cálculo de la edad de los pacientes.\n\"Tablas o datos que manipula\": Esta función no manipula tablas ni datos directamente. Toma como parámetro la fecha de nacimiento de una persona y realiza el cálculo de la edad en base a la fecha actual.\n\n\nFunción \"calcular_promedio_edad\":\n\n\"Descripción\": Esta función calcula el promedio de edad en años a partir de la fecha de nacimiento de todos los pacientes registrados en la tabla \"persona\".\n\"Objetivo\": El objetivo de esta función es obtener el promedio de edad de todos los pacientes de la clínica, lo cual puede ser útil para realizar análisis estadísticos o monitorear la distribución de edades en la población atendida por la clínica.\n\"Tablas o datos que manipula\": Esta función accede a la tabla \"persona\" para obtener la fecha de nacimiento de los pacientes y realizar el cálculo del promedio de edad.\n\n\nFunción \"contar_medicos_subespecialidad\":\n\n\"Descripción\": Esta función cuenta la cantidad de médicos que tienen una subespecialidad específica.\n\"Objetivo\": El objetivo de esta función es obtener el número de médicos que se especializan en una determinada subespecialidad médica. Esto puede ser útil para conocer la disponibilidad de médicos en una subespecialidad en particular o para realizar análisis estadísticos sobre la distribución de especialidades en el personal médico.\n\"Tablas o datos que manipula\": Esta función accede a las tablas \"medico\" y \"especialidadmedica\" para realizar la consulta y obtener la cantidad de médicos que tienen una subespecialidad específica. Se realiza una unión (JOIN) entre estas dos tablas utilizando el ID de la especialidad en la tabla \"medico\" y el ID de la especialidad en la tabla \"especialidadmedica\".\n\n\nFunción \"calcular_costo_total_tratamientos_paciente\":\n\n\"Descripción\": Esta función calcula el costo total de los tratamientos realizados a un paciente específico.\n\"Objetivo\": El objetivo de esta función es obtener el costo total de los tratamientos realizados a un paciente específico. Esto puede ser útil para realizar análisis estadísticos sobre los costos de los tratamientos realizados a los pacientes.\n\"Tablas o datos que manipula\": Esta función accede a las tablas \"tratamiento\" y \"tratamiento_medico\" para realizar la consulta y obtener el costo total de los tratamientos realizados a un paciente específico. Se realiza una unión (JOIN) entre estas dos tablas utilizando el ID del tratamiento en la tabla \"tratamiento\" y el ID del tratamiento en la tabla \"tratamiento_medico\".\n\n\nFunción buscar_pacientes_por_medico:\n\n\"Descripción\": Esta función busca pacientes en función de su médico de cabecera. Toma como parámetro el ID del médico de cabecera y devuelve los nombres y apellidos de los pacientes que tienen ese médico de cabecera.\n\"Objetivo\": El objetivo de esta función es facilitar la búsqueda de pacientes según su médico de cabecera. Esto puede ser útil para identificar rápidamente a los pacientes que están bajo el cuidado de un médico específico.\n\"Tablas o datos que manipula\": Esta función accede a las tablas \"persona\" y \"medico\" para realizar la consulta. Se realiza una unión (JOIN) entre estas dos tablas utilizando el ID del médico de cabecera en la tabla \"persona\" y el ID del médico en la tabla \"medico\".\n\n\n\n\n```\n\n### Listado de Stored Procedures:\n\n```sh\n\n\nStored Procedure \"sp_OrdenarTabla\":\n\n\"Descripción\": Este stored procedure permite indicar el campo de ordenamiento de una tabla y el tipo de ordenamiento (ascendente o descendente) para ordenar los registros de la tabla especificada.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es facilitar la ordenación de los registros de una tabla de forma dinámica, permitiendo al usuario especificar el campo de ordenamiento y el tipo de ordenamiento deseado. Esto brinda flexibilidad y eficiencia al ordenar grandes conjuntos de datos en una tabla.\n\"Tablas o datos que manipulan\": Este stored procedure no manipula directamente tablas ni datos. Toma como parámetros el nombre de la tabla, el campo de ordenamiento y el tipo de ordenamiento. Luego ejecuta una consulta dinámica para ordenar los registros de la tabla según los criterios especificados.\n\n\nStored Procedure \"sp_InsertarEliminarRegistro\":\n\n\"Descripción\": Este stored procedure permite insertar registros en una tabla especificada y eliminar un registro específico de la misma tabla, según la operación y condiciones proporcionadas.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es proporcionar una funcionalidad conveniente para insertar nuevos registros y eliminar registros existentes de una tabla en el proyecto de la clínica. Esto simplifica las tareas comunes de inserción y eliminación de datos y ayuda a mantener la integridad y consistencia de los datos en la base de datos.\n\"Tablas o datos que manipulan\": Este stored procedure manipula una tabla específica que se especifica como parámetro (p_tabla). Para la operación de inserción, se utiliza el valor de los parámetros p_valores para insertar los nuevos registros. Para la operación de eliminación, se utiliza el valor del parámetro p_condicion para identificar el registro que se debe eliminar.\n\n\nStored Procedure \"sp_BuscarPacientesPorEspecialidad\":\n\n\"Descripción\": Este stored procedure busca pacientes en función de su especialidad médica. Toma como parámetro una especialidad médica y devuelve los nombres y apellidos de los pacientes que tienen un médico de cabecera con esa especialidad.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es facilitar la búsqueda de pacientes según una especialidad médica específica. Esto puede ser útil para identificar rápidamente a los pacientes que están bajo el cuidado de médicos especializados en una determinada área médica.\n\"Tablas o datos que manipulan\": Este stored procedure accede a las tablas \"persona\", \"medico\" y \"especialidadmedica\" para realizar la consulta. Realiza un JOIN entre estas tablas para obtener los nombres y apellidos de los pacientes cuyo médico de cabecera tenga la especialidad médica especificada como parámetro.\n\n\nStored Procedure \"sp_ActualizarRegistro\":\n\n\"Descripción\": Este stored procedure permite actualizar un registro específico de una tabla especificada, según los valores proporcionados.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es proporcionar una funcionalidad conveniente para actualizar registros existentes de una tabla en el proyecto de la clínica. Esto simplifica las tareas comunes de actualización de datos y ayuda a mantener la integridad y consistencia de los datos en la base de datos.\n\"Tablas o datos que manipulan\": Este stored procedure manipula una tabla específica que se especifica como parámetro (p_tabla). Utiliza el valor del parámetro p_condicion para identificar el registro que se debe actualizar. Utiliza el valor del parámetro p_valores para actualizar los valores de los campos especificados en el registro identificado por p_condicion.\n\n\nStored Procedure \"sp_TotalPacientesPorEspecialidad\":\n\n\"Descripción\": Este stored procedure calcula el total de pacientes que tienen un médico de cabecera con una especialidad médica específica.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es obtener el total de pacientes que tienen un médico de cabecera con una especialidad médica específica. Esto puede ser útil para realizar análisis estadísticos sobre la distribución de especialidades en la población atendida por la clínica.\n\"Tablas o datos que manipulan\": Este stored procedure accede a las tablas \"persona\", \"medico\" y \"especialidadmedica\" para realizar la consulta. Realiza un JOIN entre estas tablas para obtener el total de pacientes cuyo médico de cabecera tenga la especialidad médica especificada como parámetro.\n\n\nStored Procedure \"sp_CalcularCostoTratamientosPorPaciente\":\n\n\"Descripción\": Este stored procedure calcula el costo total de los tratamientos realizados a un paciente específico.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es obtener el costo total de los tratamientos realizados a un paciente específico. Esto puede ser útil para realizar análisis estadísticos sobre los costos de los tratamientos realizados a los pacientes.\n\"Tablas o datos que manipulan\": Este stored procedure accede a las tablas \"tratamiento\" y \"tratamiento_medico\" para realizar la consulta y obtener el costo total de los tratamientos realizados a un paciente específico. Se realiza una unión (JOIN) entre estas dos tablas utilizando el ID del tratamiento en la tabla \"tratamiento\" y el ID del tratamiento en la tabla \"tratamiento_medico\".\n\n\nStored Procedure \"sp_ConsultoriosOcupadosPorMedico\":\n\n\"Descripción\": Este stored procedure busca los consultorios ocupados por un médico específico. Toma como parámetro el ID del médico y devuelve los nombres y apellidos de los pacientes que tienen un turno asignado con ese médico.\n\"Objetivo o beneficio\": El objetivo de este stored procedure es facilitar la búsqueda de consultorios ocupados por un médico específico. Esto puede ser útil para identificar rápidamente los consultorios ocupados por un médico en particular.\n\"Tablas o datos que manipulan\": Este stored procedure accede a las tablas \"turno\", \"persona\" y \"medico\" para realizar la consulta. Realiza un JOIN entre estas tablas para obtener los nombres y apellidos de los pacientes que tienen un turno asignado con el médico especificado como parámetro.\n\n\n```\n\n### Detalles de la importación de datos desde un Archivo Externo - Sublenguaje DML:\n\n```sh\n\nLa importación de datos en el script se realiza utilizando la sentencia SQL LOAD DATA INFILE.\nA continuación, se proporciona un detalle de cómo se realizan las importaciones en este script:\n\nImportación de datos en la tabla \"medico\":\nLa sentencia LOAD DATA INFILE se utiliza para cargar datos desde un archivo CSV en la tabla \"medico\".\nSe especifica la ruta del archivo CSV en la cláusula INFILE. En este caso, se utiliza \"./medicos.csv\". Nos Aseguramos de que la ruta del archivo sea correcta y accesible desde el servidor de la base de datos.\nSe utiliza la cláusula FIELDS TERMINATED BY ',' para indicar que los campos en el archivo CSV están separados por comas.\nSe utiliza la cláusula ENCLOSED BY '\"' para indicar que los valores de los campos están encerrados entre comillas dobles.\nLa cláusula LINES TERMINATED BY '\\n' se utiliza para indicar que cada registro en el archivo CSV está separado por una nueva línea.\nLa cláusula IGNORE 1 LINES se utiliza para ignorar la primera línea del archivo CSV, que generalmente contiene encabezados de columna.\nLos datos del archivo CSV se asignan a las columnas correspondientes de la tabla \"medico\" según el orden en el archivo CSV.\nLos nombres de las columnas en la tabla \"medico\" deben coincidir con los nombres de las columnas en el archivo CSV.\nAntes de la importación, se desactiva temporalmente la restricción de clave foránea utilizando la sentencia SET FOREIGN_KEY_CHECKS = 0 para permitir la inserción de registros sin verificar las claves foráneas.\nDespués de la importación, se reactiva la restricción de clave foránea utilizando la sentencia SET FOREIGN_KEY_CHECKS = 1 para volver a habilitar la verificación de claves foráneas.\n\n\nEs importante tener en cuenta lo siguiente:\n\nNos Aseguramos de que el archivo CSV contenga los datos en el formato correcto y coincida con la estructura de la tabla de destino.\nVerificar que los nombres de las columnas en la tabla de destino coincidan con los nombres de las columnas en el archivo CSV.\nNos Aseguramos de que la ruta del archivo CSV sea correcta y accesible desde el servidor de la base de datos.\nSi el archivo CSV utiliza un separador diferente de comas o un carácter de encerrado diferente de comillas dobles, debemos ajustar las cláusulas FIELDS TERMINATED BY y ENCLOSED BY en consecuencia.\nDespués de la importación, se puede realizar una consulta (SELECT) para visualizar los datos importados en la tabla \"medico\".\n\n```\n\n### Creacion de los Usuarios y Asignación de Permisos - Sublenguaje DCL:\n\n```sh\n\nEl sublenguaje DCL (Data Control Language) se utiliza para controlar el acceso a los datos almacenados en la base de datos.\n\nEn este script, se utilizan las siguientes sentencias DCL:\n\nCREATE USER: Se utiliza para crear un nuevo usuario de la base de datos.\nGRANT: Se utiliza para otorgar privilegios a los usuarios de la base de datos.\nREVOKE: Se utiliza para revocar privilegios a los usuarios de la base de datos.\n\n```\n\n### Modificaciones controladas mediante transacciones - Sublenguaje TCL:\n\n```sh\n\nEl sublenguaje TCL (Transaction Control Language) se utiliza para controlar las transacciones en la base de datos.\n\nEn este script, se utilizan las siguientes sentencias TCL:\n\nCOMMIT: Se utiliza para confirmar los cambios realizados en la base de datos.\nROLLBACK: Se utiliza para deshacer los cambios realizados en la base de datos.\nSAVEPOINT: Se utiliza para establecer un punto de guardado dentro de una transacción.\n\nSTART TRANSACTION: Se utiliza para iniciar una transacción.\nROLLBACK TRANSACTION: Se utiliza para deshacer los cambios realizados en una transacción.\nCOMMIT TRANSACTION: Se utiliza para confirmar los cambios realizados en una transacción.\n\nROLLBACK TO SAVEPOINT: Se utiliza para deshacer los cambios realizados en una transacción hasta un punto de guardado específico.\nREALEASE SAVEPOINT: Se utiliza para eliminar un punto de guardado de una transacción.\n\n\n```\n\n### Backup y Restore de la Base de Datos:\n\n```sh\n-- Para generar el backup de la base de datos clinica, usar el siguiente comando:\n\n    mysqldump -u root -p --no-create-info clinica \u003e backup.sql\n\n-- Base de datos: clinica\n-- Archivo: backup.sql\n\n\n-- Para restaurar la base de datos clinica, usar el siguiente comando:\n\n    mysqldump -u root -p  [clinica] \u003c backup.sql\n\n```\n\n### Workshop DCL y TCL\n\n```sh\n- Se crearon 3 usuarios:\n\nUsuario1: Con permisos de lectura sobre determinadas tablas.\nUsuario2: Con permisos de lectura y escritura sobre todas las tablas.\nUsuario3: Con permisos de lectura y eliminación sobre todas las tablas.\n\n- Se asignaron los permisos correspondientes a cada usuario sobre las tablas:\n\nUsuario1 recibió permisos de lectura sobre las tablas \"obrasocial\" y \"consultorios\".\nUsuario2 recibió permisos de lectura, inserción y actualización sobre todas las tablas del esquema \"clinica\".\nUsuario3 recibió permisos de lectura y eliminación sobre todas las tablas del esquema \"clinica\".\n\n- Se realizaron pruebas de los permisos otorgados mediante operaciones DML:\n\nUsuario1 ejecutó una consulta SELECT sobre la tabla \"obrasocial\".\nUsuario2 realizó operaciones de inserción, actualización y eliminación en las tablas \"obrasocial\" y \"consultorios\".\nUsuario3 ejecutó una consulta SELECT sobre la tabla \"consultorios\" y eliminó registros de la tabla \"consultorios\".\n\n- Se eliminó el Usuario3 y se transfirieron sus permisos al Usuario2:\n\nSe revocaron todos los privilegios del Usuario3 sobre el esquema \"clinica\".\nSe eliminó el Usuario3.\nSe otorgaron permisos de lectura, inserción, actualización y eliminación al Usuario2 sobre todas las tablas del esquema \"clinica\".\n\n\n```\n\n\u003cbr\u003e\n\n### Scripts de la Base de Datos (Click en los siguientes enlaces):\n\n\u003cbr\u003e\n\n- \u003ca href=\"./tablas_create.sql\"\u003e Creacion de la Base de Datos \u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./insertar_datos.sql\"\u003eScript de Inserción de Datos\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./insert_external_data.sql\"\u003eScript de Inserción de Datos Externos por Archivo\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./vistas.sql\"\u003eCreacion de las Vistas\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./funciones.sql\"\u003eCreacion de las Funciones\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./stored_procedures.sql\"\u003eCreacion de los Stored Procedures\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./triggers.sql\"\u003eCreacion de los Triggers\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./consultas.sql\"\u003eConsultas\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./sentencias.sql\"\u003eCreacion de los Usuarios y Asignación de Permisos\u003c/a\u003e\u003cbr\u003e\n- \u003ca href=\"./tcl.sql\"\u003eModificaciones controladas mediante transacciones\u003c/a\u003e\n- \u003ca href=\"./backup.sql\"\u003eVisualizar el Backup de la Base de Datos\u003c/a\u003e\n- \u003ca href=\"./workshop_tres.sql\"\u003eWorkshop DCL y TCL (Con creación de Usuarios y Asignación de Permisos)\u003c/a\u003e\n- \u003ca href=\"./informes_generator.sql\"\u003eGenerador de algunos Informes\u003c/a\u003e\n- \u003ca href=\"./informes/Informe.pdf\"\u003eInformes\u003c/a\u003e\n- \u003ca href=\"./ER_diagram.pdf\"\u003eDiagrama Entidad-Relación\u003c/a\u003e\n- \u003ca href=\"./clinica.pdf\"\u003eScript para Importar la Base de Datos\u003c/a\u003e\n  \u003cbr\u003e\n\n---\n\n\u003cbr\u003e\n\n## Autor: Alejandro Daniel Di Stefano\n\n### Comisión #43410 - CoderHouse\n\n---\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrako01%2Fsql_distefano","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrako01%2Fsql_distefano","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrako01%2Fsql_distefano/lists"}