Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съхранявате 60 булеви числа в база данни на MySQL?

Отделна колона за стойност е по-гъвкава, когато става въпрос за търсене.

Отделна таблица ключ/стойност е по-гъвкава, ако различните редове имат различни колекции от булеви стойности.

И ако

  1. вашият списък с булеви стойности е повече или по-малко статичен
  2. всичките ви редове имат всички тези булеви стойности
  3. Вашето критично за производителността търсене е да намерите редове, в които някоя от стойностите е фалшива

тогава използването на текстови низове като '1001010010' и т.н. е добър начин да ги съхранявате. Можете да търсите по този начин

 WHERE flags <> '11111111'

за да намерите редовете, от които се нуждаете.

Можете да използвате BINARY колона с един бит на флаг. Но вашата маса ще бъде по-лесна за използване за случайни запитвания и проверка на очната ябълка, ако използвате текст. Спестяването на пространство от използването на BINARY вместо CHAR няма да бъде значително, докато не започнете да съхранявате много милиони редове.

редактиране Трябва да се каже:всеки път, когато създавах нещо подобно с масиви от булеви атрибути, по-късно бях разочарован от това колко негъвкаво се оказа. Например, да предположим, че това е каталог от електрически крушки. В началото на хилядолетието булевите знамена може да са били неща като

screw base
halogen
mercury vapor
low voltage

След това нещата се променят и откривам, че се нуждая от повече булеви флагове, като,

LED
CFL 
dimmable
Energy Star

и т.н. Изведнъж моите типове данни не са достатъчно големи, за да задържат това, което ми трябва. Когато написах „вашият списък с булеви стойности е повече или по-малко статичен“, имах предвид, че не очаквате нещо като характеристиките на електрическата крушка да се променят по време на живота на вашето приложение.

И така, отделна таблица с атрибути може бъде по-добро решение. Ще има следните колони:

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

Това в крайна сметка е гъвкаво. Можете просто да добавите нови знамена. Можете да ги добавите към съществуващи елементи или към нови елементи по всяко време от живота на вашето приложение. И всеки артикул не се нуждае от една и съща колекция от знамена. Можете да напишете "кои елементи имат някакви фалшиви атрибути?" заявка като тази:

 SELECT DISTINCT item_id FROM attribute_table WHERE attribute_value = 0

Но трябва да внимавате, защото заявката „кои елементи имат липсващи атрибути“ е много по-трудна за писане.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. емулиране на substring_index() на MySQL в PGSQL

  2. mysqldump не работи в crontab

  3. Как да конвертирам MySQL datetime в NSDate?

  4. Не мога да намеря mysql.sock

  5. Как да се свържа с MySQL на Amazon EC2 от Linux / Mac?