Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Struktura tabeli opisującej atrybuty obiektów z innej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
awakening
Witam,

mam pewien problem, nie wiem czy uda mi się tutaj go dobrze przedstawić, ale spróbuję:

Posiadam tabelę zawierającą listę pewnych obiektów, do każdego z tych obiektów muszę przypisać bardzo dużą liczbę różnych atrybutów, na zasadzie - do id obiektu przypisany jest id atrybutu z innej tabeli (mam tabelę gdzie jest ponad 100 różnych atrybutów w trzech kategoriach), domyślam się, że sposób z utworzeniem dodatkowych kolumn w tabeli z obiektami i przechowywaniem tam id obiektów jest niezbyt rozsądny, chciałbym rozwiązać to w ten sposób:

tworzę nową tabelę o następującej strukturze:


Kod
+---+-----------+--------+-----------+----------+
|ID | OBJECT_ID | ATR_ID | ATR_NAME  | ATR_TYPE |
+---+-----------+--------+-----------+----------+
| 1 |    10     |   1    | atrybut 1 |    1     |
| 2 |    10     |   5    | atrybut 2 |    1     |
| 3 |    10     |   3    | atrybut 8 |    1     |
| 4 |    10     |   15   | atrybut 4 |    3     |
| 5 |    10     |   8    | atrybut 5 |    2     |
| 6 |    02     |   21   | atrybut 7 |    2     |
+---+-----------+--------+-----------+----------+



Tylko teraz pytanie czy jeżeli będę miał np. 1000 obiektów do każdego obiektu będzie przypisane powiedzmy średnio 50 atrybutów co daje nam 50 tyś rekordów w tabeli z atrybutami obiektów, czy to nie skilluje bazy? Można to rozwiązać w jakiś inny sposób? Dzięki za pomoc, pozdrawiam.
erix
Jeśli masz dobrze pozakładane indeksy, to nie powinno być problemu.
awakening
a co jak baza obiektów się rozrośnie o kolejny tysiąc albo dwa? nie ma na to innych rozwiązań?
erix
Spokojnie, są bazy, które wytrzymują i setki tysięcy.

Po to zostały zaprojektowane, żeby z nich korzystać. Na mocniejszych systemach są takie, które trzymają i kilka milionów z czasem selectów max kilka sekund.

Najważniejsze: indeksy, indeksy i jeszcze raz indeksy. Bez tego i sto rekordów będzie katorgą.
destroyerr
Możesz polecić dobre materiały opisujące problem indeksów, jak zakładać żeby było dobrze i żeby nie przedobrzyć?
erix
Pod latarnią najciemniej? http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
awakening
Czyli logicznie rzecz biorąc powinienem założyć indexy na kolumnę OBJECT_ID i ATR_ID, dobrze myślę?
erix
Masz EXPLAIN, to będziesz wiedział. [;
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.