2 tablas:
- vistas
- descargas¿Puede tener 2 tablas con una estructura idéntica en un buen esquema de base de datos?
idéntica estructura:
item_id, user_id, el tiempo
¿Debo estar preocupado?
2 tablas:
- vistas
- descargas¿Puede tener 2 tablas con una estructura idéntica en un buen esquema de base de datos?
idéntica estructura:
item_id, user_id, el tiempo
¿Debo estar preocupado?
No creo que haya un problema, per se.
Al diseñar un DB hay muchos parámetros diferentes, y algunos (por ejemplo, el rendimiento) pueden tener prioridad.
Caso en cuestión: incluso si las estructuras (y supongo que la indexación) son idénticas, tal vez "vistas" tiene más registros y se accederá con más frecuencia. Esto solo podría ser una buena razón para no cargarlo con los registros de las descargas.
Además, el hecho de que sean idénticos ahora no significa que lo serán en el futuro: las vistas y las descargas son diferentes, después de todo, tarde o temprano uno o ambos podrían crecer un campo extra o dos.
Estas tablas son las mismas AHORA pero es posible que el esquema cambie en el futuro. Si representan 2 conceptos diferentes, es bueno mantenerlos separados. ¿Qué pasaría si quisiera tener una clave externa de otra tabla en la tabla de descargas pero no en la tabla de vistas, si fueran la misma tabla no podría hacer esto?
Desde el punto de vista del modelado E/R, no veo ningún problema con eso, siempre que representen dos entidades semánticamente diferentes.
Desde el punto de vista de la implementación, lo que realmente depende de cómo se va a consultar esos datos:
al considerar la posibilidad de consolidarlos int OA sola tabla también se debe tener en cuenta otros factores como:
Creo que la respuesta debe ser "depende". Como alguien más señaló, si es probable que el esquema de una o ambas tablas evolucione, entonces no. Puedo pensar bien en otros casos (simplificando el modelo de seguridad permitiendo que las aplicaciones/usuarios accedan a uno u otro).
Una vez dicho esto, yo trabajo con una base de datos donde este legado es un problema. Tenemos varias tablas idénticas para las facturas de los clientes. Los datos se mueven en ese momento en diferentes etapas del ciclo de vida del procesamiento. Hace un lío complicado cuando intenta acceder a los datos.Hubiera sido fácilmente resuelto por un indicador de estado en el esquema original, pero ahora tenemos más de 20 años de código escrito en contra de la versión multi-mesa.
Respuesta corta: depende de por qué son el mismo esquema :).
Chris Date y Dave McGoveran formalizaron el "Principle of Orthogonal Design". En términos generales, significa que en el diseño de la base de datos debe evitar la posibilidad de permitir la misma tupla en dos relvares diferentes. El objetivo es evitar ciertos tipos de redundancia y ambigüedad que podrían resultar.
Podría decirse que no siempre es totalmente práctico hacerlo y no es necesariamente claro cuando se rompe el principio. Sin embargo, sí creo que es una buena regla de orientación, aunque solo sea porque evita el problema de la lógica duplicada en el código de acceso a datos o las restricciones, es decir, es un buen principio DRY. Evite tener tablas con significados que puedan superponerse, a menos que haya alguna restricción de la base de datos que impida la duplicación entre ellos.
Depende del contexto: ¿qué es un View
y qué es un Download
? ¿Un Download
implica un View
(cómo más se descargaría)?
Es posible que tiene conceptos separados, bien definidos, pero es un olor que quisiera investigar más a fondo. Parece probable que una Vista y una Descarga estén relacionadas de alguna manera, pero su modelo no muestra nada.
La tabla de "vistas" se actualiza cada vez que un usuario ve un elemento por primera vez. La tabla de "descargas" se actualiza cada vez que un usuario descarga un elemento por primera vez. Ambas tablas pueden existir sin la otra. –
¿Está diciendo que ambas tablas tienen una clave principal 'item_id'? En este caso, los campos tienen el mismo nombre, pero no tienen el mismo significado. Uno es un 'view_id', y el otro es un 'download_id'. Debe cambiar el nombre de sus campos en consecuencia para evitar este tipo de malentendido.
"debería" es un poco fuerte, ¿no? Prefiero decir 'download.id' y' view.id' que 'download.download_id' y' view.view_id'. Parece un poco redundante repetirlo, pero creo que es bastante subjetivo, solo hay un malentendido si no puedes recordar el contexto de la tabla, lo cual es bastante improbable. – Jeriko
La principal ventaja de mi convención de "dotación dura" es que es estrictamente limita las necesidades de alias en vistas, conjuntos de registros, informes, etc. Por lo tanto, cuando tiene un conjunto de registros que contiene los campos download.id y view.id, no tiene que volver a la consulta SQL original para verificar qué alias utilizó para estos campos –
"item_id" y "user_id" son claves foráneas y una clave primaria compuesta al mismo tiempo. –
¿También tienen el mismo contenido? ¿Es una vista lo mismo que una descarga? – kgiannakakis
No puede reemplazar los dos con uno solo y aún así hacerlo semánticamente comprensible, ¿verdad? – mgamer
Algunos de los registros serán idénticos, pero su significado será diferente según la tabla en la que se encuentren. –