Podczas projektowania schematu relacyjnej bazy danych dla aplikacji internetowych często znajduję przypadek, w którym kończę tworzenie tabeli zawierającej tylko jeden wiersz i tylko jeden wiersz. Wydaje się, że jest to niewłaściwy sposób zaprojektowania go, ale nie mogę wymyślić niczego znacznie lepszego lub jest to oczywiście „właściwy sposób na zrobienie tego”.
Najnowszym przykładem jest witryna, która pozwala użytkownikom ręcznie kontrolować zawartość strony głównej. Jest tylko jedna strona główna. Utworzyłem tabelę zawierającą wszystkie pola niezbędne do zbudowania strony głównej, takie jak pole tekstowe dla obszaru zawierającego tekst opisowy. Pole do przechowywania nazwy dużego pliku obrazu. Niektóre klucze obce, które wskazują artykuły, które będą prezentowane na stronie głównej itp. Działa, ale źle jest mieć tabelę z jednym wierszem.
W przeszłości próbowałem wielu innych projektów, takich jak dopuszczanie wielu wierszy w tabeli strony głównej i wybieranie jednego losowo. Próbowałem dodać pole logiczne o nazwie „aktywne” i losowo wybrać jedną z aktywnych stron głównych. Próbowałem wymusić, aby tylko jeden wiersz był aktywny w danym momencie w logice aplikacji. Próbowałem nawet nie tworzyć tabeli strony głównej i mieć wszystkie inne elementy, takie jak artykuły, aby mieć pola boolowskie o nazwach takich jak featured_on_homepage.
W większości przypadków mogłem zbudować stronę główną z kilkoma stałymi w pliku ustawień. Główny problem z plikiem ustawień polega na tym, że znajduje się on pod kontrolą programisty. Ponieważ coś takiego jak treść strony głównej jest czymś do edycji przez użytkownika, musi przejść do bazy danych.
W wielu witrynach nie mam tego problemu, ponieważ mogę tworzyć takie rzeczy, jak strona główna za pomocą zapytania, na przykład wybierając pięć najnowszych artykułów. Ale kiedy mam strony ręcznie wyselekcjonowane według ścisłych wymagań, trudno jest modelować je w bazie danych. Ale wyobraź sobie, że masz stolik ze zdjęciami i stolik z artykułami. Wymagane jest, aby strona główna wyświetlała dokładnie pięć zdjęć, dokładnie trzy artykuły i dwa bloki dowolnego tekstu ręcznie kontrolowanego przez użytkownika. Jak we właściwy sposób modelować to w bazie danych?
Mam też ten problem z modelowaniem w wielu innych przypadkach oprócz samych stron głównych. To tylko najprostszy i najogólniej stosowany przykład, jaki mogłem wymyślić.