Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Database] Hoe relatie leggen

Pagina: 1
Acties:

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 22-10 21:08
Ik heb een vraag aan de mede-SQL goeroes op dit forum. Ik wil een relatie leggen tussen enkele tabellen maar *eigenlijk* enkel een enkelvoudige foreign key gebruiken, te weten omschrijving_id.

Ik heb de volgende tabellen
code:
1
2
3
4
5
6
7
8
tabel product
* product_id PK
* merk
* naam

tabel abonnement
* abonnement_id PK
* contractsduur

Nu wil ik een tabel 'omschrijving in mijn data model opnemen waarin de factuuromschrijvingen komen van abonnementen en producten. Ik zou dit willen oplossen door in product en abonnement te verwijzen naar een omschrijving_id, zonder de taal_code. deze wordt namelijk bepaald door de uiteindelijke factuur waarop de omschrijving getoond moet worden. Hierdoor krijg je dus een vertaalde omschrijving afhankelijk van de factuur_taal voor een product.

code:
1
2
3
4
5
6
7
8
9
10
tabel omschrijving
* omschrijving_id PK
* taal_code PK
* omschrijving

tabel product
* omschrijving_id fk naar omschrijving

tabel abonnement
* omschrijving_id fk naar omschrijving


Hoe kan ik deze situatie maken? Of ben ik toch verplicht om bijvoorbeeld te zeggen dat de 'nederlandse' (nl) omschrijving minimaal aanwezig moet zijn en dus de taal_code als FK op te nemen in abonnement & product.

Ik heb geprobeerd op dit probleem te zoeken maar omdat ik het nogal lastig kan verwoorden in één duidelijke, concrete zin heb ik er weinig relevants op gevonden.

Lets remove all security labels and let the problem of stupidity solve itself


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
2 tabellen maken ?
Eén die heet 'omschrijving' bv, en de andere heet 'omschrijving_content' ofzo.

Omschrijving (OmschrijvingId, evt andere nodig taal-onafhankelijke zut)
Omschrijving_Content (OmschrijvingId, TaalCode, Omschrijving).

https://fgheysels.github.io/


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Verdiep je eens in inner joins zou ik zo zeggen, daar kom je al een heel eind mee :)

Het hangt ook totaal van je DBMS af of je relaties al van te voren moet/kunt vastleggen.

Bij SQL server is het zo dat je de foreign keys etc van te voren vast legt, voor de interne werking van SQL server (voor het uitvoeren van cascade's door diverse tabellen heen als er bijvoorbeeld een update of een delete wordt uitgevoerd).

Maar voor het opvragen zal je altijd gebruik moeten maken van inner joins om relaties af te dwingen (dat gebeurt dus gewoon in de opvraagquery).

http://en.wikipedia.org/wiki/Inner_join#Inner_join

[ Voor 7% gewijzigd door Laurens-R op 31-07-2007 23:43 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
EvilB2k, toch misschien eerst maar eens even de topicstart lezen ipv enkel de titel van het topic en daar dan op reageren ?
:)

[ Voor 28% gewijzigd door whoami op 31-07-2007 23:48 ]

https://fgheysels.github.io/


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Excuus, ik lees het nu...

Ik ga maar gauw naar bed toe... heb het nodig blijkbaar :O |:(

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 22-10 21:08
Na een goede nacht slapen kwam ik tot dezelfde conclusie als whoami, een tweetal tabellen. Alhoewel ik het wel een beetje gevoelsmatige overkill vind, omdat de omschrijving tabel enkel een ID kolom bevat en de omschrijving_content dan dus een koppeltabel wordt tussen deze id's en talen.

Maargoed, het doet wel precies wat ik wil :)

Lets remove all security labels and let the problem of stupidity solve itself


  • whoami
  • Registratie: December 2000
  • Laatst online: 14:05
Tenzij je slechts een beperkt aantal talen ondersteund, en als je weet dat er niet gauw een taal zal bijkomen, en de gebruiker ook niet de mogelijkheid moet hebben om zelf een nieuwe taal die moet geondersteund worden, te definieren, zou je dit natuurlijk ook kunnen denormaliseren;
Eén tabel 'Omschrijving' dus, met daarin dan 'Omschrijving_NL', 'Omschrijving_ENG' en Omschrijving_FR bv.

Echter, dan moet je wel wat bijkomende 'logica' schrijving om het juiste veld op je factuur af te drukken, terwijl je dit met 2 tabellen niet zult hebben.

[ Voor 16% gewijzigd door whoami op 01-08-2007 09:01 ]

https://fgheysels.github.io/


  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 22-10 21:08
Ik ben wat dat betreft dan tegen denormaliseren om precies wat jij ook aangeeft; je zult er wat meer logica voor moeten schrijven. Ookal is het aantal talen beperkt en de kans dat deze worden uitgebreid klein.

[ Voor 23% gewijzigd door ikke007 op 01-08-2007 09:09 ]

Lets remove all security labels and let the problem of stupidity solve itself

Pagina: 1