¿Está bien tener una tabla con una sola columna? Sé que no es técnicamente ilegal, pero ¿se considera un diseño deficiente?
EDITAR:
Aquí están algunos ejemplos:
- Tiene una tabla con los 50 códigos de estado de EE. UU. Válidos, pero no es necesario que almacene los nombres de estado detallados.
- Una lista negra de correo electrónico.
Alguien mencionó agregar un campo clave. A mi modo de ver, esta única columna SERÍA la clave principal.
sql
database-design
Aheho
fuente
fuente
Respuestas:
Sí, ciertamente es un buen diseño diseñar una mesa de tal manera que sea más eficiente. El "mal diseño de RDBMS" generalmente se centra en la ineficiencia.
Sin embargo, he descubierto que la mayoría de los casos de diseño de una sola columna podrían beneficiarse de una columna adicional. Por ejemplo, los códigos de estado normalmente pueden tener el nombre completo del estado escrito en una segunda columna. O una lista negra puede tener notas asociadas. Pero, si su diseño realmente no necesita esa información, entonces está perfectamente bien tener una sola columna.
fuente
En términos de
relational algebra
esto sería una relación unaria, que significa " esta cosa existe "Sí, está bien tener una tabla que defina dicha relación: por ejemplo, para definir un dominio.
Por supuesto, los valores de dicha tabla deberían ser claves primarias naturales.
Lo
prime numbers
primero que me viene a la mente es una tabla de búsqueda de .fuente
Los he usado en el pasado. Un cliente mío quería bloquear automáticamente a cualquiera que intentara registrarse con un número de teléfono en esta gran lista que tenía, por lo que era solo una gran lista negra.
fuente
Si existe una necesidad válida, no veo ningún problema. Tal vez solo desee mostrar una lista de posibilidades por alguna razón y desee poder cambiarla dinámicamente, pero no necesita vincularla a otra tabla.
fuente
Un caso que encontré a veces es algo como esto:
La tabla countries_id , contiene solo una columna con ID numérico para cada país.
La tabla countries_description contiene la columna con el ID del país, una columna con el ID del idioma y una columna con el nombre del país localizado.
La tabla company_factories , contiene información para cada fábrica de la empresa, incluyendo el país en el que se encuentra.
Entonces, para mantener la coherencia de los datos y los datos independientes del idioma en las tablas, la base de datos usa este esquema con tablas con una sola columna para permitir claves externas sin dependencias de idioma.
En este caso, creo que la existencia de tablas de una columna está justificada.
Editado en respuesta al comentario por: Quassnoi
(fuente: ggpht.com )
En este esquema, puedo definir una clave externa en la tabla company_factories que no me obliga a incluir la columna Language en la tabla, pero si no tengo la tabla countries_id, debo incluir la columna Language en la tabla para definir la clave externa .
fuente
Habría casos raros en los que una tabla de una sola columna tiene sentido. Hice una base de datos en la que la lista de códigos de idioma válidos era una tabla de una sola columna utilizada como clave externa. No tenía sentido tener una clave diferente, ya que el código en sí era la clave. Y no había una descripción fija, ya que las descripciones del código de idioma variarían según el idioma para algunos contextos.
En general, cualquier caso en el que necesite una lista autorizada de valores que no tengan ningún atributo adicional es un buen candidato para una tabla de una columna.
fuente
Utilizo tablas de una sola columna todo el tiempo, dependiendo, por supuesto, de si el diseño de la aplicación ya usa una base de datos. Una vez que he soportado la sobrecarga de diseño de establecer una conexión de base de datos, coloco todos los datos mutables en tablas siempre que sea posible.
Puedo pensar en dos usos de tablas de una sola columna OTMH:
1) El elemento de datos existe. Se utiliza a menudo en listas desplegables. También se utiliza para pruebas sencillas de legitimidad.
P.ej. abreviaturas de estados de EE. UU. de dos letras; Códigos postales a los que enviamos; palabras legales en Scrabble; etc.
2) Atributo binario disperso, es decir, en una tabla grande, un atributo binario que será verdadero solo para unos pocos registros. En lugar de agregar una nueva columna booleana, podría crear una tabla separada que contenga las claves de los registros para los que el atributo es verdadero.
P.ej. empleados que tienen una enfermedad terminal; bancos con un año de 360 días (la mayoría usa 365); etc.
-Alabama.
fuente
No hay problema siempre que contenga valores únicos.
fuente
Sobre todo, he visto esto en tablas de tipo de búsqueda, como la tabla de estado que describió. Sin embargo, si hace esto, asegúrese de establecer la columna como clave principal para forzar la unicidad. Si no puede establecer este valor como único, no debería utilizar una columna.
fuente
Yo diría, en general, que sí. No estoy seguro de por qué necesita solo una columna. Hay algunas excepciones a esto que he visto que se usan de manera efectiva. Depende de lo que intente lograr.
No son realmente un buen diseño cuando se piensa en el esquema de la base de datos, pero en realidad solo deberían usarse como tablas de utilidad.
He visto tablas de números que se utilizan con eficacia en el pasado.
fuente
El propósito de una base de datos es relacionar piezas de información entre sí. ¿Cómo puede hacer eso cuando no hay datos con los que relacionarse?
Tal vez se trate de algún tipo de tabla de compilación (es decir, nombre + apellido + fecha de nacimiento), aunque todavía no estoy seguro de por qué querría hacer eso.
EDITAR: Podría ver el uso de este tipo de tabla para una lista simple de algún tipo. ¿Para eso lo estás usando?
fuente
Sí, siempre que el campo sea la clave principal, como dijiste. La razón es que si inserta datos duplicados, esas filas serán de solo lectura. Si intenta eliminar una de las filas que están duplicadas. no funcionará porque el servidor no sabrá qué fila eliminar.
fuente
El único caso de uso que puedo concebir es una tabla de palabras, quizás para un juego de palabras. Accede a la tabla solo para verificar que una cadena es una palabra: seleccione la palabra de las palabras donde palabra =?. Pero hay estructuras de datos mucho mejores para mantener una lista de palabras que una base de datos relacional .
De lo contrario, los datos de una base de datos generalmente se colocan en una base de datos para aprovechar las relaciones entre varios atributos de los datos. Si sus datos no tienen atributos más allá de su valor, ¿cómo se desarrollará esta relación?
Entonces, aunque no es ilegal, en general probablemente no debería tener una tabla con una sola columna.
fuente
Todas mis tablas tienen al menos cuatro campos de tecnología, clave principal de serie, marcas de tiempo de creación y modificación y booleano de eliminación suave. En cualquier lista negra, también querrá saber quién agregó la entrada. Entonces, para mí, la respuesta es no, una tabla con una sola columna no tendría sentido excepto cuando se crea un prototipo de algo.
fuente
Sí, eso está perfectamente bien. pero un campo de identificación no podría dañarlo, ¿verdad?
fuente