Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne tworzenie pól
Forum PHP.pl > Forum > Bazy danych > MySQL
SHiP
Mam pewnien element do zaprogramowania. Przypuśćmy, ze mam tabelę m_users

Kod
+---------------------+-------------------+------+-----+---------+----------------+
| Field               | Type              | Null | Key | Default | Extra          |
+---------------------+-------------------+------+-----+---------+----------------+
| id                  | int(12)           | NO   | PRI | NULL    | auto_increment |
| login               | char(32)          | NO   |     | NULL    |                |
| password            | char(32)          | NO   |     | NULL    |                |
| email               | char(32)          | YES  |     | NULL    |                |
+---------------------+-------------------+------+-----+---------+----------------+


Teraz chciałbym ją dowolnie rozszerzać. Tak aby każdy użytkownik mógł mieć różne dodatkowe pola np.
Kod
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(20) | YES  |     | NULL    |       |
| type  | char(20) | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+


Gdzie name to nazwa pola(np "gadugadu") a type to jego typ(np "int(10)")
Teraz w 3 tabeli trzymałbym wartości. I tu jest problem ponieważ nie mogę stworzyć tabeli nie wiedząc jakiego rodzaju pola będą się w niej znajdować. Wymyśliłem, że stworzę sobie 5 tabel (jedna wartości int, drugą wartości date, trzecią wartości char, czwartą wartości text i piątą wartości boolean). Dam ROW_FORMAT=DYNAMIC Aby zoptymalizować trochę ilość zajmowanego przez nie miejsca i powinno działać. Następnie stworzę widok i będe mógł tworzyć zapytania w stylu.

  1. SELECT * FROM v_users WHERE uid = 3;


Pytanie tylko. Czy to jest dobre rozwiązanie? Może polecicie coś lepszego zanim zasiąde do kodowania winksmiley.jpg ?
erix
Cytat
Pytanie tylko. Czy to jest dobre rozwiązanie? Może polecicie coś lepszego zanim zasiąde do kodowania ?

Złe rozwiązanie. Struktury tabeli staraj się nie ruszać, gdyż przy większej ilości rekordów zajmie dużo czasu.

Zrób tabelę, która będzie przechowywać pola ID, userID, property, value. Value zapisuj jako np. varchar, a wyciąganie konkretnego typu możesz przecież zrealizować przez cast. winksmiley.jpg

Wg mnie tak by było najlepiej, choć mogę się mylić. winksmiley.jpg
SHiP
Dzięki wielkie winksmiley.jpg. Szczerze mówiąc nie wiedziałem o CAST(). Znacznie mi to ułatwi pracę smile.gif.
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-2025 Invision Power Services, Inc.