Al diseñar un esquema de base de datos relacional para aplicaciones web, a menudo encuentro un caso en el que termino creando una tabla solo para contener una fila y solo una fila. Parece que esa es la forma incorrecta de diseñarlo, pero no puedo encontrar nada significativamente mejor, o esa es obviamente "la forma correcta de hacerlo".
Un ejemplo reciente es un sitio que permite a los usuarios controlar manualmente el contenido en la página de inicio. Bueno, solo hay una página de inicio. Creé una tabla que tenía todos los campos necesarios para construir la página de inicio, como un campo de texto para un área que contenía texto descriptivo. Un campo para almacenar el nombre de un archivo de imagen grande. Algunas claves externas que apuntan a artículos que aparecerán en la página de inicio, etc. Funciona, pero se siente mal tener una tabla con solo una fila.
En el pasado, probé muchos otros diseños, como permitir varias filas en la tabla de la página de inicio y seleccionar una al azar. Intenté agregar un campo booleano llamado "activo" y seleccionar una de las páginas de inicio activas al azar. Intenté forzar solo una fila para estar activa en un momento dado en la lógica de la aplicación. He intentado ni siquiera hacer una tabla de página de inicio y tener todos los demás elementos, como artículos, para tener campos booleanos con nombres como Featured_on_homepage.
En la mayoría de los casos, podría construir la página de inicio con un montón de constantes en un archivo de configuración. El principal problema con el archivo de configuración es que está bajo control del desarrollador. Debido a que algo como el contenido de la página de inicio es algo que debe editar el usuario, debe ir a la base de datos.
En muchos sitios, no tengo este problema porque puedo crear cosas como la página de inicio con una consulta, como seleccionar los cinco artículos más nuevos. Pero cuando tengo páginas que se seleccionan manualmente con requisitos estrictos, se vuelve difícil modelarlo en la base de datos. Pero imagina que tienes una mesa de fotos y una mesa de artículos. El requisito es que la página de inicio muestre exactamente cinco fotos, exactamente tres artículos y dos bloques de texto arbitrario controlados manualmente por el usuario. ¿Cómo modelas eso en la base de datos de la manera correcta?
Además, tengo este problema de modelado en muchos otros casos además de las páginas de inicio. Es el ejemplo más fácil y generalmente aplicable que se me ocurrió.