Tja! Glömde! Hm jag skulle nog ha byggt typ.. ... och med en enkel Query beräkna hur många av en viss artikel Ok, tack för svaret! tblUsers (UId*, namn, pwd, etc) Jag ska se ifall jag kan knåpa ihop det. Jag är som sagt inte en höjdare på databaser, och har inte riktigt greppat allt ni säger. Har tittat lite på mysql.com om "Foreign Key Constraints" - är det detta jag ska använda? Du behöver inte implementera det om du inte vill - men det är en Jag måste fråga lite mer för jag vet inte riktigt hur man ska sätta ihop det på bästa sätt. Om man har ett många till många förhållande kan man aldrig lägga Design och uppbyggnad samt ihopkoppling av tabeller
Jag behöver tips, kommentarer och ideér till en sak som jag idag kom fram till är ganska jobbig att göra.
Jag ska göra ett system för utlåning av material. Det finns ett visst antal av varje grej. Varje "user" kan låna material, och ska då göra detta på nätet såklart. Jag har 1 databas med 3 tabeller i som det ser ut nu:
- users: tabell med användarinformation. Användarnamn, password, email, accessgrad, VadLånat*
- mtrl: tabell som innehåller alla olika saker och ett "artikelnr" till varje sak. ArtID, ArtNamn, TotANt, AntUtl, Lantagare, Utkvitterare
-[MedID**]: Tabell för användaren (en för varje). Håller reda på vad som är utlånat till just denna användare. ArtID, ArtNamn, AntLånade, ReturDatum, Ovrigt
Är detta ett bra sätt att gå till väga? Är det ett bra sätt att ha tabellerna på detta sätt om man ser det ur "utbyggnadssynpunkt". Är det lätt eller svårt att bygga vidare på en sådan design?
En sak till: är det nån som vet hur man kopplar ihop olika tabeller med varandra, alltså så att en kolumn i tabell1 kan styra värdet av en kolumn i tabell2. Alltså att tabell1 ligger "högre" upp i "rangordningen" och det är den som avgör värdet. Hmm... låter det osammanhängande?
mvh TedSv: Design och uppbyggnad samt ihopkoppling av tabeller
* = vad har den användaren lånat i kortform, dvs här står ArtID. För att underlätta. När man lsitar användare ser man vad de lånat.
** = tabellens namn är namnet på användaren. Alltså skapas det en tabell för varje användare som håller reda på vad de lånat.Sv: Design och uppbyggnad samt ihopkoppling av tabeller
TABELL tblUsers (id,namn,password, etc)
TABELL tblMatrial (id, artikelNr, total, Users_ref, etc)
TABELL tblUtlanat (id,Matrial_ref, Users_ref)
Relation från tblUsers till tblMatrial och från tabell
Users till tabell tblUtlanat samt från tabell tblMatrial till tabell
tblUtlanat, beror lite på om en user ska kunna låna flera artiklar eller om flera users ska kunna låna samma artikel (vilket jag antar att denne inte kan:) I tabell tblUtlanat så kan man lätt hålla reda på vad som är utlånat samt till vem. Sv: Design och uppbyggnad samt ihopkoppling av tabeller
som är utlånade... =)
En bra regel att tänka på är att:
Allt du kan få fram på annat sätt (beräkningar, hämta ur annan tbl osv)
inte ska vara med som ett eget fält.
/ESv: Design och uppbyggnad samt ihopkoppling av tabeller
Det finns i regel flera av samma sak, dvs olika person kan låna samma sak.
Men jag skulle uppskatta om du eventuellt hade kunnat utveckla relationerna. Jag har för längesen hållt på med Access-databaser och har ett mycket vagt minne av hur det fungerade och användes.
Jag vet inte hur man gör det i MySQL, eller riktigt hur det används. Skulle vara schysst om du kunde förklara det lite för mig.
mvh Sv: Design och uppbyggnad samt ihopkoppling av tabeller
tblArtikel (artNr*, totalAntal, etc)
tblUtlanat (ArtNr*, UId*, utlåndatum*, inlåndatum)
Där * visar vilka attribut som är nycklar
tblUsers och tblArtikel kan inte känna till varandra direkt eftersom
en person kan låna många olika artiklar och en artikel kan vara
utlånad till flera olika personer. Därför har man en egen tabell som
håller i de artiklar som är utlånade för tillfället. Om vi även förutsätter
att en artikel kan lånas upprepade gånger av en individ måste även
utlåndatum vara med i nyckeln, annars behövs den ej.
Att implementera databasen med constraints är alltid bra, men är inget
måste. De talar egentligen bara om att det inte får finnas personer eller
artiklar i tblUtlånat som inte finns i tblUsers eller tblArtikel.
/EmmaSv: Design och uppbyggnad samt ihopkoppling av tabeller
Sv: Design och uppbyggnad samt ihopkoppling av tabeller
extra säkerhet för att inte kunna få in allt för mycket felaktiga data
i databasen.
/EmmaSv: Design och uppbyggnad samt ihopkoppling av tabeller
Jag har de tre tabellerna: users, mtrl och utlanat
Om en användare ska låna tre batterier måste även antalet lagras.
Mitt problem är att jag inte riktigt vet hur eller var det ska lagras. Jag tänkte att man i tabellen users skulle lagra VAD man lånar och HUR MÅNGA man lånar. Eftersom man ska kunna låna flera saker, och all den informationen ska lagras i EN cell måste man ha en vektor. För varje sak man lånar, lägger man till en plats i vektorn med den sakens ArtikelNr. Sedan i "cellen bredvid" har man en vektor till som PÅ SAMMA POSITION lagrar hur många av artiklen man lånar.
Ex:
Jag lånar 3 batterier
I tabellen users:
HarLanat[7] == BATT // vektorn som på plats 7 har ArtikelNr (BATT)
Antal[7] == 3 // Vektor som på plats 7 har antalet lånade batterier
Då kan man alltså läsa ut ur tabellen users vad han har lånat samt hur många han har lånat.
Principiellt - fungerar det? Jag lyckades dock inte lägga in en vektor i en MySQL databas. Fick ett otrevligt felmeddelande.Sv: Design och uppbyggnad samt ihopkoppling av tabeller
något som tillhör relationstabellen i någon av de som ska knytas ihop.
Ex.
en student kan läsa många kurser
en kurs kan läggas av många studenter
om betyg läggs i kurs - kommer alla studenter få samma betyg på den
kurseb
om betyg läggs i student kommer studenten få samma betyg på alla
kurser
Lösningen är en relationstabell, tex tblBetyg (jämför med din tblUtlanat)
Där det finns nycklarna kurskod, personnr som anger att en student,
på en viss kurs får ett visst betyg, vilket gör betyg till ytterligare ett
attribut, datum kan vara ett annat om det är intressant
På samma sätt bör du lägga antal i utlånat - där ser du ju vilken
person som lånat vilket material - det är bara logiskt att även där
ange hur många personen lånat av just det.
Tänk alltid noga igenom det där med attributen i en tabell och var de
hör hemma - vad det är som gör just dem unika.
Vill du sedan ha reda på hur mycket en person lånat totalt är det
bara att summera och gruppera från tblUtlanat.
/Emma