Gå til innhold

Hjelp til Databasemodellering i MS Access (Lokale-utleie)


Anbefalte innlegg

Heisan godtfolk

 

Lurte bare på om det er noen der ute som kan hjelpe meg med å løse dette problemet jeg har kommet over ved databasemodellering i MS Access. (VET at dette egentlig er et hardware-formun, men anyway....)

 

********** Link til datamodell **********

http://hjem.sol.no/brsseb/datamodell.jpg

 

********** Link til hovedskjema **********

http://hjem.sol.no/brsseb/hovedskjema.jpg

 

 

Dette er en database for et sted som leier ut lokaler (til møter, fester, etc). Kunder som

bestiller blir oppført med navn, adresser, etc. En bestilling på lokale kan bestå av en

eller flere lokaler. En kunde kan ha flere bestillinger, en bestilling kan ha flere

lokaler. Ganske basic stuff så langt...

 

 

I "Bestilling av lokale"-entiteten ser vi at en bestilling har en leiestart og leieslutt (dato og klokkeslett kombinert). Problemet er at slik som modellen er laget, er det stor fare for at bestillinger overlapper hverandre. Jeg vil at Access skal kunne passe på at man ikke taster inn datoer som vil overlappe de andre postene i "Bestilling av

lokale"-entiteten. Og jeg har ingen anelse om hvordan det gjøres (eller om det går ann..).

 

Og hvis jeg i det hele tatt klarer å få det til, har jeg ikke da et behov for en slags søkemotor (som tar start-og leieslutt som input) for at brukeren av systemet skal finne frem til ledige datoer??

 

Har jeg tatt meg vann over hodet eller er det en løsning på dette. Hadde vært kjekt om noen

hadde noen gode ideer/alternaiver/etc (eller kritikk av datamodellen min for den saks skyld....)

 

Hilsen datanørd som SKAL ha 6^er te sommeren..... :smile:

Lenke til kommentar
Videoannonse
Annonse

Hallo!

 

For det første er jeg redd du vil få problemer med den databasemodellen... Det å koble Kunde med Firmaopplysninger via postnummer? Dersom du taster inn kundeID i hovedskjemaet ditt vil du riktignok få opp korrekt kundenavn, men hva skjer når du søker firmainfo via postnummer? Går ut i fra at det Kundens firma du ønsker å finne? Avhengig av hva slags søk du gjør vil du med din modell få opp et eller flere/alle firma med samme postnummer som kunden :smile:

 

Dersom Kunde og Firma hører sammen legger du alt inn i samme tabell i steden... (Med unntak av Postnr tabellen!) Er det derimot slik at en kunde kan være en slags agent for ulike firmaer, bør du heller lage en 'en-til-mange' relasjon mellom disse to... Så vidt jeg kan se er det eneste unntaket om det er meningen at en 'kunde' skal serve alle 'firma' med samme postnummer...

 

Ellers ville jeg også ha laget et annet utgangspunkt for bestillingen... F.eks. med en spørring som først lister opp alle lokalene sortert etter første ledige dato OG kapasitet... (Ev. kun alle lokaler med minimum forespurt kapasitet). Til høyre for hvert lokale i listen ville jeg ha lagt inn en horisontal tidslinje som starter med dagens dato og viser f.eks. grønne dager for ledige og røde for opptatte (med mulighet for horisontal rulling fremover i tid!) Da vil brukeren enkelt kunne se alternative datoer og ev. ledige lokaler med større kapasisitet... Når kunden har akseptert dato/lokale/pris har du selvfølgelig en 'Bestillingsknapp' for hvert lokale på listen som bringer deg videre i registreringen... :smile:

 

Osv...

 

Lykke til!

 

[ endret av trn100 den 2002-03-19 22:23 ]

Lenke til kommentar

--------------

 

For det første er jeg redd du vil få problemer med den databasemodellen... Det å koble Kunde med Firmaopplysninger via postnummer? Dersom du taster inn kundeID i hovedskjemaet ditt vil du riktignok få opp korrekt kundenavn, men hva skjer når du søker firmainfo via postnummer? Går ut i fra at det Kundens firma du ønsker å finne?

 

etcetc

 

--------------

 

Sorry at jeg ikke har presisert dette tidligere, men Firma-tabellen er bare en rein informasjonstabell for firmaet som databasen er laget for. Ganske meningsløs egentlig fordi den bare er "til pynt" og inneholder derfor bare EN post.

 

Grunnen til at den er med er at i mange av eksemplene i læreboken min er slengt firmaopplysninger inn i hovedskjemaet (slik at bruker som sitter å snakker med kunder i telefon kan gi gatenavn, faxnummer, etc til kunden eller noe sånt. I eksemplet har de heller ikke linker Firma-tabellen med postnrtabellen...strange..).

 

Ganske enkelt, glem hele Firmatabellen! Ikke tenk på den, den er der bare til pynt og har ingen effekt på resten av databasen.

Lenke til kommentar
brsseb skrev (2002-03-19 23:37):

--------------

 

For det første er jeg redd du vil få problemer med den databasemodellen... Det å koble Kunde med Firmaopplysninger via postnummer? Dersom du taster inn kundeID i hovedskjemaet ditt vil du riktignok få opp korrekt kundenavn, men hva skjer når du søker firmainfo via postnummer? Går ut i fra at det Kundens firma du ønsker å finne?

 

etcetc

 

--------------

 

Sorry at jeg ikke har presisert dette tidligere, men Firma-tabellen er bare en rein informasjonstabell for firmaet som databasen er laget for. Ganske meningsløs egentlig fordi den bare er "til pynt" og inneholder derfor bare EN post.  

 

Grunnen til at den er med er at i mange av eksemplene i læreboken min er slengt firmaopplysninger inn i hovedskjemaet (slik at bruker som sitter å snakker med kunder i telefon kan gi gatenavn, faxnummer, etc til kunden eller noe sånt. I eksemplet har de heller ikke linker Firma-tabellen med postnrtabellen...strange..).

 

Ganske enkelt, glem hele Firmatabellen! Ikke tenk på den, den er der bare til pynt og har ingen effekt på resten av databasen.  

Dersom det bare er ETT firma som skal bruke programmet er det ingenting å spare på relasjonen til Postnr uansett så fjern med fordel den... En av grunnene til at jeg spurte var at jeg ikke kunne se f.eks. Fax/Kontonummer i Kunde-tabellen som jo burde være relevant f.eks. i forbindelse med fakturering, for ikke å snakke om org.nummer etc... Ved siden av stusset jeg på at relasjonen var definert som en 'en-til-mange'...

 

Ok, dersom dette er en OPPGAVE og ikke et prosjekt du skal markedsføre blir dette kanskje litt vel pirkete... :smile:

 

[ endret av trn100 den 2002-03-19 23:53 ]

Lenke til kommentar

-------- Ebe ----------

Hva med å ta med "status" - utleid: ja/nei? eller ta med dato som "primary-key" sammen de to andre i "Bestilling av Lokale-tabellen".

--------- -------------

 

 

Å ta med Status- vil ikke funke. Husk at denne databasen bare ikke egentlig leier ut lokale, den tar opp bestillinger. Et lokale kan derfor leier ut flere ganger, men til ulike tidspunkter.

 

Og ta med Primarykey i Bestilling av Lokale vil heller ikke gjøre noe nyttig, i så fall bare for EN bestilling. Husk at det er FLERE bestillinger med MANGE ordre. Problemet er at jeg har leiestart og leieslutt (altså et interval, om du vil).

 

(gjør oppmerksom på at jeg overhodet ikke er sikker på om dette er mulig! Kunne vært artig om vi fikk det til å fungere i praksis....)

 

:smile: TAKK TIL ALL RESPONSEN SÅ LANGT ALLE SAMMEN :smile:

Lenke til kommentar
brsseb skrev (2002-03-19 23:48):

-------- Ebe ----------

Hva med å ta med "status" - utleid: ja/nei? eller ta med dato som "primary-key" sammen de to andre i "Bestilling av Lokale-tabellen".

--------- -------------

 

 

Å ta med Status- vil ikke funke. Husk at denne databasen bare ikke egentlig leier ut lokale, den tar opp bestillinger. Et lokale kan derfor leier ut flere ganger, men til ulike tidspunkter.  

 

Og ta med Primarykey i Bestilling av Lokale vil heller ikke gjøre noe nyttig, i så fall bare for EN bestilling. Husk at det er FLERE bestillinger med MANGE ordre. Problemet er at jeg har leiestart og leieslutt (altså et interval, om du vil).  

 

(gjør oppmerksom på at jeg overhodet ikke er sikker på om dette er mulig! Kunne vært artig om vi fikk det til å fungere i praksis....)

 

:smile: TAKK TIL ALL RESPONSEN SÅ LANGT ALLE SAMMEN :smile:

Det er garantert mulig, men vil nok kreve noe koding... Tviler på at du vil få noen til å løse hele denne oppgaven for deg GRATIS :smile: (For mye arbeid!) For å gjøre den sjekken du i utgangspunktet spør om ville jeg for min del ha laget en 'while' loop i koden som sjekker om lokalet er ledig i det tidsrommet det bestilles for når du f.eks. trykker 'Registrer Bestilling', men uten den oversikten jeg nevnte tidligere vil du jo kunne få en del prøving/feiling på datoer...

 

[ endret av trn100 den 2002-03-20 00:02 ]

Lenke til kommentar

-----------------------------------------

Det er garantert mulig, men vil nok kreve noe koding... - TRN100

-----------------------------------------

 

Regnet nok med det der ja :smile:. Hvis det viser seg at dette ikke kan løses uten hjelp av koding, så gjør jeg rett i å avblåse hele greien. Jeg kan litt programmering (Litt Pascal, C/Visual C++, QBASIC) men ikke VBasic og har heller ikke lyst til å lære det akkurat nå.

 

Men læreren min ser det som en selvfølge at jeg har med Leiestart/slutt og passe på at tider ikke overlappes. Hva jeg trenger er å avgrense (som det så fint kalles) slik at alt blir mye enklere å lage. Men da trenger jeg bevis på at dette vil ta for mye tid, være for komplisert etc.

 

Læreren kan veldig lite (trolig ingenting) om VisualBasic koding (eller koding generelt for den slags skyld, ikke del av pensum heller) så jeg kan ikke bli trekt ned pga det.

 

Har noen en ide om hvordan jeg kan realisere denne databasen på en enkel og grei måte, uten alt for mye stress? :smile:

 

 

 

------------------

Ok, dersom dette er en OPPGAVE og ikke et prosjekt du skal markedsføre blir dette kanskje litt vel pirkete...

 

------------------

 

Hehe, går siste året på videregående skole. Årets hovedoppgave i "Sys.utvikling Modul B" (tror eg det heter", ikke noe større enn det. :smile:

Lenke til kommentar

For å sjekke om bestillingen kan foretas, må du nesten kjøre et query:

 

SELECT * FROM Bestilling av Lokale WHERE Leiestart >= 'leiestart' AND Leieslutt <= 'leieslutt' AND LokaleID = 'lokaleid'

 

Får du output her, vet du at lokalet er utleid.

Du kan jo evt slenge inn en NOT slik at hvis du får null vil du vite at lokalet kan leies ut...

 

Dette queryet kan også brukes til å sjekke om du har dobbelbooking i systemet... Får du mer en 1 rad output, vil du ha dobbelbooking.

 

Arrester meg hvis jeg har gjort noe fundamentalt galt... :wink: Jeg begynner å bli litt trøtt.

 

Hilsen Christian

Lenke til kommentar

Quote:


On 2002-03-20 00:16, christt skrev:

For å sjekke om bestillingen kan foretas, må du nesten kjøre et query:


SELECT * FROM Bestilling av Lokale WHERE Leiestart >= 'leiestart' AND Leieslutt <= 'leieslutt' AND LokaleID = 'lokaleid'


Får du output her, vet du at lokalet er utleid.

Du kan jo evt slenge inn en NOT slik at hvis du får null vil du vite at lokalet kan leies ut...


Dette queryet kan også brukes til å sjekke om du har dobbelbooking i systemet... Får du mer en 1 rad output, vil du ha dobbelbooking.


Arrester meg hvis jeg har gjort noe fundamentalt galt... :wink: Jeg begynner å bli litt trøtt.


Hilsen Christian


 

Hmm. Der har vi kanskje en løsning på det søkeskjemaet jeg snakket om tidligere. Så jeg beholder datamodellen slik den er og lager et skjema der denne spørringen kan kjøres på.

 

Ok, tenker med et skjema med 3 kontroller (tekstbokser), f,eks kalt "Ønsket leiestart" og "Ønsket leieslutt" og LokaleID. Så trykker du¨på en knapp og i delskjemaet under (der den spørringen din ligger) kommer det opp alle bestillingsordre som passer innen for dette intervallet. Kommer det ingen, er bestillingen grei. Kommer det noen, er lokalet oppdatt i denne perioden.

 

Litt stress å måtte kontrollere hver eneste bestilling slik, men ganske bra likevel. Å integrere denne spørringen slik at den kjøres når bruker taster inn bestilling blir vel bare rot, ikke sant?

Lenke til kommentar
christt skrev (2002-03-20 00:16):

For å sjekke om bestillingen kan foretas, må du nesten kjøre et query:

 

SELECT * FROM Bestilling av Lokale WHERE Leiestart >= 'leiestart' AND Leieslutt <= 'leieslutt' AND LokaleID = 'lokaleid'

 

Får du output her, vet du at lokalet er utleid.

Du kan jo evt slenge inn en NOT slik at hvis du får null vil du vite at lokalet kan leies ut...

 

Dette queryet kan også brukes til å sjekke om du har dobbelbooking i systemet... Får du mer en 1 rad output, vil du ha dobbelbooking.

 

Arrester meg hvis jeg har gjort noe fundamentalt galt... :wink: Jeg begynner å bli litt trøtt.

 

Hilsen Christian

Ideén er forsåvidt bra nok om du forutsetter at lokalet bare er reservert for én -1- periode om gangen... Om ikke annet kan kanskje christt bruke problemstillingen som argument for at oppgaven ikke kan løses 100% uten koding... :smile: Begynner å bli sent, så kanskje jeg surrer også, men uansett vil et system med kontrollen på det nivået med de gitte forutsetninger neppe bli marginelt i forhold til 100% utnyttelse av lokaler og ikke minst omsetning... Vil forhåpentligvis uansett ikke redusere karakteren å bemerke dette i en fotnote, spesielt ikke om sensor ikke forstår det :smile: (Kalles kreativt! :smile:)

 

[ endret av trn100 den 2002-03-20 00:39 ]

Lenke til kommentar

Jeg har ikke jobbet mye med Access, men kjenner SQL sånn passe godt.

 

Er det ikke mulig å sjekke med en slik spørring i det man legger inn en bestilling da?

 

Hvis det viser seg at lokalet ikke er ledig, kan man returnere et svar som sier at lokalet er opptatt.

Evt en feilmelding som sier at bestillingen ikke er tillatt.

Lenke til kommentar

Quote:


On 2002-03-20 00:31, trn100 skrev:

Quote:


christt skrev (2002-03-20 00:16):

For å sjekke om bestillingen kan foretas, må du nesten kjøre et query:


SELECT * FROM Bestilling av Lokale WHERE Leiestart >= 'leiestart' AND Leieslutt <= 'leieslutt' AND LokaleID = 'lokaleid'


Får du output her, vet du at lokalet er utleid.

Du kan jo evt slenge inn en NOT slik at hvis du får null vil du vite at lokalet kan leies ut...


Dette queryet kan også brukes til å sjekke om du har dobbelbooking i systemet... Får du mer en 1 rad output, vil du ha dobbelbooking.


Arrester meg hvis jeg har gjort noe fundamentalt galt... <IMG SRC="/images/smiles/icon_wink.gif"> Jeg begynner å bli litt trøtt.


Hilsen Christian


Ideén er forsåvidt bra nok om du forutsetter at lokalet bare er reservert for én -1- periode om gangen... Om ikke annet kan kanskje christt bruke problemstillingen som argument for at oppgaven ikke kan løses 100% uten koding... <IMG SRC="

 

Hva mener du med det?

En periode om gangen? Dette queryet sjekker om et lokale med en hvis id og leiestart /leieslutt finnes i Bestilling av lokale. Hvis man finner en rad, er det lokalet utleid i den perioden kunden ønsket å leie det.

 

Hvorvidt dette kan løses med eller uten koding vet jeg ikke da jeg ikke kjenner Access veldig godt.

Men å lage et query som sjekker om et lokale er ledig i en hvis periode er ingen umulighet.

Lenke til kommentar

Quote:


On 2002-03-20 00:32, christt skrev:

Jeg har ikke jobbet mye med Access, men kjenner SQL sånn passe godt.


Er det ikke mulig å sjekke med en slik spørring i det man legger inn en bestilling da?


Hvis det viser seg at lokalet ikke er ledig, kan man returnere et svar som sier at lokalet er opptatt.

Evt en feilmelding som sier at bestillingen ikke er tillatt.


 

Med bare SQL får du nok ikke sendt noe tilbakemelding. SQL returnerer bare et utvalg av postene som finnes i en eller flere tabeller. PL/SQL kan muligens gjøre noe slikt, men det kjenner jeg for lite til at jeg kan uttale meg om.

 

En annen ting er at jeg ser ikke helt poenget med både "bestilling" og "bestilling av lokale". Hvis du kjører sammen disse tabellene, vil du fortsatt beholde redundansen i databasen. Sånn det er nå lager du det mer komplisert enn nødvendig, så vidt jeg ser da. :smile:

Lenke til kommentar

Quote:



En annen ting er at jeg ser ikke helt poenget med både "bestilling" og "bestilling av lokale". Hvis du kjører sammen disse tabellene, vil du fortsatt beholde redundansen i databasen. Sånn det er nå lager du det mer komplisert enn nødvendig, så vidt jeg ser da. :smile:


 

Poenger er at en kunde kan ha FLERE Bestillinger i databasen til ulike tider. En Bestilling han inneholde EN ELLER FLERE Lokaler (f.eks kan en Kværner-ansatt ringe inn og bestille 4-5 lokaler som de skal benytte som konferanserom/møte for de ansatte etc).

Lenke til kommentar

Quote:


Hva mener du med det?

En periode om gangen? Dette queryet sjekker om et lokale med en hvis id og leiestart /leieslutt finnes i Bestilling av lokale. Hvis man finner en rad, er det lokalet utleid i den perioden kunden ønsket å leie det.


Hvorvidt dette kan løses med eller uten koding vet jeg ikke da jeg ikke kjenner Access veldig godt.

Men å lage et query som sjekker om et lokale er ledig i en hvis periode er ingen umulighet.


Sorry! Var i ferd med å korrigere da du postet og jeg fikk beskjed om at 'tråden ikke fantes' da jeg sendte... Mente heller ikke å blande ditt navn inn, men gikk litt i surr...

 

Du har selvsagt rett! Spørringen din vil gi beskjed om du registrerer en ny utleieperiode innefor en eksisterende utleid periode og løser forsåvidt den gitte oppgaven... Mente i grunnen bare at oppgaven er for dårlig fundemantert til å kunne gi gode svar :smile:

Lenke til kommentar

Quote:


On 2002-03-20 00:46, The Jackal skrev:


En annen ting er at jeg ser ikke helt poenget med både "bestilling" og "bestilling av lokale". Hvis du kjører sammen disse tabellene, vil du fortsatt beholde redundansen i databasen. Sånn det er nå lager du det mer komplisert enn nødvendig, så vidt jeg ser da. :smile:


 

/*

Enig, i prinsippet kan vel Bestilling være en tabell som ser slik ut:

 

KundeID*

LokaleID*

Dato for bestilling

Leiestart

Leieslutt

Antall personer

*/

 

Glem det som står over, så ikke at en bestilling kan inneholde flere lokaler. Da ville jeg heller gjort sånn:

 

Bestilling av Lokale

-------------

BestillingID*

KundeID*

LokaleID*

 

Bestilling

--------------------

BestillingID*

Dato for bestilling

Leiestart

Leieslutt

Ant personer

 

 

 

[ Denne Melding var redigert av: christt på 2002-03-20 01:07 ]

Lenke til kommentar

Quote:


On 2002-03-20 00:52, trn100 skrev:


Sorry! Var i ferd med å korrigere da du postet og jeg fikk beskjed om at 'tråden ikke fantes' da jeg sendte... Mente heller ikke å blande ditt navn inn, men gikk litt i surr...


Du har selvsagt rett! Spørringen din vil gi beskjed om du registrerer en ny utleieperiode innefor en eksisterende utleid periode og løser forsåvidt den gitte oppgaven...


 

Ikke noe problem! :smile:

 

Quote:


Mente i grunnen bare at oppgaven er for dårlig fundemantert til å kunne gi gode svar :smile:


 

må vel for såvidt si meg enig

 

[ Denne Melding var redigert av: christt på 2002-03-20 00:56 ]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...