Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿Es posible trabajar con una base de datos mysql sin relacionar?

Estas en el tema de ¿Es posible trabajar con una base de datos mysql sin relacionar? en el foro de Mysql en Foros del Web. Mi pregunta es simple ¿Es posible trabajar con una base de datos mysql sin relacionar?, se debe a que en la empresa un desarrollador hizo ...
  #1 (permalink)  
Antiguo 19/04/2016, 16:51
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta ¿Es posible trabajar con una base de datos mysql sin relacionar?

Mi pregunta es simple ¿Es posible trabajar con una base de datos mysql sin relacionar?, se debe a que en la empresa un desarrollador hizo una plataforma donde se manejan varios tipos de usuarios, cada usuario tiene su propio perfil y a cada uno le ofrecemos por la plataforma diferentes elementos multimedias como videos, presentaciones, podcast, libro virtual, etc. Y la base de datos tiene tablas sin relacionar, no se hasta que punto sea beneficioso o acertado haberlo hecho de esa manera. Como un dato mas esperamos entre 1000 a 5000 usuarios registrados.

Gracias por vuestra respuesta.
  #2 (permalink)  
Antiguo 19/04/2016, 17:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Una base que no posee restricciones de clave foránea no puede proteger la integridad referencial. Y con eso todos los procesos de ABM pueden generar graves inconsistencias.
Para evitarlo, tendras que proteger la integridad referencial a través de la aplicación, lo que implica muchísima programación adicional y largas pruebas para asegurar que no haya errores.

La verdad, es una muy mala idea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/04/2016, 18:21
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 4 meses
Puntos: 655
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Agregando algo adicional, te vas a dar cuenta que al no tener relación y crezcan las tablas, los accesos a la información, va a ser mucho más lento.

Es la forma más tonta de trabajar usando bases de datos. Le aconsejo a esa "persona" que hizo ese modelo, que lea un libro de principios básicos de Base de Datos.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #4 (permalink)  
Antiguo 19/04/2016, 19:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Cita:
se debe a que en la empresa un desarrollador hizo una plataforma donde se manejan varios tipos de usuarios, cada usuario tiene su propio perfil y a cada uno le ofrecemos por la plataforma diferentes elementos multimedias como videos, presentaciones, podcast, libro virtual, etc.
La verdad es que nada de lo que describes presenta ninguna dificultad para hacerlo en un modelo de base relacional perfectamente construido...
La única explicación, y en eso estoy completamente de acuerdo con BrujoNic, es que ese "desarrollador" desconozca los principios más básicos de las Bases de Datos.

Sin ofender.

En un modelado muy simple y bastante antiguo (lo que describes entra en la categoría de Web 2.0), sería algo emparentado con esto:



Puedes agregarle o sacarle componentes, pero los fundamentos son mas o menos esos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 20/04/2016, 09:13
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Por favor lean lo siguiente, pues después de haber leído la información que ustedes me brindaron me comunique con el programador por correo y esto me respondió,

"Por otro lado, quiero detallarte lo siguiente:
El siempre menciona el tema de la base de datos porque es su caballito de batalla y honestamente solo me hace quedar mal y sin argumento.
El tema de las relaciones de las tablas sirve para la integridad de los datos y eso ya está asegurado desde el mismo CMS.
Utilizamos el tipo de relaciones Lógicas con "Inner Joins" que son utilizadas cuando se hacen las consultas a todas las tablas.
Si existiera algún dato suelto en la base de datos (osea que viole la integridad de la información) es porque: a) Se ingresó manualmente. b) se borró algo manualmente. ó c) Se ingresó manualmente algo que flota por algún lugar.
Si bien es cierto, como ya lo he dicho antes, las relaciones son importantes y deben implementarse, NO ES ningún motivo por el cual el sistema se caiga, porque una cosa NO ES dependiente de la otra. Es puro floro."

¿Que me pueden decir al respecto?

Última edición por crea3d; 20/04/2016 a las 09:23
  #6 (permalink)  
Antiguo 20/04/2016, 09:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Tendrías que postear un backup de las tablas de la base, es decir, base sin datos.
O bien puedes postear los CREATE TABLE de todas las tablas de la base. Tal vez puedas subirlo a un repositorio público y poner el link, si el archivo se vuelve demasiado extenso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 20/04/2016, 10:11
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Gracias por tu ayuda gnzsoloyo
  #8 (permalink)  
Antiguo 20/04/2016, 10:11
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Cita:
Iniciado por crea3d Ver Mensaje
Por favor lean lo siguiente, pues después de haber leído la información que ustedes me brindaron me comunique con el programador por correo y esto me respondió,

"Por otro lado, quiero detallarte lo siguiente:
El siempre menciona el tema de la base de datos porque es su caballito de batalla y honestamente solo me hace quedar mal y sin argumento.
El tema de las relaciones de las tablas sirve para la integridad de los datos y eso ya está asegurado desde el mismo CMS.
Utilizamos el tipo de relaciones Lógicas con "Inner Joins" que son utilizadas cuando se hacen las consultas a todas las tablas.
Si existiera algún dato suelto en la base de datos (osea que viole la integridad de la información) es porque: a) Se ingresó manualmente. b) se borró algo manualmente. ó c) Se ingresó manualmente algo que flota por algún lugar.
Si bien es cierto, como ya lo he dicho antes, las relaciones son importantes y deben implementarse, NO ES ningún motivo por el cual el sistema se caiga, porque una cosa NO ES dependiente de la otra. Es puro floro."

¿Que me pueden decir al respecto?
  #9 (permalink)  
Antiguo 20/04/2016, 10:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Cita:
Si existiera algún dato suelto en la base de datos (osea que viole la integridad de la información) es porque: a) Se ingresó manualmente. b) se borró algo manualmente. ó c) Se ingresó manualmente algo que flota por algún lugar.
Esta parte muestra la supina ignorancia de cómo debe ser diseñada una base de datos.
Precisamente, las restricciones de clave foránea están creadas (entre otras cosas) para EVITAR que alguien, por fuera o por dentro de la aplicación, pueda generar datos inconsistentes.
SI quieres administrar las FK por programación, tienes que no sólo tener una programación segura, y pruebas sumamente intensas, sino además crear procesos que revisen y aseguren la consistencia de los datos... cosa que evidentemente ese sistema no tiene.

La verdad es que, luego de más de una década que tengo dedicada a las BBDD, me resulta sombroso que alguien que se autodenomine "desarrollador" pueda afirmar semejante sarta de tonterías. Sería mejor que dijese que trabaja con el motor de tablas MyISAM, o bien que desconoce como diseñar bases de da,tos relacioanles fuertes, o incluso que lo suyo es programación, y no BBDD.

SI yo le propusiera a la empresa en la que hoy trabajo, algo semejante, perdería el trabajo en menos de una hora...

Cita:
El tema de las relaciones de las tablas sirve para la integridad de los datos y eso ya está asegurado desde el mismo CMS.
No hay CMS absolutamente seguro. La interacción entre sistemas, especialmente con las intervención de interfaces asíncronas, es proclive a generar defectos de consistencia que deben resolverse de alguna forma.
Uno de los sistemas en que trabajamos en la empresa depende de un CMS muy poderoso y muy bien programado, pero aun así en ocasiones alguno de los equipos de desarrollo del CMS mete la pata y genera problemas en una de las BBDD. Si no fuese por la integridad referencial el error se propagaría mas alla, y terminaría impactando en la facturación de la empresa, con los resultados imaginables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 20/04/2016 a las 10:30
  #10 (permalink)  
Antiguo 20/04/2016, 10:40
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Gracias, haz sido sumamente claro. Con tu venia le pasare toda tu intervención al programador anterior. Estoy preparando la BD para subirlo.
  #11 (permalink)  
Antiguo 20/04/2016, 11:28
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Esta es la DB https://www.dropbox.com/s/i9pd2wq02s...forma.sql?dl=0
  #12 (permalink)  
Antiguo 21/04/2016, 07:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Gracias por el link.
Estuve revisando a vuelo de pájaro la base que te diseñaron, y hay de entrada algunas conclusiones que surgen de allí.
Por lo pronto es un excelente ejemplo de lo que NO se debe hacer en arquitectura de datos. Un ejemplo realmente pedagógico de los errores y problemas que causa la falta de relaciones.

Algunos detalles que vi de entrada son:
1) Las tablas son InnoDB, por lo que no existe ninguna limitación para crear las relaciones.
2) La falta de FK obliga a sobrecargar las tablas con los ID que las relacionan con otras. Esto implica que un dato que se agrega o se modifica debe poblar N tablas en algún momento, y existen N casos donde puede filtrarse un error. Es una MALA práctica.
3) Al no crear las relaciones, no se puede determinar las dependencias funcionales de las tablas sin realizar un exhaustivo análisis del diseño. Eso genera costos adicionales en desarrollo, toda vez que se realiza una modificación en la aplicación o en la base.
4) Muy grave: Como el mantenimiento de la consistencia es programático, existe un excesivo acoplamiento entre base y aplicación. Ese tipo de acoplamientos son nocivos, entre otras cosas porque aumenta la posibilidad de fallos ante cualquier cambio, e imposibilita nuevos desarrollos sin tener que re-analizar todo el diseño de datos.
... y todavía no empecé a mirar los tipos de dato, de los cuales algunos ya vi que no están correctamente definidos, o al menos no lo están a nivel de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 21/04/2016 a las 07:53
  #13 (permalink)  
Antiguo 21/04/2016, 09:37
Avatar de crea3d  
Fecha de Ingreso: septiembre-2010
Ubicación: Lima, Perú
Mensajes: 43
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Te agradezco gnzsoloyo por este primer análisis, si el tiempo te da te agradecería que analices los tipos de datos y me des tus conclusiones. La verdad no se como arreglar esto pues soy frontend y no backend. Desde ya gracias.
  #14 (permalink)  
Antiguo 21/04/2016, 09:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Recién cuando salga de trabajar, a la noche, voy a poder mirar de neuvo el tema.
Ya recuperé el script y gneré el diagrama en el Workbench por reverse.
Luego te comento mi evaluacion.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 27/04/2016, 04:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿Es posible trabajar con una base de datos mysql sin relacionar?

Retomo el tema, porque estoy viendo la estructura de la base que pasaste, analizando tabla a tabla, a medida que dispongo de tiempo.

Hay, como te dije, varios errores que se ven a simple vista, algunos conceptuales y otros por desconocimiento bastante profundo de las características de MySQL.

1) Existe una enorme cantidad de relaciones circulares en esa base.
Esto significa que hay tablas que se relacionan con tablas por aparentes FK, donde la segunda a su vez parece relacionarse con la anterior también por claves. esas relaciones reflexivas son de cumplimiento imposible cuando se generan FK reales, y no tienen sentido cuando se diseñan datos.
Una relación circular del tipo A -> B -> A se considera un error de diseño grave.

2) Hay tablas como USUARIO que muestran mala normalización.
Contienen datos que deberían definirse como perfiles de aplicación, y en consecuencia pertenecen a tablas diferentes (tipo, nivel de acceso, p.e.).
Lo usual en un sistema fuerte de permisos es que los permisos se administren en perfiles, los cuales a su vez permitan determinar los accesos.

3) No existen restricciones en la tabla que impidan duplicar usuarios con diferentes perfiles.
Esto puede permitir fallas de seguridad si se saltean las restricciones de la aplicación, y dado que no hay validaciones extra, es perfectamente factible.
Solo a modo de ejemplo, el DNI de un profesor debería ser UNIQUE, pero no lo es, con lo que puedes ingresar N profesores con el mismo documento, o N veces el mismo profesor con diferentes documentos.
No hay NADA que proteja la integridad de esa tabla.

4) Diferentes tablas con solapamiento de atributos.
Tablas como la de usuario, invitado y productor, representan diferentes categorizaciones de una misma entidad, y deberían componer un sistema jerárquico, a fin de no multiplicar tablas y claves, lo que a su vez obliga a poblar ciertas tablas con N claves, cuando podrían ser menos.
Además si se concentra todo en un esquema de herencia, si bien exige que existan tablas relacionales, simplifica las consultas y las optimiza.

5) Existen tablas con aparentes FK que representan valores de rango diferente.
En otras palabras, están definidas de forma diferente a su clave referida, con lo que pueden presentarse inconsistencias imposibles de detectar.

6) El diseñador de esa base desconoce cómo funciona la representación numérica en los tipos de dato de de MySQL.
Está suponiendo que el valor entre paréntesis siguiendo al tipo de dato (p.e. INT (11) )se refiere a la longitud de la cifra a almacenar, lo que no es cierto, y el manual de referencia es muy claro en eso.
Ese valor tiene otro uso y NO RESTRINGE el rango almacenable del numero en ese campo. Además poner uno menor al máximo del tipo de columna puede generar errores en vistas y backups indetectables.

7) Ciertos campos parecen haber sido definidos al voleo (azar), sin analizar los requisitos de los datos.
Tal es el caso de de los textos para los mensajes, rutas de acceso a videos y documentos, números de teléfono; en otros casos se desconoce técnicas básicas para administrar bajas lógicas en una BBDD, como son los campos "papelera", que parecen referirse a que un determinado registro ha sido borrado de su despliegue.

Puedo seguir extendiéndome, hay mas hilo para cortar, pero creo que esto te puede dar una idea.
A mi juicio es una base hecha por alguien que tal vez sepa de programación, pero que no sabe ni trabaja en bases de datos de uso productivo con el profesionalismo que se espera.
Yo replantearía el diseño, lo desengancharía de la aplicación y procuraría asegurarle la consistencia con un correcto normalizado y restricciones de integridad.

Nunca puedes confiar en que los programadores respeten las restricciones si estas no están protegidas en la base misma.

Espero que esto te ayude.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mysql+db
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:17.