Quando progetto 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 qualcosa di significativamente migliore, o che è ovviamente "il modo giusto di farlo".
Un esempio recente è un sito che consente agli utenti di controllare manualmente i contenuti sulla home page. Bene, c'è solo una home page. Ho creato una tabella che aveva tutti i campi necessari per costruire la homepage, come un campo di testo per un'area che conteneva testo descrittivo. Un campo per memorizzare il nome di un file immagine di grandi dimensioni. Alcune chiavi esterne che puntano ad articoli che saranno presenti sulla homepage, ecc. Funziona, ma sembra sbagliato avere una tabella con una sola riga.
In passato ho provato molti altri progetti, come consentire più righe nella tabella della homepage e selezionarne una a caso. Ho provato ad aggiungere un campo booleano chiamato "attivo" e selezionando una delle homepage attive a caso. Ho provato a forzare solo una riga per essere attiva in un dato momento nella logica dell'applicazione. Non ho nemmeno provato a creare una tabella di homepage e avere tutti gli altri elementi, come articoli, per avere campi booleani con nomi come optional_on_homepage.
Nella maggior parte dei casi ho potuto 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 creare 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 difficile modellarlo nel database. Ma immagina di avere un tavolo per le foto e un tavolo per gli articoli. Il requisito è che la homepage visualizzi esattamente cinque foto, esattamente tre articoli e due blocchi di testo arbitrario controllati manualmente dall'utente. Come modellarlo nel database nel modo giusto?
Inoltre, ho questo problema di modellistica in molti altri casi oltre alle home page. È solo l'esempio più semplice e generalmente applicabile che potrei trovare.