Hola a tod@s,
después de la ayuda prestada desde este foro en otro hilo abierto con anterioridad y después de haberme dado cuenta de los errores principales de planteamiento que tenía, procedo de nuevo a plantear mi problema, con otra visión, para ver si entre todos me podéis ayudar a hacer que mis bases de datos no sean un caos.
Paso a plantearos el proyecto:
El proyecto consiste en la realización de una aplicación WEB para poder registrar una serie de datos de la central eléctrica. Estos datos pueden ser del tipo, presiones, temperaturas, estado de una válvula o bomba (automático/manual, parado/marcha), vibraciones... Estos datos se van a tomar un total de tres veces al día (uno por turno de trabajo), por tanto el volumen de información va a ser grande.
Además de registrar todos estos datos quiero hacer un apartado de consulta, en el que se pueda ver de manera gráfica el estado de un equipo en concreto en una fecha o rango de fechas, o todos los equipos de un subsistema de una de las unidades etc.
En los primeros cálculos que he hecho, el número de datos que se tienen que guardar por día es de unos 1000 más o menos.
Planteamiento inicial:
Tengo una Central Térmica. Existen dos unidades (U1 y U2) exactamente iguales y después una serie de elementos comunes a las 2 que llamaré unidad3 (U3).
La unidad está dividida en cuatro grandes sistemas Turbina de Gas, Turbina de Vapor, HRSG y BOP que a su vez están divididos en subsitemas como pueden ser, vapor recalentado, vapor de sellos, generador, sistema de aceite de lubricación, sistema hidráulico... Y después cada subsistema tiene diferentes elementos como pueden ser bombas, válvulas, tuberías, transformadores, filtros, extractores, ventiladores, tanques. De todos estos elementos es de los que hay que registrar datos, por ejemplo, temperaturas de una tubería o del aceite de una bomba, presión de descarga de una bomba, presión diferencial de un filtro, porcentaje de apertura de una válvula, nivel de un tanque...
Creo que el esquema desde más grande a más pequeño quedaría tal que así: Unidad -> Subsistema -> elemento -> valor a guardar
Tablas
Teniendo en cuenta que mi conocimiento sobre BD relacionales es muy limitado y a pesar de los consejos de los foreros en el otro post he cogido los ejemplos de tablas propuestos por el usuario quimfv y hacer las tablas que creo que son necesarias para el proyecto, con sus relaciones y siguiendo el esquema anterior.
TblUsers (Esta tabla contendrá los usuarios del programa)
idOper -> PrimaryKey
nombre -> Nombre del usuario
apellidos -> Apellidos del usuario
turno -> turno al que pertenece el usuario
user -> nombre de usuario para logearse
password -> contraseña para logearse
TblUnidades
idU -> primaryKey
nombre -> nomrbre de la unidad (Unidad1, Unidad 2, Comunes)
TblStates
idState -> PrimaryKey
estado -> tipo de estado de la planta: marcha/parada/sellos y vacío
TblSistemas
idSist -> primaryKey
nombre -> nombre del sistema
idSistPadre -> id del sistema en el que está incluido. X ejemplo, el sistema de "alimentación de alta" está dentro del sistema mayor BOP1
TblElementos (Aquí quiero definir cada elemento del cual se tome algún tipo de lectura)
idE -> primaryKey
idTpE -> foreingkey a la tabla TblTpElementos
nombre -> nombre del elemento
decripcion -> descripción del elemento
idSist -> foreingkey a la tabla TblSistemas
TblTpElementos (Tabla en la que se definen los diferentes tipos de elementos, si es una bomba, un tanque, un eje, una válvula…)
idTpE -> primaryKey
tipo -> define el tipo de elemento.
TblLecturas (En esta tabla se recogerán todas las lecturas cada vez que se haga una ronda. Esta tabla crecerá del orden de 1000 filas por día, no sé si eso será un problema o no. Por lo menos el número de columnas será fijo y pequeño si consigo hacer bien todas las tablas)
idL -> primaryKey
idE -> foreingKey a TblElementos
idTpL -> foreingKey a TblTpLecturas
idU -> foreingKey a TblUnidades
idState -> foreingKey a TblStates
valor -> valor de la lectura
kks -> identificador usado en la planta, único para cada elemento leído
fecha -> día y hora
idOper -> foreingkey a TblUsers
idObj -> foreingkey al objeto representado en la interface
TblTpLecturas (en esta tabla se definirán los tipos de lecturas posibles, si es de posición, de corriente, de presión así como las unidades. La idea es que haya varios tipos de lecturas de presión en función de las unidades, por ejemplo bares, o mbares o mmH2O, o varias de caudal si es en l/h o m3/h…)
idTpL -> primaryKey
tipo -> especifica el tipo de lectura (caudal, temperatura, posición, cantidad…)
unidades -> especifica las unidades de las lecturas (m3/h, %, bar, mbar, mmH2O…)
Por ahora son estas las que he pensado. Me faltaría una tabla para relacionar qué elementos de la interface se deben mostrar en función de cada pantalla y esto relacionarlo con las lecturas claro. Quiero decir, en la primera pantalla, por ejemplo, quiero que aparezca un cuadro de texto donde yo ponga un valor, este valor es el que se guardará en la tabla de lecturas
Muchas gracias.