De meest gebruikelijke manier waarop ik dit heb zien doen, is met twee tabellen, membership
en membership_ml
, waarbij één de basiswaarden opslaat en de ml-tabel de gelokaliseerde tekenreeksen opslaat. Dit is vergelijkbaar met uw tweede optie. De meeste systemen die ik zo zie, zijn op die manier gemaakt omdat ze niet vanaf het begin zijn ontworpen met internationalisering in het achterhoofd, dus de extra _ml-tabellen zijn later "aangeplakt".
Wat ik denk dat een betere optie is, is vergelijkbaar met je eerste optie, maar een beetje anders. Je zou een centrale tabel hebben voor het opslaan van alle vertalingen, maar in plaats van de tabelnaam en veldnaam daarin te plaatsen, zou je tokens en een centrale "Content"-tabel gebruiken om alle vertalingen op te slaan. Op die manier kun je desgewenst ook een soort RI afdwingen tussen de tokens in de basistabel en de vertalingen in de inhoudstabel.
Ik heb eigenlijk een vraag gesteld over dit onderwerp een tijdje geleden, dus je kunt daar eens naar kijken voor wat meer informatie (in plaats van de schemavoorbeelden hier opnieuw te plakken).