Avatar billede it-dyret Nybegynder
17. december 2001 - 11:50 Der er 20 kommentarer og
3 løsninger

DB-design med 2-deling af ordrer

Jeg har brug for at lave en db, hvor et produkt skal registres som en venteordre eller en okordre alt efter, om den findes på lager eller ej. Disse produkter købes af enten kernekunder eller alm.kunder

Som det ser ud nu har jeg bl.a. oprettet følgende tabeller:

Venteordre
-brugernavn (fremmednøgle)
-ordrenr. (primærnøgle)
-dato
-totalbeløb

Okordre
-brugernavn (fremmednøgle)
-ordrenr. (primærnøgle)
-dato
-totalbeløb
-betalingsdato

Ordrelinie
-id (primærnøgle)
-ordrenr. (fremmednøgle)
-antal
-produktnr.

Kernekunde
-brugernavn (primærnøgle)
-saldo
-\"diverse attributter med personlig info\"

AlmKunde
-brugernavn (primærnøgle)
-saldo
-kreditmax

Problemet er, at når jeg forsøger at oprette en ordrelinie i systemet, kan det ikke lade sig gøre, da den forventer, at den har ordrenr. i BÅDE okOrdre og venteOrdre.

Designet må jo så være forkert, men tanken bag at dele det op var, ikke at have nogle attributter som ikke blev udfyldte.

Hvordan løses mit problem?
Avatar billede juggalo Nybegynder
17. december 2001 - 11:55 #1
Jeg ville samle venteordre og okordre tabellerne til én og så lave ja/nej felt som kunne hedde f.eks. ordre_ok

Du kunne også lave et ordre_status felt, hvori du så kunne skrive ok eller vente

Der er mange muligheder
Avatar billede bennytordrup Nybegynder
17. december 2001 - 11:56 #2
Jeg ville løse det med en tabel til ordrene og have et flag, som fortæller, om det er en venteordre eller en okordre (evt. benytte betalingsdato til det: Null betyder venteordre, udfyldt betyder okordre)
Avatar billede proaccess Nybegynder
17. december 2001 - 11:56 #3
Du skal nøjes med 1 OrdreHoved-tabel, hvori der er et OK-felt, som markerer om det er en vente- eller ok-ordre.

OrdreHoved
  -ordrenu. (primærnøgle)
  -brugernavn (fremmednøgle)
  -dato
  -totalbeløb
  -betalingsdato
  -OK (ja/nej)

OrdreLinie
  -LinieID (primærnøgle)
  -Ordrenr. (fremmednøgle)
  -antal
  -produktnr.

Kunder
  -brugernavn (primærnøgle)
  -diverse info
  -saldo
  KerneKunde (Ja(Nej)
Avatar billede terry Ekspert
17. december 2001 - 11:56 #4
Why dont you have a flag (boolean) field in your Order table which indicates the \"status\" of the order, then you only need one order table and not two.
Avatar billede proaccess Nybegynder
17. december 2001 - 11:58 #5
Som det er nu kan du have 2 kunder, med ens navn, hvor den ene er kerne-kunde og den anden ikke...
Derfor har jeg også samlet dine kundetabeller...
Avatar billede terry Ekspert
17. december 2001 - 11:58 #6
well it seems we are all on the same track :o)
Avatar billede juggalo Nybegynder
17. december 2001 - 11:59 #7
LOL - I\'d say you\'re correct Terry
Avatar billede it-dyret Nybegynder
17. december 2001 - 12:02 #8
Det må siges at være nogle klare og ens svar :)

Dog har jeg lige et tillægsspørgsmål: Hvis jeg samler tabellerne, så kommer der jo nogle attributter, der ikke bliver udfyldt, da pointen i to-delingen var at undgå dette.

Kan spildpladsen undgås?
Avatar billede terry Ekspert
17. december 2001 - 12:05 #9
You can hide the fields on th eform depending on the flag value
Avatar billede it-dyret Nybegynder
17. december 2001 - 12:07 #10
>>>terry

Jeg bruger kun Access som db... det er et studieprojekt, som bliver kodet i Java, hvor jeg blot stikker \"snablen\" ned i Access.
Avatar billede proaccess Nybegynder
17. december 2001 - 12:07 #11
Nej, det kan vist ikke undgåes... ;-(

Men, du kan eventuelt lave dine ekstra-oplysninger i en ekstra tabel, og join\'e one\'n\'one.

Kunde
  -brugernavn (primærnøgle)
  -saldo

KundeInfo
  -brugernavn (fremmednøgle)
  -adresse
  -telefon
Avatar billede terry Ekspert
17. december 2001 - 12:08 #12
Spild!

If values arent entered then there is no \"spild\"
Avatar billede terry Ekspert
17. december 2001 - 12:10 #13
Well cant you do that with Java too? (hide fields)
Avatar billede terry Ekspert
17. december 2001 - 12:16 #14
In Access, if you dont enter values then they dont take up any space.
Avatar billede it-dyret Nybegynder
17. december 2001 - 12:23 #15
>>>terry
Jeg har ingen problemer i Java-delen. Det er udelukkende et spørgsmål om et godt DB-design/at gemme data.

>>>terry & proaccess
Hvis jeg splitter ikke-fælles data ud i en ekstra tabel, vil den så ikke kræve, at denne også bliver udfyldt (hvis man gennemtvinger referentiel integritet). Skal man blot lade være med at gennemtvinge dette?


Avatar billede proaccess Nybegynder
17. december 2001 - 12:46 #16
Referentiel integritet...

Du kan lave et Left-join, som gør at der kan eksistere records i din kunde-tabel, som ikke har ekstra kundeinfo, men ikke omvendt.

Men som Terry siger, så vil du ikke bemærke spild-pladsen, og alt andet vil give en dårligere performance.
Avatar billede terry Ekspert
17. december 2001 - 13:24 #17
\"godt DB-design/at gemme data.\" You only \"gem\" the fields you enter, this has nothing at all to do with, good dB design! You cant save information which you dont have, thats wht you have properties such as allow Nulls and \"ZERO LENGTH\" !
Avatar billede it-dyret Nybegynder
17. december 2001 - 13:38 #18
>>>terry
Jeg er med på, at det ikke optager plads i db\'en, hvis man har en attribut i en tuppel, som man ikke udfylder.

Jeg ender formentlig op med din løsning (den har jo den bedste performance) - men da det er et studieprojekt, er jeg desværre nødt til at indtænke, at det skal være intuitivt forståeligt for lærer og censor (der kun kender til Java), hvorfor jeg roder lidt med proaccess\' left-join. Jeg har dog ikke helt styr på, hvordan jeg får den oprettet....

Mit første db-design var jo ikke ligefrem godt, da det ikke fungerede :)
Avatar billede terry Ekspert
17. december 2001 - 13:40 #19
In Access query rightclick on th ethinn line and then follow the instrcutions.
Avatar billede proaccess Nybegynder
17. december 2001 - 13:42 #20
Jeg ville glemme alt om den ekstra tabel, og så \"bare\" acceptere at der vil forekomme tomme tupler... Det er jo heller ikke imod Codd\'s normaliseringsregler at der eksisterer sådanne...
Avatar billede it-dyret Nybegynder
17. december 2001 - 13:49 #21
I har ret - jeg laver en løsning uden ekstra tabeller og skriver en forklaring i den tilhørende rapport!

Tusind tak for hjælpen!

Point er fordelt efter hurtighed og antal svar :)
Avatar billede proaccess Nybegynder
17. december 2001 - 13:50 #22
takker ;-)
og held og lykke...
Avatar billede terry Ekspert
17. december 2001 - 13:51 #23
tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester