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

Jak przechowywać dane z dynamiczną liczbą atrybutów w bazie danych

Jeśli kiedykolwiek planować wyszukiwanie określonych atrybutów, kiepskim pomysłem jest ich serializacja w jednej kolumnie, ponieważ będziesz musiał użyć funkcji na wiersz, aby uzyskać informacje - rzadko jest to dobrze skalowane.

Wybrałbym twój drugi wybór. Miej listę atrybutów w tabeli atrybutów, obiekty we własnej tabeli i tabelę relacji wiele-do-wielu zwaną atrybutami obiektów.

Na przykład:

objects:
    object_id    integer
    object_name  varchar(20)
    primary key  (object_id)
attributes:
    attr_id      integer
    attr_name    varchar(20)
    primary key  (attr_id)
object_attributes:
    object_id    integer  references (objects.object_id)
    attr_id      integer  references (attributes.attr_id)
    oa_value     varchar(20)
    primary key (object_id,attr_id)

Zauważono Twoją troskę o wydajność, ale z mojego doświadczenia wynika, że ​​dzielenie kolumny jest zawsze bardziej kosztowne niż łączenie wielu kolumn. Jeśli okaże się, że występują problemy z wydajnością, złamanie 3NF jest całkowicie dopuszczalne ze względu na wydajność.

W takim przypadku zapisałbym go w ten sam sposób, ale miałbym również kolumnę z surowymi danymi serializowanymi. Pod warunkiem, że używasz wyzwalaczy wstawiania/aktualizacji, aby zachować synchronizację danych kolumnowych i połączonych, nie będziesz mieć żadnych problemów. Ale nie powinieneś się tym martwić, dopóki nie pojawi się rzeczywisty problem.

Używając tych wyzwalaczy, minimalizujesz nakład pracy tylko kiedy dane się zmienią. Próbując wyodrębnić informacje z podkolumn, wykonujesz niepotrzebną pracę nad każdym wybierz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. python 3.5 - django 1.10 - błąd instalacji mysqlclient Windows 7

  2. Jak wyświetlić obraz z bazy danych w CodeIgniterze?

  3. Jak mogę zapętlić zestaw wyników MySQL więcej niż raz, używając funkcji mysql_*?

  4. Uruchom zapytanie MySQL na zdalnej maszynie przez ssh w wierszu poleceń

  5. Jaki jest największy numer ID, który autoincrement może wygenerować w mysql