Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2011-07-05, 10:19
  #1
Medlem
Vad är teorin bakom att hantera/kommunicera med en relationsdatabas?
Har byggt en relationsdatabas enligt konstens alla regler men insåg nu att jag inte vet teorin bakom att hantera kopplingarna, hur gör jag exempelvis för att läsa ut datan som ligger kopplad på den främmande nyckeln? Hur hanterar man att lägga in data och länka den till en främmande nyckel om den redan finns i systemet... Vet inte hur jag skall formulera frågan men hoppas på svar ändå

Läst någonting om att använda JOIN?
__________________
Senast redigerad av Sultanen af Nex 2011-07-05 kl. 10:23.
Citera
2011-07-05, 11:40
  #2
Moderator
Protons avatar
Läsning om att joina ihop tabeller:

http://en.wikipedia.org/wiki/Join_(SQL
Citera
2011-07-05, 11:41
  #3
Moderator
Protons avatar
Här finns även en lång tråd som handlar om att joina ihop tabeller:

https://www.flashback.org/t1580713
Citera
2011-07-05, 12:55
  #4
Medlem
Tack =)

Som jag förstår det så används join vid datautläsning?

Vid datainmatning hur går man till väga då?

Någonting liknande detta för ett mätobjekt och dess mätningar(varje objekt kan ha flera mätningar)?:

1. Kontrollerar med om objektet finns, finns det sparar man ID, finns det inte skapar man ett nytt och plockar fram dess ID( automatisk ökande identifierare).
2. skapar ny mätning och matar in ID i mätningens främmande nyckel.

Är det den proceduren man använder eller finns det något smartare sätt att plocka fram värdet på den främmande nyckeln när tabellerna har en länkad rellation?
Citera
2011-07-05, 17:57
  #5
Moderator
Protons avatar
Citat:
Ursprungligen postat av Sultanen af Nex
Tack =)

Som jag förstår det så används join vid datautläsning?

Vid datainmatning hur går man till väga då?

Någonting liknande detta för ett mätobjekt och dess mätningar(varje objekt kan ha flera mätningar)?:

1. Kontrollerar med om objektet finns, finns det sparar man ID, finns det inte skapar man ett nytt och plockar fram dess ID( automatisk ökande identifierare).
2. skapar ny mätning och matar in ID i mätningens främmande nyckel.

Är det den proceduren man använder eller finns det något smartare sätt att plocka fram värdet på den främmande nyckeln när tabellerna har en länkad rellation?
JOIN används vid datautläsning, samt i en del DBMS är det tillåtet med JOIN i UPDATE och DELETE med, men inte alla.

Om vi tänker oss följande scenario i ditt fall med mätningar så blir det nog klarare, du har nog redan kommit på det btw.

Till att börja med är ju relationen "EN mätpunkt kan ha FLERA mätningar".

Ska man lägga in en ny mätpunkt i databasen påverkas endast tabellen för mätpunkter.

Ska du lägga in en ny mätning faller det sej naturligt att du måste ju hålla reda på vilken mätpunkt du har gjort mätningen på, annars är ju mätningen värdelös, för då har du ett mått, men ingen aning om VAD det är du har mätt.

Blev det klarare?
Citera
2011-07-05, 22:39
  #6
Medlem
Tack för svaret!

Jag föreställer mig i alla fall att jag har rätt bra koll på förhållanden och databasstrukturen i sig, kan dela upp många till mångaförhålladen i teorin osv.. det jag inte har koll på är hur man brukar göra för att lyfta ut just det löpnummerID som just det mätobjektet har och placera det i mätpunktens främmande nyckel? Det är väl så enkelt som att plocka fram rätt mätobjekt och ta dess ID för att sedan placera det som mätpunktens främmande nyckel? Det som gör att jag förvirrar mig är väl egentligen att man vid datainmatning inte har någon nytta av rellationen i sig förutom att man möjligen får ett slag på fingrarna om man försöker mata in ett otilllåtet ID...

Har du något exempel på ett enkelt program som hanterar lite in och utmatning ur en databas med rellationer? Skulle nog må bra av att läsa lite kod i ämnet istället för all teori :P
Citera
2011-07-05, 22:48
  #7
Moderator
Protons avatar
Citat:
Ursprungligen postat av Sultanen af Nex
Tack för svaret!

Jag föreställer mig i alla fall att jag har rätt bra koll på förhållanden och databasstrukturen i sig, kan dela upp många till mångaförhålladen i teorin osv.. det jag inte har koll på är hur man brukar göra för att lyfta ut just det löpnummerID som just det mätobjektet har och placera det i mätpunktens främmande nyckel? Det är väl så enkelt som att plocka fram rätt mätobjekt och ta dess ID för att sedan placera det som mätpunktens främmande nyckel? Det som gör att jag förvirrar mig är väl egentligen att man vid datainmatning inte har någon nytta av rellationen i sig förutom att man möjligen får ett slag på fingrarna om man försöker mata in ett otilllåtet ID...

Har du något exempel på ett enkelt program som hanterar lite in och utmatning ur en databas med rellationer? Skulle nog må bra av att läsa lite kod i ämnet istället för all teori :P
Är väl bara att hugga nån av trådarna i php-forumet. Det borde finnas några där som tar upp just de fallen du är ute efter.

Det är inte så svårt att omsätta i praktiken faktiskt, det är bara att försöka. Det som däremot INTE funkar på flashback är "kan nån göra min läxa åt mej eftersom jag inte orkar göra den själv"-trådar.

I MySQLs SQL-dialekt (och i MS SQL-dialekt) finns det inbyggda funktioner för att ta reda på vilket det högsta numret är i en räknarkolumn, i php finns det dessutom en inbyggt funktion i språket för att hämta det id som skapats i den senaste inserten.
Citera
2011-07-11, 16:15
  #8
Medlem
Hej,

Har inte hunnit ta tag i det här tidigare men jag tror jag håller på att bli dum i huvudet av att inte få min fråga att fungera. Vill helt enkelt lägga in ett gäng med egna data samt en främmande nyckel ifrån en annan tabell, skriver min fråga som följer:

commandText = "INSERT INTO Weight(ID, Name) SELECT((SELECT ID FROM Costumer WHERE Name = ' " + Name.Text + "'), '" + WeightName.Text + "')"
__________________
Senast redigerad av Sultanen af Nex 2011-07-11 kl. 16:35.
Citera
2011-07-11, 22:00
  #9
Moderator
Protons avatar
Citat:
Ursprungligen postat av Sultanen af Nex
Hej,

Har inte hunnit ta tag i det här tidigare men jag tror jag håller på att bli dum i huvudet av att inte få min fråga att fungera. Vill helt enkelt lägga in ett gäng med egna data samt en främmande nyckel ifrån en annan tabell, skriver min fråga som följer:

commandText = "INSERT INTO Weight(ID, Name) SELECT((SELECT ID FROM Costumer WHERE Name = ' " + Name.Text + "'), '" + WeightName.Text + "')"
Det där ser ju inte klokt ut. Det var ett tappert försök dock.

Det som ser nasigt ut är din insert. Du vill stoppa i ID och name i din tabell. Data ska du tydligen ta från tabellen Costumer(Sic!).

Problemet här är inte felstavningen på tabellen, den hade kunnat heta kalleanka om så hade varit, men däremot i din select så läser du bara ut ID ser det ut som, men i din insert så säker du att du ska ha in ID och name. Funkade det verkligen, fick du inte ett syntaxfel där?

Hade du explicit sagt att du ville ha namn NULL hade det säkerligen funkat om du tillåter name att vara NULL dvs, annars måste du ha med Name i din fråga med eftersom du vill stoppa i två attribut, men bara förser din insert med ett av dem. Hajjaru?
Citera
2011-07-12, 00:26
  #10
Medlem
Tack för svaret och förlåt för min hemska felstavning...

commandText = "INSERT INTO Weight(customerID, weightName) SELECT((SELECT customerID FROM Customer WHERE Name = 'JoakimVonAnka'), '1kg')"

Ovan vill jag stoppa in customerID och Name i Weight, costuerID är en främmande nyckel jag vill jag hämta ifrån tabellen Customer på posten där Name är JoakimVonAnka, sedan vill jag sätta weightName till 1kg.

Hur skall jag skriva insert frågan för att detta skall fungera?

Vanligen stoppar man ju in data som nedan om man har all färdig.:

commandText = "INSERT INTO Weight(customerID, weightName) Values('12', '1kg')"

Något sådant, men som sagt, hur gör man det när man har customerID som man vill hämta ur annan tabel? Har egentligen en sammansatt nyckel med två/tre variabler som tillsammans unikt identifirerar en rad men börjar gärna med att få denna enklare variant att fungera först...
Citera
2011-07-12, 01:50
  #11
Medlem
gadzooxs avatar
INSERT INTO Weight(customerID, weightName) SELECT customerID, '1kg' FROM Customer WHERE Name = 'JoakimVonAnka'
Citera
2011-07-12, 01:59
  #12
Medlem
Citat:
Ursprungligen postat av gadzoox
INSERT INTO Weight(customerID, weightName) SELECT customerID, '1kg' FROM Customer WHERE Name = 'JoakimVonAnka'
Tack för svaret!

Jag blir inte klok på hur det fungerar dock, "SELECT customerID, '1kg' FROM", varför placeras 1kg(som ju är weightName), innan man hämtar in customerID?
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback