webForumDet fria alternativet

hjälp med utfomningen av resultat-lagring

Databaser & SQL

35 svar · 499 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Hej på Er webforumare :)
Nu har jag tänkt ta tag i en vilande projekt. Nämligen att för jobbets skull underlätta/automatisera beräkningen av vätskebalans. Tanken är att med hjälp av ASP lista innehåller i en databas. Sedan med hjälp av en formulär (kryssrutor – för de brukade vätskorna och textfält – för mängd) fylla i förbrukade vätskor. Denna information vill jag kunna lagra…
Följande villkor gäller:

  1. Varje patient har flera dagar
  2. Men varje dag är unik för just den pat. Dvs att jag skall kunna ta bort all inskriven data genom att jag tar bort patienten
  3. Varje dag används flera vätskor, men alla används inte varje dag
  4. Varje vätska har flera egenskaper (Na, K, Cl osv)
  5. Mängden som per dag används av varje vätska (dvs innehållet i textrutan) skall multipliceras med ”egenskapen” för just den vätskan och sedan skall de enskilda egenskaperna adderas var för sig och resultat skall skrivas in och lagras i en resultattabell.

Följande frågor har jag:

  1. Hur kan jag utforma denna lagringstabell, när jag på förhand inte vet hur många av vätskorna, och vilka som skall användas?
  2. På vilket sätt kan jag lösa beräkningen (se punkt e)
Medlem sedan dec. 20003 887 inlägg
#2

Jag antar att du var trött när du postade det här, eftersom du har packat ihop och bifogat en genväg... ;)

Hursomhelst, så här skulle min databas se ut. Den verkar täcka behovet. (1)

tblPatient
intPatientID (Integer) (PK)
+annan patientdata

tblUseage
dteDag (Date/Time)
intPatientID (Integer)
intFluidID (Integer)
sngAmount (Single)

tblFluids
intFluidID (Integer) (PK)
strNamn (String)

tblChemicals
intChemicalID (Integer) (PK)
strNamn (String)

tblMadeOf
intChemicalID (Integer) (FK -> tblChemicals)
intFluidID (Integer) (FK -> tblLiquids)
sngAmount (Single)

(2) Säg att patient 1 på en given dag får tre olika vätskor vilka i sig består av en till fyra olika delar kemikalier, så kan beräkningen se ut så här

SELECT Sum(tblU.sngAmount * tblMO.sngAmount)
FROM tblPatient tblP
INNER JOIN (tblUseage tblU
  INNER JOIN (tblFluids tblF
    INNER JOIN (tblMadeOf tblMO
       INNER JOIN tblChemicals tblC
         ON tblC.intChemicalID = tblMO.intChemicalID)
       ON tblMO.intFluidID = tblF.intFluidID)
    ON tblF.intFluidID = tblU.intFluidID)
  ON tblU.intPatientID = tblP.intPatientID
WHERE tblP.intPatientID = 1 AND tblU.dteDag = #2003-09-23#

Jag bifogar en liten databas för att visa hur jag tänker och om jag gjort som du tänkt :)

Medlem sedan mars 2002823 inlägg
#3

tack för ditt svar Engine^.....
Ser ut som en elegant lösning :bire - inget annat var att förvänta.
Kommer fördjupa och dissikera grundligare ditt förslag så fort jag hinner, men först ngr frågor/förtydligande:

PK

betyder primär nyckel - eller hur?
Men vad betyder

FK -> tblChemicals

Du har delat upp "innehållet" i 2 tabeller - dels en tabell som listar alla i förhållandet intressanta kemikaler (tblChemicals) och dels tillförda mängden (tblMadeOf) eller hur?

Ett annat problem är att jag inte kan öppna .rar med XP home - kan du packa i ngt annat format?

eftersom du har packat ihop och bifogat en genväg...

Och lika bra var det, eftersom mitt databas ändå inte såg ut som ditt :stud

Medlem sedan dec. 20003 887 inlägg
#4

PK är mycket riktigt Primary Key och FK är Foreign Key, vilken är en nyckel som är skapad utifrån relationer mellan tabeller och det kan du läsa mer om här. Det är ett resultat av att jag delat upp "innehållet" som du skrev.

Ja, visst, jag kan väl bifoga en zip-fil istället ;)

Medlem sedan mars 2002823 inlägg
#5

OK,
jag förstår att jag var ute och fladdrade när jag konstruerade mitt databas. Men med tanke på att det är första gången jag försöker så är det förståerligt:OO

Men vad menar du egentligen med:

Det är ett resultat av att jag delat upp "innehållet

Om jag nu skulle villja dela upp tblFluids i olika undergrupper, då måste jag skapa sådana FK, eller?

Medlem sedan dec. 20003 887 inlägg
#6

Jag la upp databasen som så att en vätska kan innehålla en eller flera olika kemikalier, så för varje vätska du lägger till behöver du även lägga till i tblMadeOf vad den består av. Du ser hur jag har gjort med vatten t.ex.
i tblFluid är har vatten id 2 och i tblChemicals finns atomerna H och O representerat med varsitt idnummer. I tblMadeOf är vätskan vatten beskriven med två rader.

intChemicalID    intFluidID    sngAmount
-------------    ----------    ---------
            3             2            1
            4             2            2

D.v.s. vätskan med id 2 innehåller 1 del av ämnet 3 och 2 delar av ämnet 4.

Medlem sedan mars 2002823 inlägg
#7

vätskan med id 2 innehåller 1 del av ämnet 3 och 2 delar av ämnet 4

I mitt fall blir det snarare:
vätskan med id 2 innehåller 0,154 mmol/ml av ämnet 3 och 0,004 mmol/ml av ämnet 4. Så totala mängden av respektive ämnen som är intressanta beror på mängden förbrukade.

Förrestän, ytterligare en fråga:
är sngAmount i tblUseage identisk med sngAmount i tblMadeOf ?

Medlem sedan dec. 20003 887 inlägg
#8

Jag tror att din ytterligare fråga kommer på grund av att du ínte förstog mitt upplägg av databasen. Att vätska två innehåller 0,154 millimol och 0,004 mmol är helt enligt hur jag tänkte... så svaret på din ytterligare fråga är nej. :)

En lösning av något ämne t.ex. det du beskrev är en (1) del av den lösningen. I tabellen tblUseage tänkte jag att du skulle ange hur många delar av den lösningen patienten ska få / fick, capice?

Medlem sedan mars 2002823 inlägg
#9

Vet inte om vi pratar förbi varandra, men...

  1. mängden "innehåll" är ju beroende av mängden patienten får av en speciell vätska.
  2. tex. i mitt exempel ger 1000 ml av vätskan med id 2 , då får patienten 154 mmol av ämnet 3 och 4 mmol av ämnet 4. Detta behöver inte (mellan)lagras ngnstans. Utan är bara intresserad av det totala mmol av ämnena 1, 2, 3 osv som patienten erhåller per dag
  3. var anger man mängden av de olika vätskor som patienten får? Detta skall nämligen lagras i "resultat"tabellen för varaje enskild vätska och för varje dag
Medlem sedan mars 2002823 inlägg
#10

Jag vet inte om jag lyckats förklara vad jag vill åstadkomma. Därför tänker jag vara "äkligt" tydlig och bifogar ngra filer:
Filen vätskebalans_projekt.xls hittas följande blad:

  1. inneh.per.ml visar de i sammanhanget relevanta vätskor med innehåll
  2. bladet vätskebalans kanske bättre kan förklara vad jag vill åstadkomma: i de rosa fälten fylls sammanlagda mängden "innehåll", medan i de blå givna mängden av de enskilda vätskorna
Medlem sedan mars 2002823 inlägg
#11

Tyvärr kan inte jag öppna Kemi.mdb eftersom jag har Access 2000...

Däremot har jag försökt göra en databas efter Engine^´s hjälp och vägledning.
Var det ungefär såhär du tänkt dig?

Medlem sedan mars 2002823 inlägg
#12

Engine^, har du sett "databasen"?

Medlem sedan mars 2002823 inlägg
#13

Nu har jag äntligen kunnat kolla kemi.mdb...
Vad betyder

+

i tblChemicals?

Medlem sedan dec. 20003 887 inlägg
#14

Åh, det betyder att posten har en relation till en post i en annan tabell.

Angående "databasen", så kan jag inte komma ihåg att jag har hunnit titta på den, men jag skulle kanske kunna ta mig en titt :)

Medlem sedan mars 2002823 inlägg
#15

posten har en relation till en post i en annan tabell

och hur fixar jag till det?

men jag skulle kanske kunna ta mig en titt

Vänta ett tag med det - håller just på att "jobba" med databasen

Medlem sedan dec. 20003 887 inlägg
#16

Hur du fixar till?

Om jag förstår dig rätt, så skapar du relationer genom att gå in på Tools->Relationships (eller klickar på en liten knapp i verktygsfältet som har tre små fönster i sig, förbundna med streck). En relation skapar genom några enkla steg

  • Högerklicka på den grå ytan och välj Show Tables. Välj dom tabeller du vill ha med...
  • Klicka på ett fält i en tabell och "dra" det till ett fält i en annan tabell, som du vill ska vara relaterade med varandra.

Men eftersom du hade tänkt att datat skulle vara för en ASPsida är det (förhållandevis) onödigt att skapa dessa relationer, eftersom Access jobbar internt med dessa då det till exempel skapar frågor med en wizard. (Det kan vara praktiskt i dom fallen du vill göra en cascade delete/update.)

Medlem sedan mars 2002823 inlägg
#17

en ASPsida är det (förhållandevis) onödigt att skapa dessa relationer

Menar du att jag inte behöver bry mig om relationer?

  1. i tblUsage och tblMadeOff har du 2 primärnycklar? hur har du lyckats med detta?
  2. + tecknet i tblChemicals - hur har du lyckats med det?
  3. är 1 och eller 2 onödiga vid ASPsida ?
Medlem sedan mars 2002823 inlägg
#18

så ser databasen ut för närvarande..
Hoppas att Engine^och ni andra kan ta er tid att titta på databasen, och komma med kommentarer.

Som ni nu säkert har förstått kommer databasen att användas på ASPsidor

Medlem sedan dec. 20003 887 inlägg
#19

Jag kan ta mig tid med detta och jag kan säga på en gång att din databas behöver omstruktureras en hel del.

Jag förstår att mina svar kanske inte har hjälpt dig så värst :)

Eftersom jag känner att jobbet (om sex timmar) kommer att vara lugna gatan, så blir det fint att ha lite annat att jobba med :)

För en gångs skull så har jag befintlig data att utgå ifrån och ett önskat resultat att uppnå istället för - skapa nytt, få knepiga idéer och förslag och gör om - kan jag arbeta med något konkret.

Medlem sedan mars 2002823 inlägg
#20

din databas behöver omstruktureras

Ajdå - och jag som var så nöjd med resultatet ;)

Men är naturligtvis kanoon tacksam för all hjälp. Det verkar ju inte vara så lätt att konstuera en databas

261 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)