Ga naar inhoud

Database ontwerp: welke optie is het best?


anoniem

Aanbevolen berichten

Ik ben bezig een eigen CMS te schrijven en daarbij ben ik tegen een probleem opgelopen. Ik wil de site tweetalig maken en ik weet niet op welke manier ik dat het beste in de database kan verwerken. Het gaat hier om berichten met een titel, bericht, samenvatting, categorie enz... Ik weet zeker dat er in de toekomst geen taal bijkomt. Hoewel ik ernaar ga streven om alle berichten tweetalig te plaatsen zal dit niet altijd het geval zijn. [list=1:3af59795d2][*:3af59795d2]Ik kan de berichten in zowel het Engels als het Nederlands in één tabel zetten, maar dan krijg ik dus 2 titelkolommen, 2 berichtkolommen enz. Daarnaast kan het zijn dat er bij een taal NULL ingevuld wordt omdat ik niets in die taal plaats. Het voordeel van deze methode is dat de posts dezelfde id krijgen waardoor het makkelijk wordt om naar de vertaling te linken.[*:3af59795d2]Ik kan natuurlijk ook een tabel maken met alleen id, auteur en datum. Vervolgens maak ik een 2 aparte (maar gelijke) tabellen met bericht, titel enz., voor elke taal één. Via een FK verwijs ik naar de eerstgenoemde tabel. Voordeel is dat het aantal NULL's beperkt wordt, maar ik vind de database zo wat onoverzichtelijk en eigenlijk zelfs onlogisch worden. (Of ligt dat gewoon aan mij?)[/list:o:3af59795d2]Graag jullie advies. - Bas
Link naar reactie
Kun je iets uitgebreider vertellen wat voor een soort berichten er op de site te lezen zijn? Moet ik het zien als 'nieuwsberichten'? Kun je ook even aangeven hoe je de opzet van je site ziet? Ik neem aan dat er eerst een overzicht van berichten is te zien, maar je ontkomt er haast niet aan om daarvoor al een onderscheidt te maken tussen de talen. Je kunt de site ook laten beginnen met een lijst van slechts Auteur en verschijningsdatum. Het hangt echt een beetje af van hoe je de gebruiker naar een bericht wilt lokken. Ik heb namelijk wel een idee en een oplossing, - en dat is zeker niet optie 1 - maar ga ik voor optie 2 maar dan wel iets anders.
Link naar reactie
Ik wil een soort weblog maken zoals Movable Type, maar dan anders. :D Op de homepage van de site zullen berichten komen te staan van de afgelopen [i:2f975973a5]x[/i:2f975973a5] dagen. Maar omdat ik soms lange stukken wil schrijven moeten deze niet helemaal op de homepage komen. Je ziet dus één of twee alinea's die de gebruiker nieuwsgierig moeten maken om naar het volledige artikel door te klikken. De volledige artikels staan in een archief gesorteerd op categorie. Je kunt het idd zien als een soort nieuwsberichten, maar deze zullen afgewisseld worden door "artikels" die ik zelf ga schrijven. (Of is het verstandiger om daar een aparte tabel van te maken en ernaar te linken vanuit de nieuwsberichten?) In principe kan er ook nog wel gesleuteld worden aan de opstelling van de site, want ik merk al bij het ontwerpen dat alles z'n voor- en nadelen heeft. - Bas
Link naar reactie
We gaan even je gegevens 'ontleden' Je hebt nodig: ID Taal Auteur Titel Categorie Korte Omschrijving Volledig_Artikel Datum Als je dit goed beschouwt hoort alles eigenlijk bij elkaar. Je kúnt het uit elkaar halen, maar dat levert geen enkele winst op. Het klinkt daarom misschien vreemd, maar ik zou het één tabel houden. Nu zul je zeggen dat je niet naar de vertaling kunt klikken, en dat klopt. Maar waarom zou je naar een vertaling moeten kunnen klikken. Immers, die vertaling moet eerst maar bestaan, en het is heel goed mogelijk dat dat niet het geval is. Daarnaast, waarom zou een Nederlander iets nogmaals willen lezen in het Engels, en nog sporadischer zal het voorkomen dat een Engelstalig iemand een Nederlandstalige tekst wil lezen. Denk er maar even over na, en vind je dit eigenlijk niets dan gaan we het anders aanpakken.
Link naar reactie
En hoe los je het dan op als er wel een Engelse, maar geen Nederlands vertaling is? Je zal tenslotte items moeten selecteren op hun taal (beter is weer een taalID natuurlijk ;)) (en op andere criteria zoals de datum of zo). Je zou kunnen zeggen: dikke pech, dan maar geen artikel, maar ik lees het dan liever in het Engels dan niet...
Link naar reactie
[quote:0764f970df]En hoe los je het dan op als er wel een Engelse, maar geen Nederlands vertaling is?[/quote:0764f970df] Pardon? Een artikel is in het Nederlands, Engels of beide. Ik neem maar even aan dat je eerst kiest in welke taal je de site wilt lezen. Staat een artikel niet op de NL site, dan zoek je op de Engelse. Staat daar ook niets, tja, dan bestaat ie niet....
Link naar reactie
Ja, daar heb ik dus ook nog een vraag over... Geven jullie de voorkeur aan een site zoals [url=http://gemal.dk]Gemal.dk[/url] of de traditionele manier? Op Gemal.dk wordt de taalvoorkeur uitgelezen uit de browser, en artikels worden vervolgens in die taal getoond. Bestaat het artikel niet in die taal, dan zie je het originele artikel (in dit geval in het Deens). Onder het traditionele systeem versta ik een site waarbij de de taal uit de URL wordt uitgelezen en dus ook alleen artikels in die taal toont. Meestal gaat dit gecombineerd met een "kies de gewenste taal"-pagina, compleet met vlaggen enzo... - Bas
Link naar reactie
Nee, maar als je bijvoorbeeld de PHP manual neemt, daar zijn de meeste functies wel vertaald naar het Nederlands, maar niet allemaal. En dan zie je die dus in het Engels... Je zou het probleem kunnen oplossen door bij het toevoegen van een nieuw item meteen de vertaling toe te voegen en als je dat dan niet doet om gewoon voor iedere taal die je hebt de orginele tekst in te voegen (dus als je geen Engelse vertaling hebt daar de Nederlandse tekst neerzetten). Of je vraagt alle items op onafhankelijk van de taal en gaat vervolgens kijken of een item beschikbaar is in de gewenste taal. Zo ja: tonen, zo nee: item in de "basistaal" openen...
Link naar reactie
Je hebt één artikel. Het artikel kan geschreven zijn in één of meerdere talen. Men kan commentaar plaatsen op het artikel. [code:1:7c2427438b] Tabel TArtikel --------------- ArtikelID, CategorieId^, etc. Tabel TArtikelTaal ------------------ ArtikelTaalId, ArtikelId^, TaalId^, AuteurId^, Datum, Titel, Omschrijving, Artikel, etc. Tabel TCategorie ---------------- CategorieId, Categorie Tabel TTaal ----------- TaalId, Taal Tabel TAuteur ------------- AuteurId, Auteur Tabel TCommentaar ----------------- CommentaarId, Datum, E-mail, Naam, Omschrijving, etc. ^ = foreign key Commentaar kun je koppelen aan de tabel TArtikelTaal als je dit taalafhankelijk wilt opslaan. Als commentaar van de verschillende talen gemixed kunnen worden kun je gegevens uit de tabel TCommentaar koppelen aan de tabel TArtikel [/code:1:7c2427438b]
Link naar reactie
Wat ik wil is dus het volgende: [img:219fb1f07f]http://basje.com/temp/erd.gif[/img:219fb1f07f] Voor zover ik kan zien komt dit aardig overeen met wat h4xX0r heeft gegeven... Klopt dit? En belangrijker nog: is dit een handige opzet? [b:219fb1f07f]Edit:[/b:219fb1f07f] De posts zijn natuurlijk disjoint en niet overlapping zoals ik hier in het schema aangeef. - Bas
Link naar reactie
[quote:d492ef40cf="BasHamar"]Wat ik wil is dus het volgende:[/quote:d492ef40cf] Tuurlijk, wat jij wilt. [quote:d492ef40cf="BasHamar"] ... Voor zover ik kan zien komt dit aardig overeen met wat h4xX0r heeft gegeven... Klopt dit? En belangrijker nog: is dit een handige opzet? [b:d492ef40cf]Edit:[/b:d492ef40cf] De posts zijn natuurlijk disjoint en niet overlapping zoals ik hier in het schema aangeef.[/quote:d492ef40cf] Jouw schema impliceert: - Dat één persoon beide versies *moet* schrijven. Verder is hier niets mis mee.
Link naar reactie
[quote:df90896515="h4xX0r"]Jouw schema impliceert: - Dat één persoon beide versies *moet* schrijven.[/quote:df90896515]Goed punt! Mijn advies: Combineer post_nl en post_en (en replies_nl en replies_en) aangezien deze, op de taal na, exact gelijk zijn. Dit bespaart je ruimte, ineffincentie, programmacode en problemen in de toekomst (even snel in uit mijn hoofd geanalyseerd: als ik het zelf zou bouwen zou ik het ook nog op papier analyseren en uitschrijven). -Rémy
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...