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
- váš seznam booleovských hodnot je víceméně statický
- všechny vaše řádky mají všechny tyto booleovské hodnoty
- 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.