@ La risposta di Samuel va bene, tuttavia mi piace fare l'avvocato del diavolo qui e discutere per un punto di vista leggermente diverso. IMHO
È - più o meno - una questione di gusti.
-
Se memorizzi uno o sette interi per record in un database sarà probabilmente trascurabile per qualsiasi tipo di applicazione del mondo reale, a patto che non ti aspetti di gestire diversi miliardi di promemoria, quindi "Risorse" è non proprio rilevante qui (nota, per questo specifico caso d'uso, è molto probabile che il numero di valori booleani rimarrà 7, per l'intera durata della tua applicazione).
-
Le query per un giorno della settimana dato dinamicamente quando si usa una colonna al giorno ottengono un po ' longish , ma non molto più complex di quando si usa un array di bit. Una query come
SELECT * FROM reminders WHERE
Monday=:x1 AND
Tuesday=:x2 AND
Wednesday=:x3 AND
...
Sunday =:x7
è ovviamente più lungo di SELECT * FROM reminders WHERE DaysArray=:x
, e devi inizializzare gli argomenti booleano / intero da x1 a x7 nel codice ai valori corretti per un dato giorno della settimana, tuttavia, non lo chiamo "più complesso". In effetti, una colonna di bitarray non è al 100% autodocumentante, dal momento che non è ovvio se i giorni sono ordinati da sinistra a destra o da destra a sinistra, o se il primo si riferisce alla domenica o al lunedì.
- utilizzando una tabella aggiuntiva 'reminder_days' consente query più brevi rispetto a una soluzione con sette colonne individuali, ma queste sono più complesse che per gli altri due approcci. Sarebbe chiaramente preferibile se ci fosse una possibilità che i record di "reminder_day" diventassero soggetti a cambiamenti, ma per questo caso, penso che anche questa sarà solo una questione di gusti.
Quindi, se ho tre soluzioni quasi equivalenti, probabilmente preferirei usare quella in cui ho il minor numero di codice da digitare, dato che sono un tipo pigro e sono abituato ai bitarray. Ma altre persone potrebbero pensare in modo diverso e preferire una soluzione in cui i nomi dei giorni della settimana si verificano esplicitamente come nomi di colonna o record nel database.
Quindi non c'è ovviamente una soluzione "migliore", nessuno dei tre funzionerà, e ognuno di essi ha alcuni pro e contro. Scegli la tua scelta.