Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso archiviare una matrice di valori booleani in un database MySql?

Se stai cercando un modo per farlo in un modo che sia ricercabile, allora no.

Un paio di metodi ricercabili (che coinvolgono più di 1 colonna e/o tabella):

  • Usa una serie di SET colonne. Hai un limite di 64 elementi (on/off) in un set, ma probabilmente non riesci a trovare un modo per raggrupparli.
  • Usa 3 tabelle:Items (id, ...), FlagNames(id, name) e una tabella pivot ItemFlags(item_id, flag_id). È quindi possibile eseguire query per elementi con join .

Se non è necessario che sia ricercabile, tutto ciò di cui hai bisogno è un metodo per serializzare i tuoi dati prima di inserirli nel database e annullare la serializzazione quando li estrai, quindi utilizzare una colonna char o varchar.

  • Utilizza le funzionalità integrate nella tua lingua (serializza/non serializza di PHP).
  • Concatena insieme una serie di caratteri "y" e "n".
  • Comprimete i vostri valori in una stringa (8 bit per carattere) nel client prima di effettuare una chiamata al database MySQL e decomprimeteli quando recuperate i dati dal database. Questo è il meccanismo di archiviazione più efficiente (se tutte le righe sono uguali, usa char[x], non varchar[x]) a scapito dei dati non ricercabili e del codice leggermente più complicato.