Attualmente sto pianificando la struttura del database del sito di annunci di un'auto usata. Ogni annuncio contiene informazioni su un veicolo, e un veicolo può essere pubblicizzato più volte nel corso della sua vita (concesso, abbastanza improbabile). Non sono sicuro di quale approccio adottare: una tabella singola o due tabelle relazionali separate, ognuna ha i suoi pro e contro.
Schema 1
Adverts Table:
-------------------
id int
make varchar(255),
model varchar(255),
year int,
transmission varchar(255),
fuel_type varchar(255),
body_type varchar(255),
engine_size int,
colour varchar(255),
doors int,
location varchar(255),
price int,
owners int,
mileage int,
description longtext
Schema 2
Adverts Table
-------------------
id int
location varchar(255),
price int,
owners int,
mileage int,
description longtext
vehicle_id int
Vehicles Table
-------------------
id int
make varchar(255),
model varchar(255),
year int,
transmission varchar(255),
fuel_type varchar(255),
body_type varchar(255),
engine_size int,
colour varchar(255),
doors int
Personalmente, penso che prendere il secondo approccio ne trarrà beneficio in futuro, ma è difficile lavorare con esso. Sto usando Laravel, un framework PHP. Poiché la maggior parte delle opzioni di "ricerca" sono applicate al veicolo (genitore), piuttosto che alla pubblicità (bambino), è richiesto molto più codice, che sta iniziando a sembrare contro-intuitivo. Lo schema 1 è molto più semplice da utilizzare.
Mi mancano i numerosi vantaggi offerti dallo schema 2? In poche parole, il primo approccio richiede molto meno codice, ma non è relazionale. Il secondo approccio è relazionale, ma richiede molto più codice (e tempo), riducendo la brevità del mio controller di annunci in particolare, che in realtà sta interrogando gli attributi del veicolo più di quelli della pubblicità. Inoltre, rende "difficile" l'ordinamento, in quanto gli utenti possono ordinare "make", "model", "location", "price", ecc. - attributi che saltano tra i modelli.