Solo para ser claro.
La mejor manera es con una columna en cada tabla desde la que desciende la fuente.
Y he aquí por qué ...
"¿No debería preocuparse por el espacio cuando Guardar datos en una base de datos?"
La respuesta corta es no. La respuesta más larga es de lo que debe preocuparse es el rendimiento. Centrarse en el espacio te llevará a hacer cosas muy malas.
Cosas malas que harás si el espacio es una preocupación.
- Vas a enterrar el significado en las claves principales. es decir, llaves inteligentes.
- Intentará almacenar múltiples valores en una columna.
- podrás índice de demasiado poco
- (Sin duda se podría crear una lista de 50 malas prácticas que ahorran espacio)
Supongamos que hay 50 tiendas (caja de selección con 50 valores posibles) . En este caso , para almacenar el defecto de la tienda que necesidad 50 campos booleanos,
Bueno, es UNO columna booleana. Existe en cada fila.
Déjame preguntarte esto. Si creó una tabla con 1 columna de fecha e insertó 1 fila, ¿cuánto espacio usaría en el disco?
Si dice que tiene 7 u 8 bytes, se desactiva aproximadamente 1000 veces.
La unidad más pequeña de espacio en disco es un bloque. Los bloques son de 8 kb típicos (el puede ser tan pequeño como de 2 kb del tamaño de 32kb, en general (sin peros aquí, los límites reales no son importantes))
Digamos que usted ha 8kB bloques entonces su columna 1, 1 fila la tabla toma 8Kb. Si inserta otras 999 filas, aún ocupará 8 KB. (De nuevo sin peros hay sobrecarga por bloque y por fila - es un ejemplo)
Así que en su tabla de consulta con 50 nombres de las tiendas, la probabilidad de que la adición de 50 bytes al tamaño de las fuerzas de mesa que le permite ampliar de 1 bloque a 2 es delgado o nulo y completamente irrelevante.
Por otro lado, su tabla predeterminada ciertamente ocupará al menos un bloque adicional. Pero el peor golpe al RENDIMIENTO es que su llamada para completar un menú desplegable necesitará dos viajes redondos a la base de datos, uno para obtener la lista y el otro para obtener el valor predeterminado. (sí, puede hacer esto en uno pero vaya con él)
Así que ha ahorrado exactamente cero espacio y duplicó su tráfico de red.
Ya ves lo que digo.
Otra fundamental razón para dejar de preocuparse por el espacio es estás dando claridad. piense en el desarrollador que va a contratar para ejecutar esta aplicación. Cuando se une al equipo y mira la base de datos, imagina los dos escenarios.
- Hay una columna booleana llamada DEFAULT_VALUE
- Hay una tabla sin relaciones con cualquier cosa que se nombran Default_Values
se le pregunta a construir una nueva para con un desplegable de 'tienda'.
En el escenario 1, encuentra la tabla de la tienda, conecta el menú desplegable a una consulta simple de la tabla y utiliza el campo default_value para seleccionar el valor inicial.
En el escenario 2, sin algún entrenamiento, ¿cómo sabría él buscar una tabla separada? Tal vez él vería la mesa, pero para el momento en que está contratando, su modelo de datos ahora tiene cientos de tablas.
De nuevo, un poco inventado pero el punto es sobresaliente. La claridad en la base de datos está bien, vale la pena un byte por fila.
material técnico
No soy un chico de MySQL, pero en Oracle, una columna nulo al final de una fila no ocupan espacio adicional. En Oracle usaría un Varchar2 (1) y dejaría 'T' = Predeterminado y dejaría los otros nulos. Eso tendría el efecto de usar solo 1 byte de suma total, y no por fila. YMMV con MySQL, puede plantear esa pregunta por separado si no puede Google la respuesta.
Pero el momento de preocuparse es en millones de filas, no en cientos. Cualquier tabla que alimenta un menú desplegable nunca será lo suficientemente grande como para comenzar a preocuparse por los bytes adicionales.
En primer lugar, ¿qué hace el valor predeterminado? En segundo lugar, ¿es un valor predeterminado por mesa o uno por mesa por usuario? Cuando dice (para que el usuario pueda cambiarlos) hace que parezca que CADA usuario tendría un conjunto de valores predeterminados. ¿O quiere decir que un usuario de ADMIN podría cambiar el valor predeterminado? ¿Por qué se opone a una columna is_default? ¿Cuál sería el problema con eso? –
En mi caso, cada tabla almacena todos los valores posibles de un cuadro de selección. Hay un valor predeterminado en cada cuadro de selección (o nulo si no hay un valor predeterminado). No me molestan los usuarios Supongamos que solo hay un usuario (como administrador) que puede cambiar el valor predeterminado. En cuanto a la columna 'is_default': supongamos que hay 50 tiendas (seleccione el cuadro con 50 valores posibles). En este caso, para almacenar la tienda predeterminada necesita 50 campos booleanos, en lugar de 1. En otras palabras, no quiero gastar espacio. ¿No debería preocuparme por el espacio cuando guardo datos en una base de datos? –
¿Cómo desea que funcione el valor predeterminado? ¿Es para la interfaz de usuario, por lo que el cuadro de selección de Tiendas está predeterminado en Ebay? ¿O es para el back-end de la base de datos, para que almacene Ebay para la tienda si el usuario no ha seleccionado una tienda? –