Cześć,
temat wątku wyjątkowo nietrafny, ale nie ciężko mi określić o co chodzi w kilku słowach.

Powiedzmy, że w bazie danych mamy przechowywane cechy jakiegoś urządzenia - niech będzie to przykładowo płyta główna, no i w jednej tabeli zdefiniujmy dla niej kilka atrybutów:
Kod
+----+---------------+--------------------+
| id | id_urządzenia | atrybut            |
+----+---------------+--------------------+
| 1  | 75            | Ilość slotów PCI-E |
+----+---------------+--------------------+
Do tego jeszcze druga tabela z wartością - już standardowe: atrybut_id, wartość.

Wszystko byłoby banalnie proste, gdyby nie fakt, że kolumna wartość może być typu: VARCHAR, TEXT, INTEGER, BOOLEAN, DECIMAL czy FLOAT (chociaż kto wie czy w przyszłości nie doszłyby tam jeszcze inne typy).

Na ten problem jest kilka rozwiązań:
1) Dodać kolumnę TYP i przy przetwarzaniu danych stosować CONVERT() - odpada, ze względu na wydajność
2) Ustawić kilkanaście kolumn: wartosc_varchar, wartosc_int, wartosc_text itd oraz oczywiście TYP. Jedna kolumna ma wartość, reszta na NULL
3) Utworzyć wiele tabel: wartosc_atrybutu_text, wartosc_atrybutu_int itd z kolumnami: atrybut_id, wartosc. W pierwszej tabeli dodać kolumnę TYP.

Trzecie rozwiązanie wydaje mi się najsensowniejsze, chociaż wiem, że będą problemy z pobraniem danych. Dane muszą być pobierane jednym zapytaniem (bo nie będę mógł sobie pozwolić na pętle N urządzeń + M atrybutów). Nie można z tego co wiem skorzystać z CASE dla nazwy tabeli (co jest zresztą zrozumiałe), można za to nawalić LEFT JOINów, ale to raczej nie jest do końca rozwiązaniem.

Jakieś pomysły?

PS. Byłbym nawet bardziej wdzięczny za linki do materiałów w sieci. Z tego co pamiętam nawet tutaj na forum był taki wątek, ale nie mogę nic znaleźć (nie za bardzo wiem pod jaką frazą szukać).
PS2. Problem nie jest związany z jakimś konkretnym DBMSem - chociaż docelowo najprawdopodobniej będzie to realizowane pod MySQLem.

EDIT: Jak się okazało nazywa się to EAV Modeling - jeśli jednak, ktoś ma się czymś ciekawym podzielić... smile.gif