2016-01-15 16 views
5

Używam MySQL jako bazy danych dla aplikacji Laravel. Rozważmy strukturę tabeli z following-Rozdzielanie rur a oddzielne rzędy

id brand_id numbers

Zważywszy na przeciw każdego brand_id istnieje około 5k numery. Jestem pewien, pomiędzy następującymi metodami

  1. przechowywać wszystkie numery 5k w pojedynczej rurze rekordu oddzielone
  2. przechowywania każdego z 5k liczb jako oddzielny rekord

nieświadomi tego, które podejście będzie skutkowało lepsza wydajność

+3

Polecam szybką lekturę rozdziału 2 doskonałej książki Billa Karwina [SQL Antipatterns] (http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557). (Możesz przeczytać rozdział 2 w podglądzie Amazon "Look Inside"). Konkluzja: przechowywanie rozdzielonej listy wartości w pojedynczej kolumnie jest złym pomysłem. Dopóki tworzone są odpowiednie indeksy, przechowywanie poszczególnych wartości w osobnych wierszach nie jest problemem z wydajnością. – spencer7593

+0

To było pomocne! –

+3

Jeden dodatkowy punkt. Jeśli kiedykolwiek przechowujesz ograniczoną listę w polu (prawie nigdy nie jest to dobry pomysł), użyj przecinka jako rozdzielanego. Podczas gdy wydajność będzie nadal niska (z powodu niemożności jej użytecznego indeksowania) możesz przynajmniej użyć funkcji FIND_IN_SET() – Kickstart

Odpowiedz

5

Nie wiedząc nic o Laravel, ale coś o bazach danych, moja ogólna odpowiedź brzmi, że prawie nigdy nie powinno się przechowywać więcej niż jednego elementu w jednym rekordzie w relacyjnej bazie danych - w ten sposób łamie się relational model i sprawia, że ​​dane są bardzo trudne do pracy, więc drugie podejście jest zdecydowanie lepsze. Może powinieneś przeczytać na temat funkcjonowania relacyjnych baz danych i około database normalization.

Jeśli zezwolisz, aby rekord zawierał więcej niż jeden dyskretny element, nie możesz ani utrzymywać relacji między tabelami, ani używać indeksowania w celu zwiększenia wydajności, a także tracisz wiele innych ważnych właściwości.