Pregunta sobre base de datos
#1
Escrito 15 mayo 2009 - 02:23
Necesito diseñar una base de datos para un programa de laboratorio, en la base de datos se guardaría la información de análisis clínicos (sangre y orina) que se realizan los pacientes.
Tengo dudas sobre cuantas tablas se necesitarían, yo pienso que se requiere una tabla para pacientes y otras dos, una para los análisis de sangre y otra para los de orina. El problema es que los diferentes tipos de análisis de sangre pueden ser más de 50 y me parece inadecuado poner tantos campos en una sola tabla.
Tal vez alguien me pueda orientar (mi background de conocimientos en base de datos es muy rudimentario).
Saludos
#2
Escrito 15 mayo 2009 - 02:35
Pacientes
id_Paciente
Nombre
Apellido
Doctor
...etc.
TipoAnalisis
id_Analisis
Tipo
Resultados
id_resultado
id_Paciente
id_Analisis
resultados
Sólo eso se me ocurre.
Saludos.
#3
Escrito 15 mayo 2009 - 02:36
1. Pacientes (detalle de los pacientes)
2. Análisis (tipos y de talles tanto de analisis de sangre como de orina, algo asi como un catálogo)
3. Historial_Analisis (los análisis hechos a cada paciente ya sea de un tipo o de otro)
Lo veo un poco más sencillo y te evitas el hacer una tabla de 50 o más campos y así permites que si el dia de mañana agregan otros análisis no tendrás que modificar tu tabla, sólo es cuestión de agregar otro registro...
Es como yo lo pienso
Más ideas chicos ? (i)
Saludos
#4
Escrito 15 mayo 2009 - 02:39
#5
Escrito 15 mayo 2009 - 02:47
tiene cada analisis
asi como lo plantean se guardarian los resultados
en un solo campo
si pudieras darnos un ejemplo de como es el resultado de un par de analisis Robert01
#6
Escrito 15 mayo 2009 - 02:51
digo hay hay que saber que tipo de datos
tiene cada analisis
asi como lo plantean se guardarian los resultados
en un solo campo
si pudieras darnos un ejemplo de como es el resultado de un par de analisis Robert01
No entendí, cómo que se guardarían en un solo campo ??? Cada una de las tablas tendrías tantos campos como información detallada necesitaras de cada concepto...
Saludos
#7
Escrito 15 mayo 2009 - 02:57
Un ejemplo de Analisis de orina
Analisis de Orina
Datos Generales
Volumen
Color
Olor
Transparencia
Sedimento
Densidad
pH
Reacciones
Albúmina
Glucos
Acetona
Urobilina
Hemoglobina
Bilirrubina
Nitritos
Sedimentos
Celulas
Piocitos
Eritrocitos
Celulas renales
Espermatozoides
Epiteliales
Leucocitos
Bacterias
Cilindros
Hialinos
Granulosos
Hematicos
Epiteliales
Ceres
Cilindroides
leucocitario
Cristales
Oxalato de Calcio
Acido Urico
Fosfatos Triples
Uratos Amorfos
Fosfatos Amorfos
levaduras
Filamentos Mucosos
Y algo similar seria la :
Biometria Hematica,
Quimica Sanguinea de 6 elementos,
Quimica sanguinea de 10 elementos,
Perfil hepatico,
Funcionamiento Hepatico, etc
mmm esta interesante. ¡¡Esos masters en desarrollo de BD's a la reja con todo y su odbc!!
#8
Escrito 15 mayo 2009 - 03:00
es un solo campo para resultadosBueno a mi parecer podría ser sólo 3 tablas: Pacientes, TipoAnalisis y Resultados, los desglosaría así:
Pacientes
id_Paciente
Nombre
Apellido
Doctor
...etc.
TipoAnalisis
id_Analisis
Tipo
Resultados
id_resultado
id_Paciente
id_Analisis
resultados
Sólo eso se me ocurre.
Saludos.
si un analisis aroja 10 o 50 resultados
#9
Escrito 15 mayo 2009 - 03:04
.....
es un solo campo para resultados
si un analisis aroja 10 o 50 resultados
Ah no !!!
Pero no pienses que es un campo por resultado, si no más bien, un registro por cada resultado, esto es, un paciente puede tener N resultados diferentes y cada uno de ellos sería un registro diferente, con un identificador determinado y tantos campos como sean necesarios...
Saludos
#11
Escrito 15 mayo 2009 - 03:11
es un solo campo para resultados
si un analisis aroja 10 o 50 resultados
Ejemplo de registros:
Resultados:
------------------------------------------------------------------------
id_resultado | id_Paciente | id_Analisis | Resultados |
------------------------------------------------------------------------
3556888 | 456 | 5 | Positivo |
3556888 | 456 | 10 | Cristales en orina |
3556888 | 456 | COPRO | Negativo, color normal |
------------------------------------------------------------------------
Esa es la idea que tengo.
Saludos.
#12
Escrito 15 mayo 2009 - 03:15
asi creo yo seria
tabla Pacientes
Id-paciente
nombre
direccion
< todos los datos que kieran del paciente>
tabla analisis
id analisis
nombre
campo 1
campo 2
....
campo 50
tabla resultados
id-paciente
id analisis
fecha
resultados
en la tabla de paciente, pss lo que lleve en datos
en la tabla analisis por cada campo pones tipo de dato ( volumen, color, holor....)
en la tabla de resultados id-paciente ( suena obio) id analisis para saber en que posicion se guarda cada resultado del analisis
asi cuando guardes los resultados del analisis los guardas separados por coma í² semi colon ( punto y coma para los cuates )
y cuando los recuperes al momento de recuperarlos tienes que chekar en la tabla de analisis a que coresponde cada valor guardado
Eso se me ocurre a mi
#13
Escrito 15 mayo 2009 - 03:22
Yo había creado estas tablas, usando mysql workbench en kubuntu 9.04:
-- ----------------------------------------------------- -- Table `Lab`.`Sangre` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Lab`.`Sangre` ( `idSangre` INT NOT NULL , `Eritrocitos` VARCHAR(10) NULL , `Hemoglobina` DECIMAL(7,2) NULL , `Hematocrito` DECIMAL(7,2) NULL , `Leucocitos` DECIMAL(7,2) NULL , PRIMARY KEY (`idSangre`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `Lab`.`Leucocitario` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Lab`.`Leucocitario` ( `idLeucocitario` INT NOT NULL , `Neutrofilos_en_cayado` VARCHAR(15) NULL , `Neutrofilos_segmentados` VARCHAR(15) NULL , `Neutrofilos_eosinofilos` VARCHAR(15) NULL , `Neitrofilos_basofilos` VARCHAR(15) NULL , `Linfocitos` VARCHAR(15) NULL , `Monocitos` VARCHAR(15) NULL , `Cel_de_irritacion` VARCHAR(15) NULL , PRIMARY KEY (`idLeucocitario`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `Lab`.`Plaquetario` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Lab`.`Plaquetario` ( `idPlaquetario` INT NOT NULL , `Tiempo_de_hemorragia` VARCHAR(15) NULL , `Tiempo_de_coagulacion` VARCHAR(15) NULL , `Tiempo_de_protrombina` VARCHAR(15) NULL , `Recuento_de_plaquetas` VARCHAR(15) NULL , `Observaciones` VARCHAR(150) NULL , PRIMARY KEY (`idPlaquetario`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `Lab`.`AnalisisBasicos` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Lab`.`AnalisisBasicos` ( `idAnalisisBasicos` INT NOT NULL , `Glucemia` VARCHAR(15) NULL , `Uremia` VARCHAR(15) NULL , `Colesterol` VARCHAR(15) NULL , `Lipemia` VARCHAR(15) NULL , `Trigliceridos` VARCHAR(15) NULL , `Uricemia` VARCHAR(15) NULL , `Creatinina` VARCHAR(15) NULL , `Calcemia` VARCHAR(15) NULL , `Fosfatasa_alcalina` VARCHAR(15) NULL , `GPT` VARCHAR(15) NULL , `GOT` VARCHAR(15) NULL , `Bilirubina_total` VARCHAR(15) NULL , `Bilirrubina_directa` VARCHAR(15) NULL , `Bilirrubina_indirecta` VARCHAR(15) NULL , `Colesterol_HDL` VARCHAR(15) NULL , `Amilasemia` VARCHAR(15) NULL , `Artritest` VARCHAR(15) NULL , `PCR` VARCHAR(15) NULL , PRIMARY KEY (`idAnalisisBasicos`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `Lab`.`Proteinograma_electroforesis` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `Lab`.`Proteinograma_electroforesis` ( `idProteinograma_electroforesis` INT NOT NULL , `Proteinas_totales` VARCHAR(15) NULL , `Albumina` VARCHAR(15) NULL , `Glob_L1` VARCHAR(15) NULL , `Glob_L2` VARCHAR(15) NULL , `Glob_beta` VARCHAR(15) NULL , `Glob_gamma` VARCHAR(15) NULL , `Lipidograma` VARCHAR(15) NULL , `Beta_LP` VARCHAR(15) NULL , `Probeta_LP` VARCHAR(15) NULL , `Alfa_LP` VARCHAR(15) NULL , `Ionograma` VARCHAR(15) NULL , `Sodio` VARCHAR(15) NULL , `Potasio` VARCHAR(15) NULL , `Cloro` VARCHAR(15) NULL , PRIMARY KEY (`idProteinograma_electroforesis`) ) ENGINE = InnoDB;
En lo que me sugieren usar un campo resultados no entiendo como voy a poner los resultados de todos los análisis.
Saludos
#14
Escrito 15 mayo 2009 - 03:38
#15
Escrito 15 mayo 2009 - 03:39
jijijij
no es verdad
digo
explicanos como le haras
#16
Escrito 15 mayo 2009 - 05:55
¿Sería la ubcación de los mismos en la tabla análisis?
Uhm no se... Creo que fui demasiado optimista hace un rato.
Saludos
#17
Escrito 15 mayo 2009 - 07:57
Si no es mucha molestia, ¿podrías explicarnos como están los datos estructurados de los análisis?
Viendo lo comenta FGarcia me asalta la duda....
Existen dos clases de análisis: uno de sangre y otro de orina. ¿Cada uno se sub-clasifica? Por ejemplo... no se como interpretar lo que muestra FGarcia...
Puedo interpretarlo como que Datos Generales, Reacciones y Sedimentos son los tres tipos básicos de análisis de orina. Cada uno contiene ciertos análisis. Siguiendo esta línea uno podría inferir que son tres tablas sólo para el tema de orina, Por darles un nombre... OrinaDatosGenerales, OrinaReacciones, OrinaSedimentos; a su vez OrinaSedimentos se subclasifica en Células, Cilindros y Cristales. Cada una de éstas tablas tendrá tantos campos como se indican.
Un procedimiento análogo se podría llevar para el caso de sangre.
Ahora una pregunta fundamental, ¿en un examen de orina, se incluyen TODOS estos tipos de análisis? ¿O por el contrario, se brinda la posibilidad de decir cual de esos tres macro tipo de análisis se llevarán a cabo?
Por si no se me entiende... veamoslo con un ejemplo. Digamos que me siento mal, y tras un chequeo el médico considera que el problema puede estar en los riñones, y pide un análisis de orina para ver como andamos. ¿El médico indicará cuales de estos tres hay que hacer (lo mismo va, para si lo deseamos ver como el caso de Sedimentos... ¿todos, o algunos?)? ¿O es que en un mismo análisis se llevan a cabo todos?
¿Es de utilidad o tiene sentido y valor de negocio poder saber sólo un sub-clasificación de algún análisis? Por ejemplo... se desea consultar los resultado de las reacciones de orina pero no así de los datos generales ni sedimentos para el paciente x.
Este ejemplo y mis preguntas son claves y fundamentales para comprender el propósito y el contexto adecuado. Definamos concretamente que es ANALISIS.
Elevemos de concepto aún... resulta que estoy muy mal. Y para saber que es lo que está pasando deciden hacer unos análisis de sangre. ¿Tengo dos análisis, o un análisis? Es decir: uno de sangre y otro de orina... ó un análisis con una sección con los de sangre y otra sección con los de orina?
¿Se ve a lo que podemos llegar con esa palabra?
Estas preguntas podrían ser de utilidad para comprender hasta donde es deseable estructurar el diseño de tu base de datos.
Me gustaría saber como se compone un estudio (no voy a decir análisis, para evitar problemas) tanto de sangre como de orina.
Si tiene algún sentido separar los datos clasificandolos como señala FGarcia tal vez sea viable el tener tantas tablas como clasificaciones. Pero este haría más complicado establecer las relaciones.
Tal vez esté liando el asunto, pero considero que esto es bueno para ver la magnitud y repercusión del diseño y en como enfocar el desarrollo del sistema.
Además, el tener 50 campos no es un peligro (aunque si es para llamar la atención). El peligro está en que esos 50 campos no estén bien estructurados para los fines que tu persigue.
Yo puedo entenderlo, como un diseño simple, así:
Paciente - 1 --- M - Analisis - 1 --- M - EstudioAnalisis - M --- 1 - TipoAnalisis
TipoAnalisis es una tabla que cuenta con los siguientes campos:
1. IDAnalisis: clave primaria
2. Descripcion: una descripcion
3. MaxValor: el máximo normal esperado
4. MinValor: el mínimo normal esperado
5. Clase (0 -> Orina, 1 -> Sangre).
En esta tabla se registrarán, por ejemplo todos esos que menciona FGarcia: Volumen, Color, Olor, etc....
Si se tiene contemplado incluir otras clases de análisis más... se podría usar una tabla para tener bien clasificados, y hacer más flexible el diseño. En este caso, la relación entre TipoAnalisis y ClaseAnalisis sería de (M,1).
EstudioAnalisis es la tabla en donde se registran los resultados de los diferentes tipos de análisis tanto de orina como de sangre. Sus campos principales:
1. IDEstudioAnalisis: clave primaria
2. IDTipoAnalisis: clave foránea a TipoAnalisis
3. Resultado: el resultado... ¿es de esperar no?
No creo que sea necesario describir las demás, creo que se entiende la idea. Un paciente tiene muchos análisis, cada análisis está constituído por muchos estudios que corresponderán a algunos tipos.
Hay otros modos de verlo pero considero que esto elimina en cierto modo el tener demasiados campos para algunas tablas... no quisiera extenderme demasiado. Es un tema que hay que analizar bien.
Saludos,
#18
Escrito 15 mayo 2009 - 08:37
De modo que el diseño que inicialmente había contemplado quedaría así:
+-----------+ +----------+ +-------------------+ +--------------+ | Pacientes |-1---M-| Analisis |-1---M-| ResultadoAnalisis |-M---1-| TipoAnalisis | +-----------+ +----------+ +-------------------+ +--------------+ | | | +---------------+ | +---------M---1-| ClaseAnalisis |-1---M-----------+ +---------------+
De este modo, ClaseAnalisis puede tener éstos campos:
1. IDClase: clave primaria
2. Nombre: Análisis de sangre, de orina, etc...
Ahora aquel campo Clase de TipoAnalisis se modifica a IDClaseAnalisis para que sea una clave foránea a ClaseAnalisis.
Ahora la tabla Analisis puede incluir una clave foránea a ClaseAnalisis.
Se modifica además el nombre de la tabla EstudioAnalisis por ResultadoAnalisis por ser más adecuado al propósito de ésta.
En resumen:
1. Un paciente se puede realizar muchos análisis.
2. Muchos análisis responderán a una misma clase. Es decir, para una clase de análisis pueden existir muchos análisis.
3. Un análisis contiene muchos resultados, de diferentes tipos.
4. Para un mismo tipo de análisis se podrán encontrar muchos resultados.
5. Para una clase de análisis se aplican diversos tipos de análisis en estudio.
¿Que les parece?
Saludos,
#19
Escrito 16 mayo 2009 - 06:13
Cuando vas al médico te puede mandar a hacerte un chequeo de rutina, generalmente te hacen "análisis de sangre" y de "orina"
Los de sangre incluyen:
eritoricitos
hemoglobina
hematócrito
leucocitos
neutrófilos en cayado
n. segmentados
n. eosinófilos
n. basófilos
linfocitos
monocitos
células de irritación
y
glucemia
colesterolemia
uremia
uricemia
triglicéridos
No obstante para otro clase de estudios se requieren estudios adicionales:
Si es un estudio proevio a una cirugía te pueden pedir:
Tiempo de hemorragia
tiempo de coagulación
...
...
recuento de plaquetas
este último usado en análisis para detectar el Dengue también
Otros más:
eritrosedimentación
1ra hora
2da hora
índice de Katz
Otros varios más
Creatinina
Calcemia
Amilasemia
etc
el de "orina" incluye:
el exámen físico:
color
aspecto
sedimento
etc
Elementos formes:
Células
Leucocitos
Hematíes
etc
En casos de infección se puede realizar un urocultivo para identificar que microorganismo es el que produce la infección
Tipificación
Recuento de colonias
y por último el antibiograma
se da información a que antibióticos es sensible el microbio en cuestión
No se si este jerogífico responde a tu pregunta
Sensibles: 1°
Sensibles: 2°
etc
Saludos
#20
Escrito 16 mayo 2009 - 03:26
Entonces podemos decir que no siempre se llevan a cabo todos los tipos de análisis. Depende de lo que se necesita. El diseño que yo he propuesto contempla esto: permite tener tanto registros como tipos de análisis se requieran. De este modo se evita tener tablas con demasiados campos que en ocasiones no se llenan.
A fin de tener registrada las "cateogrías" de los exámenes, se puede añadir una tabla llamada CategoriaAnalisis:
+-----------+ +----------+ +-------------------+ +--------------+ | Pacientes |-1---M-| Analisis |-1---M-| ResultadoAnalisis |-M---1-| TipoAnalisis | +-----------+ +----------+ +-------------------+ +--------------+ | | | | +---------------+ | | +---------M---1-| ClaseAnalisis |---1---M-------+ | +---------------+ | | +-------------------+ | | CategoriaAnalisis |-1---M-----------+ +-------------------+
Pero este diseño tal vez no sea el más adecuado. Considero que es mejor establecer la relación de Categoria con Clase:
+-----------+ +----------+ +-------------------+ +--------------+ | Pacientes |-1---M-| Analisis |-1---M-| ResultadoAnalisis |-M---1------------------| TipoAnalisis | +-----------+ +----------+ +-------------------+ +--------------+ | | | +---------------+ +-------------------+ | +-------M---1-| ClaseAnalisis |-1---M-| CategoriaAnalisis |-1---M--+ +---------------+ +-------------------+
De este modo podemos decir que:
1. Un análisis responde a una clase.
2. Toda clase de análisis tiene una serie de categorías.
3. Por cada categoría hay unos tipos de análisis que se aplican.
De éste modo en TipoAnalisis se enlistan todos los análisis posibles. La clasificación de los mismos está dada por la tabla ClaseAnalisis.
Por ejemplo, para el caso de sangre tenemos:
Clase: Sangre
Categoria 1: eritrosedimentación
Tipo de análisis 1: 1ra Hora
Tipo de análisis 2: 2ra Hora
Tipo de análisis 3: Indice de Kantz
Categoría 2: .....
Es decir, si lo pudiéramos representar de forma "árbol" veríamos algo así:
1. Clase 1
1.1. Categoría 1.1
1.1.1.Tipo Análisis 1.1.1
.......
1.1.n.Tipo Análisis 1.1.N
1.n. Categoría 1.N
1.n.1.Tipo Análisis 1.N.1
1.n.n. Tipo Análisis 1.N.N
....
N. Clase N
Este diseño es lo bastante flexible como para poder añadir muchas clases, categorías y tipos de análisis.
Tu puedes diseñar el sistema para que con simples consultas y en base a algunas opciones que indique el usuario extraer los tipos de análisis que se deben realizar para cada categoría y clase de análisis que se piden.
Saludos,