Ik ben nu bezig met het deel dat ik nieuwe teksten kan toevoegen.
Ik kan het al prima in één tabel prakken alleen nu wil ik het graag in twee tabellen tegelijk zetten. Ik heb het volgende gedaan alleen dan krijg ik een foutmelding:
databases:
content_nl
content_de
query:
<?php
$sql_nc = "INSERT INTO content_nl AND content_de
(
id,
titel,
content,
last_date,
user
)
VALUES
(
'',
'$titel',
'$tekst',
NOW(),
'".$_SESSION['ID']."'
)
";
?>
Op deze manier kan ik dus de id's overal het zelfde houden van de nederlandse, en duitse content.
tekst id id_taal (foreignkey met tabel taal)
titel
tekst
etc
koppeltabel: id_tekst_origineel(foreignkey met tabel tekst) id_tekst_vertaling (foreignkey met tabel tekst)
UNIQUE (id_tekst_origineel, id_tekst_vertaling)
Met dit datamodel kun je het aantal talen onbeperkt uitbreiden zonder dat je ooit een wijziging in het datamodel hoeft te maken. Alle teksten (in de verschillende talen) staan in 1 tabel, die zijn gekoppeld aan de taal en via de koppeltabel aan elkaar zijn gekoppeld. Zo kun je zien dat record 1 (nl) bij record 23 (engels) en record 48 (russisch) hoort.
Wil je het goed doen, zorg dan ook voor een constraint die een verband legt tussen de taal, het origineel en de vertaling. Dan kun je nooit 1 origineel krijgen met 2 vertalingen in dezelfde taal.
Uiteraard gebruik je de innoDB-engine van MySQL of stap je over op PostgreSQL.
Ik ga je oplossing nog wel even doorspitten frank! Ziet er iig profi uit :D
Zo profi is het niet, wanneer je gaat normaliseren kom je gewoon op dit model uit. Weinig keuze dus.
Het gegeven 'titel' sla je op in de kolom 'titel'. Dat de tekst in verschillende talen kan worden genoteerd, staat daar los van. Wanneer je 'titel' zou vervangen door 'voornaam', ga je toch ook niet voor iedere verschillende voornaam een andere tabel aanmaken?
En dat er dankzij de vertalingen een verband zit tussen de verschillende records, dat los je standaard op met een koppeltabel. Wanneer je 2 personen met elkaar zou willen verbinden, bv. spelers in een elftal, dan los je dat ook op met een koppeltabel.
Kortom, het zijn standaard oplosingen. Tevens heeft het tot voordeel dat de database sneller is te doorzoeken. Je gebruikt tenslotte minder kolommen met dezelfde soort gegevens waardoor de indexen efficienter worden gebruikt.
Klopt. Hier zat ik ook aan te denken. Vandaar ook mijn eerste posts. Toen werd 't me afgeraden het met koppeltabellen te doen...
Ik moet toegeven dat ik in eerste instantie dacht aan de oplossing voor elke taal een tabel maar toen kwam die tutorial over het normaliseren en begon ik te twijfelen. Ik zie dat ik me daar toch eens wat meer in moet verdiepen.
Maar zoals net gezegt werd Frank, dat je met een 1 taal 1 tabel oplossing minder onderhoud hebt t.o.v. jouw oplossing >>> Klopt dat dan ook?
Ik zie niet in wat het probleem met onderhoud is, hooguit dat de opzet van Robert juist meer onderhoud vereist. In zijn opzet kun je onmogelijk een extra taal in de database wegschrijven en vervolgens de vertalingen gaan inkloppen. Hij zal eerst een nieuwe release van zijn script moeten gaan schrijven voordat een extra taal kan worden geintroduceerd. Dat lijkt mij niet de meest handige opzet.
De opzet die ik je heb gegeven, geeft je de mogelijkheid om een nieuw record toe te voegen aan de tabel 'taal' en klaar is kees. Daarmee krijg je direct de mogelijkheid om nieuwe vertalingen aan te maken en deze te koppelen aan de bestaande teksten. Tegen de tijd dat hij klaar is met zijn script, heb jij alle vertalingen al klaar...
Ik zie niet in wat het probleem met onderhoud is, hooguit dat de opzet van Robert juist meer onderhoud vereist. In zijn opzet kun je onmogelijk een extra taal in de database wegschrijven en vervolgens de vertalingen gaan inkloppen. Hij zal eerst een nieuwe release van zijn script moeten gaan schrijven voordat een extra taal kan worden geintroduceerd. Dat lijkt mij niet de meest handige opzet.
De opzet die ik je heb gegeven, geeft je de mogelijkheid om een nieuw record toe te voegen aan de tabel 'taal' en klaar is kees. Daarmee krijg je direct de mogelijkheid om nieuwe vertalingen aan te maken en deze te koppelen aan de bestaande teksten. Tegen de tijd dat hij klaar is met zijn script, heb jij alle vertalingen al klaar...
Frank, ik heb het allemaal een beetje gevolgd, ik moet zeggen dat jouw oplossing inderdaad een hele goede is. (veel beter dan die van mij)
Het toevoegen van een nieuwe taal is helemaal niet zoveel werk als je voor doet komen, maar het is bij jouw opzet nog veel gemakkelijker.. AND THAT'S THE POINT!! :)