SQL (non solo mySQL) non è adatto per operazioni bit a bit. Se si esegue un bit AND, si imporrà una scansione della tabella poiché SQL non sarà in grado di utilizzare alcun indice e dovrà controllare ogni riga una alla volta.
Sarebbe meglio se si creasse una tabella "Categorie" separata e una tabella PostingCategoria molti-a-molti indicizzata per connettere i due.
UPDATE
Per le persone insistendo sul fatto che i campi bitmap non sono un problema, aiuta a controllare Joe Celko di BIT of a Problem. In fondo all'articolo c'è una lista di problemi seri causati da bitmap.
Per quanto riguarda il commento che una dichiarazione generale non può essere giusto, nota # 10 - si rompe 1NF quindi sì, campi bitmap sono cattivi:
- I dati sono illeggibili. ...
- I vincoli sono un b #### per scrivere ....
- Sei limitato a due valori per campo. Questo è molto restrittivo; anche il codice ISO ISO non può essere inserito in una colonna del genere ...
- Non c'è alcun elemento temporale nella maschera di bit (o nei flag di bit singoli). Ad esempio, un flag "is_legal_adult_flg" ... Una DATA per la data di nascita (solo 3 byte) manterrebbe il fatto completo e calcoliamo ciò che dobbiamo sapere; sarebbe sempre corretto anche ...
- Si scoprirà che l'utilizzo dei flag tenderà a dividere lo stato di un'entità su più tabelle ....
- I bit flag invitano la ridondanza. Nel sistema che ho appena menzionato, avevamo "is_active_flg" e "is_completed_flg" nella stessa tabella. Un'asta completata non è attiva e vice versa. È lo stesso fatto in due bandiere. La psicologia umana (e la lingua inglese) preferisce ascoltare una frase affermativa (ricorda la vecchia canzone "Sì, non abbiamo banane oggi!"?). Tutti questi flag di bit e la convalida della sequenza vengono sostituiti da due serie di tabelle di transizione di stato, una per le offerte e una per le spedizioni. Per dettagli sui vincoli di transizione dello stato. La storia di ogni asta è ora in un posto e deve seguire le regole di business.
- Nel momento in cui si disassembla una colonna di maschera di bit e si eliminano i campi non necessari, le prestazioni non saranno migliorate su tipi di dati più semplici.
- Raggruppare e ordinare i singoli campi è un vero dolore. Provalo.
- Devi indicizzare l'intera colonna, quindi a meno che tu non sia fortunato e li abbia nel giusto ordine, sei bloccato con le scansioni delle tabelle.
- Poiché un bit mask non è in First Normal Form (1NF), si hanno tutte le anomalie che si desidera evitare in RDBMS.
Vorrei anche aggiungere, per quanto riguarda i valori NULL? Che dire di senza bandiere? E se qualcosa non fosse né vero né falso?
Infine, per quanto riguarda la richiesta di compressione, la maggior parte dei database racchiude i campi di bit in byte e interi internamente. Il campo bitmap non offre alcun tipo di compressione in questo caso. Altri database (ad esempio PostgreSQL) hanno effettivamente un tipo booleano che può essere vero/falso/sconosciuto. Può richiedere 1 byte ma è non un sacco di spazio di archiviazione e la compressione trasparente è disponibile se una tabella diventa troppo grande.
Infatti, se una tabella diventa grande i campi bitmap diventano molto più gravi. Salvare pochi MB in una tabella GB non è un guadagno se si è costretti a utilizzare le scansioni di tabelle o se si perde la possibilità di raggruppare
fonte
2012-02-02 19:15:56
Perché non solo una tabella aggiuntiva tra: categories_postings? Sarebbe una soluzione più a prova di futuro in quanto sembra solo un database standard di più categorie? –
Sono d'accordo con Luc, sarà più semplice mantenere una tabella aggiuntiva chiamata, diciamo, categorie_groups, che avrà una struttura come: id, category_group_name, health, marketing, personal, music ... e che manterrà sia "0"/"1" sotto ogni categoria per contrassegnare se questa categoria appartiene a questo gruppo. In questo modo sarà anche molto più facile sommare il numero di gruppi che includono la categoria "salute". – alfasin
@Luc - entrambi avete ragione - il fatto è che i dati sono pubblicati da un'applicazione esterna in cui non posso apportare modifiche. Una relazione molti-molti sarebbe la soluzione migliore ... – derRobert