Zastanów się w inny sposób?
1. Czym są te trzy podane typy ogłoszeń (nieruchomości, motoryzacja, praca)? No w pierwszej kolejności są to po prostu ogłoszenia i jak każde ogłoszenie mogą one mieć swój tytuł, treść, datę publikacji, datę ważności (ew. przedział), swojego autora, są przypisane do jakiejś kategorii - to są dane wspólne dla wszystkich ogłoszeń.
2. Ogłoszenia w różnych kategoriach mają różne atrybuty - ale w sumie atrybut to atrybut: ma swoją nazwę, wartość/ci - ewentualnie jakieś informacje o tym jak wyświetlany daną wartość (przykładowo: powierzchnia mieszkania jest zawsze podawana w metrach kwadratowych czyli jest to wartość liczbowa - jednak wyświetlamy ją w formacie: %d m² - format
sprintf))
Kod
Ogłoszenia: id, id_kategorii, tytuł, treść, data utworzenia
Atrybuty: id, nazwa, typ, wielokrotnego_wyboru, format
WartościAtrybutów: id, id_atrybutu, wartość_int, wartość_double, wartość_string
TabelaŁączącaWszystkiePowyższe: id_ogłoszenia, id_atrybutu, id_wartości_atrybutu
1. Atrybuty.typ: zawiera informacje o tym czy jest to atrybut typu całkowitego (pow. mieszkania - wartość_int), zmiennoprzecinkowego (wartość_double), tekstowa (wartość_string) - takich typów może być nieco więcej
2. Atrybuty.wielokrotnego_wyboru: flaga informująca czy dany atrybut może przyjąć wiele wartości (np. atrybut "obsługiwane standardy" może przyjąć wartości Abc1, Def2, Ghi-XX2)
3. Atrybuty.format: wspomniany wcześniej format wyświetlania atrybutu, np.: "%d mm" -> "526 mm"
4. Za każdym razem gdy dla danego atrybutu pojawia się wartość, która wcześniej nie wystąpiła wprowadzasz ją do WartościAtrybutów
5. WartościAtrybutów ma niezbyt ładną strukturę, ale daje ona całkiem dobrze radę (lepiej niż osobna tabela na każdy typ wartości) - ma jednak swoje ograniczenia
Cytat
- druga specyfikacje ogloszenia - w tym trzymalbym id ogloszenia, nazwe specyfikacji i np wartosc tej specyfikacji, czyli
id | nazwa specyfikacji | wartosc specyfikacji
1 | pojemnosc silnika | 1.8 litra
Utrzymanie takiej struktury jest wyjątkowo niewydajne i ciężkie - a przy wyszukiwaniu czy wielojęzycznym interfejsie można się...
Cytat
Ewentualnie jedna tabela na zasadzie np tutul, osoba kontaktowa, ... i specyfikacje, gdzie specyfikacje laczysz implodem czyli np ogloszenie nieruchomosci
id | tytul | Osoba kontaktowa | Specyfikacje
1 |Sprzedam | Jakis Pan/Pani | powierzchnia|40m2,ilosc pokoi|3,pietro|2 itp
To już w ogóle jest kompletna porażka - zerowa możliwość operacji na danych
Do przechowywania takich danych dosyć dobrze powinna się spisać nierelacyjna baza danych (bo z takimi danymi mamy tutaj do czynienia).