[SQL] Access database relatieprobleem? *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
Hallo,

Ik zit hier al een aantal dagen te zwoegen op Access. Ik ben vrij nieuw met databases bouwen en ik moet voor een opdracht een database bouwen.
Nu loop ik vast bij het invullen van de gegevens en misschien gaat het al mis bij de normalisatie.

Mijn normalisatie:

Nulde Normaalvorm
ORDER: Ordernummer, datum, klantnaam, klant adres, klant postcode, klant woonplaats, klant telefoonnr., klant emailadres, klantnummer, betaalwijze, bezorgwijze, totaal excl. BTW, BTW 19%, Totaal incl. BTW
RG: artikelnummer, artikelaantal, artikelomschrijving, artikel stukprijs, artikel subtotaal

Eerste Normaalvorm
ORDER: Ordernummer, datum, klantnaam, klant adres, klant postcode, klant woonplaats, klant telefoonnr., klant emailadres, klantnummer, betaalwijze, bezorgwijze, totaal excl. BTW, BTW 19%, Totaal incl. BTW
FACTUURINHOUD: ordernummer, artikelnummer, artikelaantal, artikelomschrijving, artikel stukprijs, artikel subtotaal

Tweede Normaalvorm
ORDER: Ordernummer, datum, klantnaam, klant adres, klant postcode, klant woonplaats, klant telefoonnr., klant emailadres, klantnummer, betaalwijze, bezorgwijze, totaal excl. BTW, BTW 19%, Totaal incl. BTW
FACTUURINHOUD: ordernummer, artikelnummer, artikelaantal, artikel subtotaal
ARTIKEL: artikelnummer, artikelomschrijving, artikelstukprijs

Derde Normaalvorm
ORDER: Ordernummer, datum, betaalwijze, bezorgwijze, totaal excl. BTW, BTW 19%, Totaal incl. BTW
KLANT: klantnummer, klantnaam, klant adres, klant postcode, klant woonplaats, klant telefoonnr., klant emailadres
FACTUURINHOUD: ordernummer, artikelnummer, artikelaantal, artikel subtotaal
ARTIKEL: artikelnummer, artikelomschrijving, artikelstukprijs




Afbeeldingslocatie: http://img25.imageshack.us/img25/3443/relaties.jpg

HIerboven zie je mijn relaties tot nu toe.
Hetgeen waartegen ik aanloop is dat als ik nu gegevens ga invullen (bijv bij order) dan krijg ik niet de mogelijkheid om bijvoorbeeld een klantnummer te kiezen uit de tabel Klant (die tabel is volledig ingevuld overigens).

Ik weet dat dit een beginnersvraag is, maar waarom kan dit niet? Ik kom er niet uit. Heb hier ene boek en heb op internet gezocht, maar helaas.

[ Voor 9% gewijzigd door MauriX op 23-04-2009 11:06 . Reden: Had nog geen vraag gesteld :) ]


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

En wat is je vraag precies?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • TUX2K
  • Registratie: September 2001
  • Laatst online: 17-09 12:46
Als ik het schema zo bekijk vindt ik het vreemt dat klant ook de factuur inhoud hangt.
Je kan de klant toch achter halen van uit de factuur?

Over je echter vraag, je wil dus in je formulier de mogelijkheid hebben een klant uit b.v. een droplistbox te selecteren.
Dat moet je dus wil opgeven in de tabel editor (sorry weet ff niet zo snel hoe dat ook al weer ging).

[ Voor 44% gewijzigd door TUX2K op 23-04-2009 11:14 ]


Acties:
  • 0 Henk 'm!

  • Kazu
  • Registratie: Juni 2004
  • Laatst online: 17-09 19:56
Even voor de duidelijkheid, probeer je je gegevens in te voeren via een (vooropgesteld) formulier of direct in de tabel?

PS5 PSN: UnrealKazu


Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
Hoe bedoel je 'achterhalen'?
Je bedoeld dat de factuur gelinkt is aan 'order' en 'order' weer aan 'klant'?
Nogmaals ik ben een noob hoor :)
Vind het lastige materie.

Acties:
  • 0 Henk 'm!

  • TUX2K
  • Registratie: September 2001
  • Laatst online: 17-09 12:46
MauriX schreef op donderdag 23 april 2009 @ 11:14:
Hoe bedoel je 'achterhalen'?
Je bedoeld dat de factuur gelinkt is aan 'order' en 'order' weer aan 'klant'?
Nogmaals ik ben een noob hoor :)
Vind het lastige materie.
Ja via een order kan je dus de factuurinhoud vinden en de klant.

Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
Kazu schreef op donderdag 23 april 2009 @ 11:13:
Even voor de duidelijkheid, probeer je je gegevens in te voeren via een (vooropgesteld) formulier of direct in de tabel?
In de tabel zelf.
Formulieren moet ik ook nog maken, maar volgens mij moet ik eerst de relaties op orde hebben?

Acties:
  • 0 Henk 'm!

  • IJsbeer
  • Registratie: Juni 2001
  • Niet online
Ik zou de tabellen order en faktuurinhoud samenvoegen, twee tabellen met een 1op1 relatie is niet nodig (leuk volgens theorie, maar in de praktijk niet praktisch, zeker niet voor kleine tabellen).

Daarnaast kan een faktuur nu maar 1 artikel hebben, lijkt me ook niet wenselijk. Hier zul je nog een koppeltabel tussen moeten plaatsen.

OVer je vraag: waar ben je de gui aan het maken? Met forms in access?

Acties:
  • 0 Henk 'm!

  • Kazu
  • Registratie: Juni 2004
  • Laatst online: 17-09 19:56
MauriX schreef op donderdag 23 april 2009 @ 11:16:
[...]


In de tabel zelf.
Formulieren moet ik ook nog maken, maar volgens mij moet ik eerst de relaties op orde hebben?
Als je gegevens direct in de tabel invoert heb je niet de 'luxe' om uit een lijst van al ingevoerde klantennummers te kiezen. Je zult per record de klantennummers zelf in moeten voeren. Later als je een formulier hebt, kan je alle beschikbare klantennummers opvragen dmv een query en daar dan de keuze uit laten maken.

Wat je wel kan doen is alle klantennummers van de tabel Klant dmv een Update query in te voeren in de Order tabel. Alleen krijg je dan dus wel dat alle klanten minimaal één order hebben (misschien toch geen goed idee, maar het is maar even om het een en ander aan te geven).

PS5 PSN: UnrealKazu


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Overigens begrijp ik niet hoe je er bij bent gekomen om klant op te nemen in de 'factuurinhoud' ofwel orderregel. Order-orderregels schema's kun je in menig boek over normaliseren & databases terugvinden.

Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 20:50

SinergyX

____(>^^(>0o)>____

Met Tux, klant in factuur-inhoud is beetje apart. (die is in principe altijd gelijk aan ordernummer van je eerste tabel). Ik denk dat juist door die link je bepaalde instellingen fout heb staan waardoor hij niet kan selecteren uit klantgegevens.

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
Super dat jullie zo mee denken! Bedankt daarvoor alvast.

Ik heb even mee zitten te lezen en heb e.a. aangepast.
Zou het zo beter moeten zijn?

Afbeeldingslocatie: http://img25.imageshack.us/img25/7583/relaties2i.jpg

Ik begrijp dus dat bij het invoeren van de gegevens direct in de tabel, je geen opties kunt krijgen om gegevens uit andere tabellen te selecteren? Dat verklaart dan gedeeltelijk mijn probleem.

Daarnaast de discussie over order en factuur informatie samenvoegen; de opdracht moet minstens 4 tabellen bevatten en ik zou bij god niet weten wat ik hier nog aan toe kan voegen als ik die 2 samen zou voegen. Dus ik denk dat ik die gewoon laat staan.

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
4 tabellen is heel goed mogelijk, je hoeft niks samen te voegen. Factuurinhoud is gewoon een orderregel. Kijk nog eens goed naar je 1op1 relatie. Dit is onjuist aangezien je nu maar 1 product per order kan bestellen.

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 20:51

Boss

+1 Overgewaardeerd

Ik begrijp dus dat bij het invoeren van de gegevens direct in de tabel, je geen opties kunt krijgen om gegevens uit andere tabellen te selecteren? Dat verklaart dan gedeeltelijk mijn probleem.
Die optie kan je wel krijgen door bij de betreffende kolom bji de eigenschappen op het tabblad Opzoeken het nodige in te vullen.

Ik zou je echter afraden om dit te doen. Het maakt je tabellen zeer onoverzichtelijk. Dergelijke dingen kan je veel beter in de GUI (je formulieren) regelen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
Noork schreef op donderdag 23 april 2009 @ 11:49:Kijk nog eens goed naar je 1op1 relatie. Dit is onjuist aangezien je nu maar 1 product per order kan bestellen.
Het gekke is dat als ik de relatie wil maken tussen Order en Factuurinfo aan de hand van ordernummer, ik niets anders kan kiezen dan een-op-een relatie.
In order is Ordernummer de primaire sleutel(autonummering), en in Factuurinfo is ordernummer een normaal record en staat hij op numeriek. Ik begrijp het niet, wat doe ik dan fout?

edit:

Oh wacht, ik denk dat ik het snap, ik zou een veld factuurregel ofzo in moeten voegen en die moeten terug laten komen in ordernummer?

Zoiets:
Afbeeldingslocatie: http://img25.imageshack.us/img25/9836/relaties3.jpg

[ Voor 17% gewijzigd door MauriX op 23-04-2009 12:11 ]


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Je hebt hem nu als primairy key in beide tabellen. Dat is niet juist, het moet een secondairy key zijn in factuurinfo.

p.s. Kleinigheidje, maar is het niet handiger en minder dubbelzinnig om te werken met order-orderregel ipv order-factuurinhoud? Of gebruik dan op z'n minst factuur-factuurregel.

[edit]
Op bovenstaande. Nee, dat is ook onjuist. Voeg orderid in als secondairy key in factuurinfo en koppel deze aan orderid van de order. Nu kun je nog steeds maar 1 orderregel hebben.

[ Voor 24% gewijzigd door Noork op 23-04-2009 12:15 ]


Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
Dit laatste begrijp ik dan niet.
Ik heb toch juist nu geen primairy ID in de order tabel?
Factuurregel is nu voor Factuurinhoud de primaire key en die is gekoppeld aan order dmv een een op veel relatie. Dit betekent toch dat Order meerdere factuurregels kan hebben?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
In factuurregel in order kun je toch maar 1 id kwijt? :)

Doe iets als dit:
Afbeeldingslocatie: http://i39.tinypic.com/a846u.gif

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
[Noob vraag] Access database relatie probleem? >> [SQL] Access database relatieprobleem?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
RobIII schreef op donderdag 23 april 2009 @ 13:12:
[Noob vraag] Access database relatie probleem? >> [SQL] Access-database relatieprobleem?
:)

Acties:
  • 0 Henk 'm!

  • MauriX
  • Registratie: Januari 2002
  • Laatst online: 10-05-2022
@Noork,

Ik heb nu jouw voorbeeld nagemaakt, ik begrijp hoe je het bedoeld.
Ik wil nu via een formulier de Tabel Order invoeren. Ik heb alle velden meegenomen in het formulier uit de tabel Orders. Nu krijg ik niet de mogelijkheid om een klantnummer te kiezen. Ik moet hem zelf invoeren.

Nogmaals, ik ben een echte beginner op dit gebied dus ik weet ook niet of het uberhaupt wel zo moet. Het lijkt me toch dat je dmv relaties juist de gegevens kunt selecteren uit de andere tabellen? Of moet dit persé met een query?


Mijn relaties zijn nu zo:
Afbeeldingslocatie: http://img14.imageshack.us/img14/543/relaties4.jpg

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik ken access niet zo goed, maar volgens mij kun je gewoon een dropdown-element slepen naar je formulier, en vervolgens selecteren welke waardes er moeten worden opgehaald, en in welk veld dit moet worden opgeslagen.

Acties:
  • 0 Henk 'm!

  • Boss
  • Registratie: September 1999
  • Laatst online: 20:51

Boss

+1 Overgewaardeerd

De relaties leg je aan om de regels van je database te definieren. Dat staat helemaal los van je interface. Als jij een FK relatie maakt zorgt Acces ervoor dat je alleen maar waarden kan invoeren die aan die constraint voldoen. Meer niet.

Kijk eens naar mijn vorige tip over hoe je het evt makkelijker kan maken voor jezelf.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Even een pitfall waar je niet in moet donderen: als je correct normaliseerd hebben orderregels dan misschien geen 'prijs', maar je wilt niet dat als je huidige prijzen van artikelen verandert, dan van alle orderregels niet meer te achterhalen is voor welke prijs (en korting) die artikelen destijds verkocht zijn. Dus let ook goed op dat het vaak nodig is kopieen van informatie te maken.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • The Van
  • Registratie: Maart 2006
  • Laatst online: 09-02-2023
Een factuur is voor een order (misschien wel: een factuur is voor een orderregel)
Een factuur bestaat uit een en slechts een factuurhoofd.
Een factuur bestaat uit ten minste een factuurregel.
Een order is voor een klant, en slechts voor een klant.
Elke klant kan geen, een, of meer orders hebben
Elke order bestaat uit geen, een of meer order regels (misschien: een order bestaat tenminste uit 1 orderregel)
een orderregel bavat een en slechts een artikel.

Huiswerk? pretty standard stuff... Oh - de misschien zakies zijn afhankelijk van het business model. In het uitgeschreven ER model boven geven ze al dan niet verplichte relaties aan (optionele of verplichte verlden)

Acties:
  • 0 Henk 'm!

  • The Van
  • Registratie: Maart 2006
  • Laatst online: 09-02-2023
Hydra schreef op vrijdag 24 april 2009 @ 13:18:
Dus let ook goed op dat het vaak nodig is kopieen van informatie te maken.
Standaard pitfall: geen begin- en einddatum aan iets hangen. Prijzen zijn een schitterend voorbeeld.
Maar wat dacht je van artikelen zelf? Seizoensgebonden, of anderszins.
Nog iets:
- betaalwijze: uit ervaring zou ik het tweemaal opnemen - een keer bij order (misschien zelfs liever bij factuur) wat je al gedaan hebt, maar wat dacht je als attribuut bij Klant? Dan is het de voorkeursbetaalwijze van die klant.
- BTW opnemen in een aparte table; we kennen al twee tarieven, en die zijn ook niet echt vast... Dus als aparte tabel, maar de gebruikte waarde wel opslaan. Totaal bedrag inclusief btw is geen veld, maar berekend - uds niet opslaan.

[ Voor 41% gewijzigd door The Van op 24-04-2009 13:38 . Reden: "nog iets" toegevoegd ]

Pagina: 1