¿Existe una forma más eficiente de almacenar tablas y filas sin tener que repetir ID?

Sí, hay una forma más eficiente de almacenar las etiquetas para un usuario determinado:

Columnas: ID_user, ID_tag_list
Fila: 1, 1,2,3
Fila: 2, 3,4

¿Por qué no todos hacen esto? Porque solo es bueno para consultar etiquetas para un usuario determinado.

Es posible que a veces también necesite consultar a los usuarios etiquetados con una etiqueta determinada. Es difícil buscar valores que tengan la posibilidad de aparecer en el medio de una lista como Id_tag_list. Un índice convencional no ayuda. Entonces ese tipo de consulta se vuelve costoso.

En ese caso, sería más eficiente almacenarlo de esta manera:

Columnas: ID_tag, ID_user_list
Fila: 1, 1
Fila: 2, 1
Fila: 3, 1,2
Fila: 4, 2

Entonces, ¿por qué no almacenar ambas tablas y facilitar la consulta de etiquetas para un usuario determinado o de usuarios para una etiqueta determinada? Asumir que duplicar el almacenamiento no cuenta como “ineficiente”.

Porque si alguna vez actualiza una tabla y no actualiza la otra, sus datos se convierten en basura:

Columnas: ID_user, ID_tag_list
Fila: 1, 1,2,3
Fila: 2, 3,4
Fila: 3, 1,3,4

Columnas: ID_tag, ID_user_list
Fila: 1, 1,3
Fila: 2, 1
Fila: 3, 1,2: ¿falta la ID de usuario 3?
Fila: 4, 2,4

Bien, ahora tenemos una anomalía. El usuario 3 debe tener la etiqueta 3, de acuerdo con la primera tabla, pero la segunda tabla no muestra la etiqueta 3 con el usuario 3.

Aquí está el problema: ¿Qué tabla es correcta? ¿Su aplicación tenía la intención de actualizar ambas tablas, pero falla a la mitad? ¿O alguien agregó una fila ilícita a la primera tabla?

Las bases de datos relacionales se centran en evitar anomalías, incluso si parece que el almacenamiento de datos es redundante o ineficiente.

Al almacenar las asociaciones entre usuarios y etiquetas en una tercera tabla, no hay forma de ingresar datos incorrectos en uno u otro lugar. La asociación existe exactamente en un lugar. Entonces está allí o no, pero al menos los datos no están en desacuerdo consigo mismos.

¿Por qué no probar la lista vinculada? Puede mantener una matriz de objetos de usuario (suponga que está familiarizado con OOP), cada uno con un objeto Node que apunta al encabezado de una lista vinculada.

Una lista vinculada se compone de una secuencia de nodos, cada uno tiene un puntero al siguiente nodo. Solo googlealo y pruébalo.

Otra solución sería usar matriz. Esto es un poco menos eficiente en espacio pero podría ser más rápido dependiendo de su tarea. Básicamente, crea una matriz, para la i-ésima fila, columna jth, podría almacenar 1 o 0. 1 significa que tengo una etiqueta apunta a j, y 0 significa que la etiqueta no existe.

De hecho, el problema podría resumirse como una representación del gráfico dirigido. El primer método se llama lista de adyacencia, la última matriz de adyacencia. Le recomiendo que busque estos dos términos en Google e implemente algunos ejemplos pequeños para ver cuál es el más adecuado para su proyecto.

Parece que ha tenido varias sugerencias diferentes sobre cómo solucionar este problema. Agregaré, para lo que vale, intente leer sobre normalización de datos en una base de datos relacional. Siga las reglas de normalización y nunca terminará con este tipo de problema.

Si su cardinalidad de datos es muchísima, entonces tiene redundancia por definición. La única pregunta es dónde lo aloja y cómo impacta eso en el rendimiento.

More Interesting

¿En qué casos un análisis causal es más apropiado para una empresa o departamento de investigación que el modelo predictivo?

¿Puedo trabajar como contratista / consultor independiente en el campo de la ciencia de datos?

¿Cuánto tiempo se necesita para invertir en competencias de kaggle?

Como aspirante a científico de datos, ¿qué lenguaje de programación debo aprender entre Python, R, C # y Java, dado que no tengo experiencia previa en programación? Tengo una licenciatura en economía y estadística y una maestría en administración.

¿El plan de estudios de Hack Reactor cubre alguna ciencia de datos?

¿Cómo manejan las empresas de big data la retención de datos?

¿Quién fue el primer científico de datos?

¿Cómo incorporan las empresas consultoras de alta dirección la experiencia en ciencia de datos en sus modelos de entrega actuales?

¿Cómo sabemos qué estructura de datos es mejor para el problema simplemente observando cuidadosamente el problema?

¿Cuál es la diferencia entre un científico de datos y un analista de tecnología empresarial?

Cómo conectar un proyecto de ciencia de datos con un proyecto de aplicación Django

¿Cuál es una explicación amable de GradientBoost?

¿Vale la pena aprender R, o puedo usar Python para la ciencia de datos?

¿Cómo se usa MySQL en ciencia de datos?

¿Qué credencial de ciencia de datos es más valiosa, un certificado en línea de la escuela de extensión de Harvard o un MSC en línea del Data Science Tech Institute (París)?