sql >> Databáze >  >> RDS >> Mysql

Jak uložit 60 booleanů do databáze MySQL?

Samostatný sloupec pro každou hodnotu je flexibilnější, pokud jde o vyhledávání.

Samostatná tabulka klíč/hodnota je flexibilnější, pokud mají různé řádky různé kolekce booleovských hodnot.

A pokud

  1. váš seznam booleovských hodnot je víceméně statický
  2. všechny vaše řádky mají všechny tyto booleovské hodnoty
  3. Vaše hledání kritické pro výkon je najít řádky, ve kterých jsou některé hodnoty nepravdivé

pak použití textových řetězců jako '1001010010' atd. je dobrý způsob, jak je uložit. Můžete hledat takto

 WHERE flags <> '11111111'

abyste našli řádky, které potřebujete.

Můžete použít BINARY sloupec s jedním bitem na příznak. Ale váš stůl se bude snáze používat pro běžné dotazy a kontrolu oční bulvy, pokud použijete text. Úspora místa díky použití BINARY místo CHAR nebude významná, dokud nezačnete ukládat mnoho milionů řádků.

upravit Je třeba říci:pokaždé, když jsem něco takového postavil s poli booleovských atributů, byl jsem později zklamán, jak nepružné se to ukázalo. Předpokládejme například, že to byl katalog žárovek. Na přelomu tisíciletí mohly booleovské vlajky vypadat jako

screw base
halogen
mercury vapor
low voltage

Pak se věci změní a já zjistím, že potřebuji více booleovských příznaků, jako,

LED
CFL 
dimmable
Energy Star

atd. Najednou moje datové typy nejsou dost velké na to, aby udržely to, co potřebuji. Když jsem napsal „váš seznam booleovských hodnot je víceméně statický“, myslel jsem tím, že neočekáváte, že by se během životnosti vaší aplikace mohly změnit vlastnosti žárovky.

Takže samostatná tabulka atributů možná být lepším řešením. Měl by tyto sloupce:

   item_id           fk to item table         -- pk
   attribute_id      attribute identifier     -- pk
   attribute_value   

To je nakonec flexibilní. Můžete pouze přidat nové vlajky. Můžete je přidat ke stávajícím položkám nebo k novým položkám kdykoli během životnosti vaší aplikace. A každá položka nepotřebuje stejnou sbírku vlajek. Můžete napsat "jaké položky mají nějaké falešné atributy?" dotaz takto:

 SELECT DISTINCT item_id FROM attribute_table WHERE attribute_value = 0

Ale musíte být opatrní, protože dotaz "které položky mají chybějící atributy" je mnohem těžší napsat.



  1. Jak bezpečně ukládat soubory na server

  2. Je substr nebo LIKE rychlejší v Oracle?

  3. Bourejte zdi! Jak uvolnit vaše data

  4. Připojení Visual COBOL k MySQL