yo,
geschwindigkeit und erwarterbarkeit sind zwei kriterien, die sich oftmals gegenseitig ausschließen so auch wohl in deinem falle.
von der geschwindigkeit ist es sicherlich besser, alles in eine tabelle zu packen. liegt auf der hand, dass eine tabelle in aller regel einen schnelleren zugriff hat, als eine abfrage mit mehreren tabellen.
für die erweiterbarkeit spricht einiges dafür, es in mehrere tabellen aufzulösen. wie schon erwähnt wurde, nicht nur die sprachen auszulagern, sondern auch die bilder, da es ganz offensichtlich eine 1:n beziehung ist.
was für dich am geeignetsten ist, hängt ganz stark von deinen vorgaben ab. zum beispiel die bilder, wenn du mit 99,999% sicherheit sagen kannst, dass maximal nur drei bilder pro datensatz vorhanden sein werden, kann man es so wie du denormalisieren. wenn du aber es offen lassen willst, ob man nicht noch mehr bilder für ein datensatz besitzen kann, dan solltest du es auf jeden fall in eine weitere tabelle auslagern.
genauso ist es für die sprachen. wenn du sagen kannst, das mit größter sicherheit keine sprachen mehr hinzukommen, dann kannst du es in eine tabelle packen. aber nicht vergessen, die begründung für die denormalisierung auch zu dokumentieren. wenn aber in zkunft weitere sprachen hinzukommen sollen, dann auf jeden fall normalisieren. nud das bedeutet etwa nicht, fürde jede sprache eine extra tabelle, sondern nur eine extra tabelle für alle sprachen, mit entsprechenden attributen der länderspezifischen kennung. das hat den vorteil, dass du bei einer weiteren sprache NICHT och mal das datendesign ändern musst und somit auch zwangsweise ein riesiger folgeaufwand in der programierung, sondern du kannst du bestehen struktur nutzen und einfach weitere datensätze für die neue sprache einfügen.
Ilja