Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przechowywać 60 wartości logicznych w bazie danych MySQL?

Oddzielna kolumna na wartość jest bardziej elastyczna, jeśli chodzi o wyszukiwanie.

Oddzielna tabela klucz/wartość jest bardziej elastyczna, jeśli różne wiersze mają różne kolekcje wartości logicznych.

A jeśli

  1. Twoja lista wartości logicznych jest mniej więcej statyczna
  2. wszystkie twoje wiersze mają wszystkie te wartości logiczne
  3. wyszukiwanie krytyczne dla wydajności polega na znalezieniu wierszy, w których którakolwiek z wartości jest fałszywa

następnie użycie ciągów tekstowych, takich jak „1001010010” itp., jest dobrym sposobem ich przechowywania. Możesz wyszukiwać w ten sposób

 WHERE flags <> '11111111'

aby znaleźć potrzebne wiersze.

Możesz użyć kolumny BINARY z jednym bitem na flagę. Ale Twój stół będzie łatwiejszy w użyciu do zwykłych zapytań i kontroli gałek ocznych, jeśli użyjesz tekstu. Oszczędność miejsca dzięki użyciu BINARY zamiast CHAR nie będzie znacząca, dopóki nie zaczniesz przechowywać wielu milionów wierszy.

edytuj Trzeba powiedzieć:za każdym razem, gdy budowałem coś takiego z tablicami atrybutów logicznych, później byłem rozczarowany tym, jak nieelastyczne okazywało się to. Załóżmy na przykład, że był to katalog żarówek. Na przełomie tysiącleci flagi logiczne mogły wyglądać jak

screw base
halogen
mercury vapor
low voltage

Potem wszystko się zmienia i potrzebuję więcej flag logicznych, na przykład

LED
CFL 
dimmable
Energy Star

itp. Nagle moje typy danych nie są wystarczająco duże, aby pomieścić to, czego potrzebuję. Kiedy napisałem „Twoja lista wartości logicznych jest mniej więcej statyczna”, miałem na myśli to, że nie spodziewasz się, że coś takiego jak charakterystyka żarówki zmieni się w trakcie życia Twojej aplikacji.

Tak więc osobna tabela atrybutów może być lepszym rozwiązaniem. Miałby to następujące kolumny:

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

To jest ostatecznie elastyczne. Możesz po prostu dodać nowe flagi. Możesz dodać je do istniejących elementów lub do nowych elementów w dowolnym momencie życia aplikacji. I każdy przedmiot nie wymaga tej samej kolekcji flag. Możesz napisać "jakie przedmioty mają jakieś fałszywe atrybuty?" zapytanie w ten sposób:

 SELECT DISTINCT item_id FROM attribute_table WHERE attribute_value = 0

Ale musisz być ostrożny, ponieważ zapytanie „jakie elementy mają brakujące atrybuty” jest znacznie trudniejsze do napisania.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hibernacja natywnego błędu zapytania SQL

  2. Wydajny model danych dla zapytań o zakres

  3. MySQL Workbench:Błąd w zapytaniu (1064):Błąd składni w pobliżu „VISIBLE” w wierszu 1

  4. Monitorowanie używanych połączeń w mysql w celu debugowania „zbyt wielu połączeń”

  5. mySQL:podzapytanie do tablicy?