Quando si progetta uno schema di database relazionale per applicazioni web, trovo spesso un caso in cui finisco per creare una tabella solo per contenere una riga e solo una riga. Sembra che sia il modo sbagliato di progettarlo, ma non riesco a trovare nulla di significativamente migliore, o ovviamente "il modo giusto per farlo".
Un esempio recente è un sito che consente agli utenti di controllare manualmente il contenuto sulla home page. Bene, c'è solo una pagina iniziale. Ho creato una tabella con tutti i campi necessari per creare la home page, ad esempio un campo di testo per un'area che conteneva testo descrittivo. Un campo per memorizzare il nome di un grande file immagine. Alcune chiavi esterne che rimandano agli articoli presenti nella home page, ecc. Funziona, ma è sbagliato avere una tabella con una sola riga.
In passato ho provato molti altri progetti, come ad esempio consentire più righe nella tabella della home page e selezionarne una a caso. Ho provato ad aggiungere un campo booleano denominato "attivo" e selezionare una delle home page attive a caso. Ho provato a forzare solo una riga ad essere attiva in qualsiasi momento nella logica dell'applicazione. Non ho nemmeno provato a creare una tabella della home page e ad avere tutti gli altri elementi, come gli articoli, per avere campi booleani con nomi come featured_on_homepage.
Nella maggior parte dei casi potrei creare la homepage con un gruppo di costanti in un file di impostazioni. Il problema principale con il file delle impostazioni è che è sotto il controllo dello sviluppatore. Perché qualcosa come il contenuto della homepage è qualcosa che deve essere modificato dall'utente, deve andare nel database.
Su molti siti, non ho questo problema perché posso costruire cose come la homepage con una query come selezionare i cinque articoli più recenti. Ma quando ho pagine che sono curate manualmente con requisiti rigorosi, diventa complicato modellarla nel database. Ma immagina di avere un tavolo fotografico e un tavolo di articoli. Il requisito è che nella home page vengano visualizzate esattamente cinque foto, esattamente tre articoli e due blocchi di testo arbitrario controllati manualmente dall'utente. Come si modella quello nel database nel modo giusto?
Inoltre, ho questo problema di modellazione in molti altri casi oltre alle home page. È solo l'esempio più facile e generalmente applicabile che potrei trovare.