[SQL] database ontwerp

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • amoen
  • Registratie: Juni 2003
  • Laatst online: 30-06 22:13
Ik ben in dubio hoe ver ik moet gaan om een abstracte join table (voor in een CMS) op te zetten om voor verschillende entiteiten een één-op-meer relatie te kunnen maken.

Ik wil met een generieke join-table alle soorten koppelingen maken die ik normaal zou doen met een referentie-key in de table zelf.

Hieronder mijn idee:
table: page
page_idpage_titlepage_bodypage_date
1home......
2contact......
3privacy......


table: join
join_keyjoin_masterjoin_slave
page_children12
page_children13

In de bovenstaande join-table weet ik aan de hand van de join_key dat 'contact' en 'privacy' children zijn van 'home'. Ik kan op deze manier nog veel meer relationele data opslaan in die tabel:

table: join
join_keyjoin_masterjoin_slave
page_author112
page_header_img187

Ik weet nu de autheur en de hoofdafbeelding van 'home': user_id=12 en file_id=87

Doen meer mensen dit? Is het handig? Gaan al die joins (afgezien van de juiste INDEXES) mijn performance aanzienlijk verslechteren? Mij persoonlijk lijkt dit een hele handig model, afgezien van de grote queries die ik moet gaan schrijven... ik hou alle entiteit-tabellen schoon van referenties. En mocht ik beslissen om in de toekomst 2 tabellen te joinen hoef ik hun individuele structuur niet te wijzigen, maar verzin ik gewoon een nieuwe unieke join_key voor de join-table.

heeeeee ..... hoe is het?


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 17:23

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Waarom 1 join tabel met verschillende relatie types, in plaats van 1 join tabel per relatie?

Op deze manier moet je bij een join steeds ook nog filteren op het relatietype.

Ik heb weinig praktijkervaring met database ontwerp, maar de constructie die jij voorstelt ben ik in mijn informatica colleges over databases nooit tegengekomen.

Relaties buiten de entity tabellen houden, ook wel normaliseren genoemd volgens mij, is heel normaal in de database wereld, maar dan volgens mij altijd met 1 tabel per relatie.

Het voordeel van een aparte tabel voor elke relatie is ook dat je dan in die tabel nog specifieke attributen kan opnemen voor die relatie. Met een generieke join tabel wordt dat een beetje lastig.

[ Voor 16% gewijzigd door Orion84 op 19-08-2012 14:37 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik wil met een generieke join-table alle soorten koppelingen maken die ik normaal zou doen met een referentie-key in de table zelf. [...] ik hou alle entiteit-tabellen schoon van referenties. En mocht ik beslissen om in de toekomst 2 tabellen te joinen hoef ik hun individuele structuur niet te wijzigen, maar verzin ik gewoon een nieuwe unieke join_key voor de join-table.
Waarom? Referenties zijn niet eng. Onnodig lange query's met tabel- of kolomnamen in strings zijn dat wel.
Ik weet nu de autheur en de hoofdafbeelding van 'home': user_id=12 en file_id=87
En dat weet je met de kolommen author_id en mainimage_id in de tabel page ook. Zodra je kolom- of tabelnamen in rijen in een andere tabel gaat zetten, ben je bezig met een database-in-database oftewel het inner platform effect.

Voor een veel-op-veelrelatie (meerdere auteurs van een pagina, meerdere pagina's per auteur) kun je wel een dergelijke constructie gebruiken, maar dan alsnog in de vorm van page_author_link met de kolommen page_id en author_id.

Waarom? Omdat foreign keys.

[ Voor 32% gewijzigd door CodeCaster op 19-08-2012 15:01 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...