Lors de la conception d'un schéma de base de données relationnelle pour des applications Web, je trouve souvent un cas où je finis par créer une table juste pour contenir une ligne et une seule ligne. Il me semble que ce n'est pas la bonne façon de le concevoir, mais je ne peux rien trouver de mieux que ça, ou c'est évidemment "la bonne façon de le faire".
Un exemple récent est un site qui permet aux utilisateurs de contrôler manuellement le contenu de la page d'accueil. Eh bien, il n'y a qu'une seule page d'accueil. J'ai créé une table qui avait tous les champs nécessaires pour construire la page d'accueil, comme un champ de texte pour une zone contenant du texte descriptif. Un champ pour stocker le nom d'un gros fichier image. Certaines clés étrangères qui pointent vers des articles qui seront présentés sur la page d'accueil, etc.
Dans le passé, j'ai essayé de nombreux autres modèles, comme autoriser plusieurs lignes dans le tableau de la page d'accueil et en sélectionner une au hasard. J'ai essayé d'ajouter un champ booléen nommé "actif" et de sélectionner au hasard l'une des pages d'accueil actives. J'ai essayé de forcer une seule ligne à être active à un moment donné dans la logique d'application. J'ai essayé de ne même pas créer un tableau de page d'accueil et d'avoir tous les autres éléments, tels que des articles, pour avoir des champs booléens avec des noms comme en vedette sur la page d'accueil.
Dans la plupart des cas, j'ai pu créer la page d'accueil avec un tas de constantes dans un fichier de paramètres. Le principal problème avec le fichier de paramètres est qu'il est sous le contrôle du développeur. Parce que quelque chose comme le contenu de la page d'accueil doit être modifié par l'utilisateur, il doit aller dans la base de données.
Sur de nombreux sites, je n'ai pas ce problème car je peux créer des choses comme la page d'accueil avec une requête telle que la sélection des cinq derniers articles. Mais lorsque j'ai des pages gérées manuellement avec des exigences strictes, il devient difficile de les modéliser dans la base de données. Mais imaginez que vous avez une table photo et une table article. La condition requise est que la page d'accueil affiche exactement cinq photos, exactement trois articles et deux blocs de texte arbitraire contrôlés manuellement par l'utilisateur. Comment modélisez-vous cela dans la base de données de la bonne façon?
En outre, j'ai ce problème de modélisation dans de nombreux autres cas en plus des pages d'accueil. C'est juste l'exemple le plus simple et le plus généralement applicable que j'ai pu trouver.