Toon posts:

[Alg] Normalisatie probleem*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Sorry voor de begaffelde topic-titel, maar ik weet ff niet hoe ik het anders zou moeten noemen. Anyway, wie kan mij een beetje de goede richting induwen wat betreft de volgende situatie:

Ik ben aan een stuk maatwerk software bezig in ASP.Net (C#) waarbij gebruik wordt gemaakt van een MSSQL (2000) Server. Nou moet daar o.a. de volgende functionaliteit in zitten:

In de database zijn een 8000 klanten opgeslagen. Voor iedere klant moet aan te geven zijn welke documentatie ze moeten krijgen. In de praktijk hoeven sommige klanten helemaal niks te ontvangen, anderen enkele documenten en sommigen vrijwel alles. Er zijn op dit moment ongeveer 30 verschillende documenten, maar het moet mogelijk zijn via de applicatie nieuwe documenten aan te kunnen maken (een document bestaat uit een titel, een documenttype, de inhoud, bijlagen en nog enkele andere eigenschappen).

In de oude database die werd gebruikt was er voor ieder document een aparate kolom in de tabel klanten (ieder record bevatte dus ongeveer 30 boolean-velden), wat natuurlijk de eenvoudigste oplossing is, maar wat het wel onmogelijk maakte nieuwe documenten toe te voegen. Dat moet nou dus wel mogelijk worden...en ik vroeg me dus af wat de beste manier is. 3 mogelijke oplossingen zouden iig zijn:

- Bij het aanmaken van een nieuw document, het programma een extra veld laten toevoegen aan de tabel (in dit geval: Tbl_DocPerCustomer).

- Een tabel (Tbl_DocPerCustomer) gewoon velden Fld1, Fld2 ... Fld40 aanmaken en in een aparte tabel de document-gegevens opslaan en dus bij een nieuw document gewoon een nieuw record toe voegen. Aan de hand van het aantal records zou dan kunnen worden bepaald welke van de velden Fld1, Fld2 enz. gebruikt wordt.

- Het opslaan van alle document_per_klant gerelateerde gegevens in 1 veld mbv. een xml-string.

Welke methode zouden jullie aanraden...of vind je dat ik dit helemaal verkeerd aan probeer te pakken en kan het beter via een compleet andere weg?

[ Voor 1% gewijzigd door Verwijderd op 14-01-2003 11:57 . Reden: Paar tiepvauten eruit gehaald ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:40

gorgi_19

Kruimeltjes zijn weer op :9

Ik gok op geen van allen... :+ Ik doe eigenwijs en kies optie d.. :P

Je krijgt dan:
tabel Klanten
KlantID
welke velden je verder wilt
....

tabel Documenten
DocumentID
DokumentLokatie
Titel
welke velden je verder wilt
...

tabel Koppeltabel
KlantID
DocumentID

En vergeet ook geen juiste indexen te leggen.. :P

edit:

Topictitel dekt de lading idd niet...
Suggestie:
[Alg] Normalisatieprobleem

[ Voor 42% gewijzigd door gorgi_19 op 14-01-2003 12:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Nu online
Ik kies de optie van gorgi_19.

Misschien moet je eerst eens wat lectuur doornemen over data-modelling en normalisatie.

https://fgheysels.github.io/


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 23-06 13:45
gorgi_19 schreef op 14 January 2003 @ 11:57:
tabel Klanten
KlantID
welke velden je verder wilt
....

tabel Documenten
DocumentID
DokumentLokatie
Titel
welke velden je verder wilt
...

tabel Koppeltabel
KlantID
DocumentID

En vergeet ook geen juiste indexen te leggen.. :P
Dit vind ik ook een goede optie. In de tabel van de klant komt dus een kolom met een bepaald DocID en in de tabel staat de DocID met bijbehorende documenten titel en plaats en wat je er nog meer van wilt vastleggen.
Je hoeft dan bij een nieuw docId alleen maar een nieuwe rij in Docs neer te zetten. Het wordt alleen weer lastig als klanten verschillende documenten willen hebben. Good luck!

Twitter @cmeerbeek / Halo Waypoint Profile


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 09:40

gorgi_19

Kruimeltjes zijn weer op :9

Bbfreak schreef op 14 January 2003 @ 12:04:
Het wordt alleen weer lastig als klanten verschillende documenten willen hebben. Good luck!
Waarom? Daar heb je toch de koppeltabel voor? En als een klant meerdere documenten van dezelfde soort wilt hebben, dan zet je er een kolom bij in de koppeltabel, met "aantal"

En wees niet bang voor veel records (zou me niets verbazen als je rond de 100.000 uit komt; moet SQL server best kunnen trekken)

[ Voor 28% gewijzigd door gorgi_19 op 14-01-2003 12:06 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 23-06 13:45
gorgi_19 schreef op 14 January 2003 @ 12:05:
[...]

Waarom? Daar heb je toch de koppeltabel voor? En als een klant meerdere documenten van dezelfde soort wilt hebben, dan zet je er een kolom bij in de koppeltabel, met "aantal"
Volgens mij zie ik het al. De klantId + DocId zijn dan samen primaire sleutel. Niks mis mee gorgi. Werkt als een trein ja.

Twitter @cmeerbeek / Halo Waypoint Profile


Verwijderd

Topicstarter
Ow...nou, dit was mijn eerste gedachte ook, maar het viel voor mij een beetje af vanwege het hoge aantal records wat daaruit zou ontstaan. Maar dat maakt dus niet uit?

Bedankt voor de reacties...

  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 23-06 13:45
De koppeltabel zal een zeer hoog aantal records krijgen. Vooral als het aantal klanten toeneemt. SQL Server i.s.m ASP.Net is zo snel dat het de performance van je applicatie niet verminderd. SQL Server moet ook het hoge aantal records wel kunnen trekken want er zijn volgens mij zat bedrijven in de wereld die net zoiets hebben. Succes iig

Twitter @cmeerbeek / Halo Waypoint Profile

Pagina: 1