1) per ogni campo che è multilingua, crei le varie versioni nella stessa tabella (quindi campo_it, campo_en, ... ), ma ha più contro che pro

2) Una tabella per ogni lingua come dice il nostro buon moderatore, che crea una serie di problemi, uno dei quali è che ogni volta che aggiungi una lingua devi aggiungere una tabella, per non parlare del fatto che se hai piu tabelle da tradurre ti vengono fuori decine di tabelle

3) crei una relazione molti a molti tra la tabella che vuoi tradurre (per la precisione, i singoli campi che vuoi tradurre) e una tabella delle lingue. es:

Prodotti(id primary key, prezzo, quantita, id_descrizione, foreign key (id_descrizione) references dictionary(id) on delete set null on update cascade)

Dictionary(id primary key)

Languages(id primary key, lang, code)

Translations(id_dictionary, id_language, translation text, primary key (id_dictionary, id_language), foreign key (id_dictionary) referneces dictionary(id) on delete cascade on update cascade, foreign key (id_language) references languages(id) on delete cascade on update cascade)

praticamente ogni campo che vuoi tradurre invece di essere testo è una reference ad una entry del dizionario, entry che potrai tradurre come piu ti aggrada.

Come fare le query, dipende da quanto sei bravo te Puoi fare viste, funzioni parametriche, join al volo... dipende anche dal fatto se usi o meno un framework db sotto.