| Visa föregående ämne :: Visa nästa ämne |
| Startad av: |
Meddelande |
EmilV


Medlem i: 3822 dagar Från: Upplands Väsby
Status: Offline
#720270
|
Skrivet: 2012-02-06 19:47
Ämne: Studiecirkel del 1: Relationsmodellen
|
|
|
Den här tråden hör till PHPportalens studiecirkel i databasteknik.
Läsanvisningar innan denna del
* Kapitel 1, Databaser och databashanterare. En del begrepp kan
vara lite svåra att förstå, så fråga i diskussionstråden som kommer om
ett par dagar.
* Kapitel 5, Relationsmodellen. Allt förutom 5.7. Du kan läsa
5.7 också om du vill, men den biten är rätt svår.
Vad är en databas?
Kontrollera att du förstår vad dessa ord innebär, och fråga om det är
något i kapitlet som är oklart:
* databas
* databashanterare
* tabell
* relation
* nyckel
Varje relation (tabell) har minst en nyckel som unikt identifierar en
rad. En sådan nyckel kan bestå av ett eller flera fält. I vissa fall
väljer man att ge varje rad ett unikt heltal (AUTO_INCREMENT) som en
så kallad surrogatnyckel. I andra fall finns det ett eller
flera fält som naturligt identifierar raden (till exempel ett
personnummer). Observera att det kan finnas flera olika nycklar i
samma relation, men man brukar välja en av dessa som man kallar
primärnyckeln.
Man brukar skriva sina tabeller/relationer på papper så här, där
primärnyckeln strukits under:
PERSON(personnummer, förnamn, efternamn, telefonnummer)
Observera att relation och tabell är samma sak. I
webbsammanhang brukar man nästan alltid säga tabell, men boken
som är lite mer akademisk föredrar relation. Jag blandar lite. Det är inte ovanligt att höra ordet "relationstabell" - då syftar man på en tabell med en speciell funktion, vilket vi också kommer till snart, och många kan nog tro att "relation" betyder just denna speciella sorts tabell.
Övningar
Uppgifterna 0-2 kan du göra på papper. 3-4 kräver tillgång till en
databashanterare. PM:a mig om du vill få tillgång till en sådan för
kursen! Det finns även bra övningar i boken, och det är såklart fritt
fram att ställa frågor om de övningarna också. Övningarna är främst
för din egen del, men jag rättar dem gärna. Posta dina svar antingen i
tråden eller i ett PM!
0) Du jobbar på Firman AB och ska spara information om kunder
och fakturor. För detta behövs det åtminstone två relationer
(tabeller). Vilka fält vill du ha i dessa relationer? Vilka nycklar
har du i varje relation? Finns det kanske någon alternativ nyckel
någonstans? Stryk under primärnyckeln i varje tabell.
1) Firman AB vill lägga till information om ordrar, alltså
beställningar. Varje beställning innehåller en enda vara med namn,
artikelnummer och pris. Dessutom finns det en faktura kopplad till
ordern. Lägger du till detta i fakturarelationen eller skapar du en ny
relation? Motivera och skriv ner resultatet!
2) Firman AB vill nu att varje order ska kunna innehålla upp till tre
produkter. Hur ser dina relationer ut?
3) Du kan skapa en tabell med SQL-kommandot CREATE TABLE, till exempel
så här:
1: CREATE TABLE tabellnamn (
2: fältnamn1 VARCHAR(255) NOT NULL PRIMARY KEY,
3: fältnamn2 VARCHAR(255) NOT NULL
4: );
|
Du kommer lära dig mer exakt vad detta betyder senare, men just nu
räcker detta. Skapa relationerna åt Firman AB. Låt varje fält vara
VARCHAR (vi kommer in på typer senare). Du kan se vilka relationer som
finns och hur de ser ut med dessa två kommandon:
1: SHOW TABLES;
2: SHOW CREATE TABLE tabellnamn;
|
Pröva dessa! Du kan ta bort en tabell med:
DROP TABLE tabellnamn;
4) Du kan sätta in data i en relation så här:
1: INSERT INTO tabellnamn(fältnamn1, fältnamn2) VALUES('värde1', 'värde2');
|
Och titta på datat i tabellen så här:
1: SELECT * FROM tabellnamn;
|
Ta bort en rad så här:
DELETE FROM tabellnamn WHERE fältnamn = 'värde';
För att ta bort en rad där "fornamn" är "Emil" skriver man alltså:
1: DELETE FROM tabellnamn WHERE fornamn = 'Emil';
|
Pröva detta! Vi kommer bygga upp svårare SELECT-satser senare, men
först måste vi gå igenom en del grundläggande teori.
Läs till nästa gång
* Kapitel 2, ER-modellering |
|
|
_________________ Tänk!
EmilVikström.se |
| Till toppen på sidan |
|
EmilV


Medlem i: 3822 dagar Från: Upplands Väsby
Status: Offline
#720290
|
|
|
_________________ Tänk!
EmilVikström.se |
| Till toppen på sidan |
|
chrillemeter
Medlem i: 1492 dagar
Status: Offline
#720492
|
|
|
|
| Till toppen på sidan |
|
ladan

Medlem i: 1960 dagar Från: Vara
Status: Offline
#720510
|
Skrivet: 2012-02-13 13:54
Ämne:
|
|
|
| Nummer ? kund-nr eller faktura_nr |
|
|
|
| Till toppen på sidan |
|
chrillemeter
Medlem i: 1492 dagar
Status: Offline
#720516
|
Skrivet: 2012-02-13 15:04
Ämne:
|
|
|
| ladan skrev: |
| Nummer ? kund-nr eller faktura_nr |
Nummer ligger under respektive entitet, och är Primary key.
Referensattributet ligger i sambandstypen. Eller hur jag ska beskriva det.
Kunde lika gärna skriva ID istället för Nummer.
Kund -> Nummer
Faktura -> Nummer |
|
|
|
| Till toppen på sidan |
|
ladan

Medlem i: 1960 dagar Från: Vara
Status: Offline
#720521
|
Skrivet: 2012-02-13 17:39
Ämne:
|
|
|
| chrillemeter skrev: |
| ladan skrev: |
| Nummer ? kund-nr eller faktura_nr |
Nummer ligger under respektive entitet, och är Primary key.
Referensattributet ligger i sambandstypen. Eller hur jag ska beskriva det.
Kunde lika gärna skriva ID istället för Nummer.
Kund -> Nummer
Faktura -> Nummer |
Ok
Du har i (Har Kund, Faktura) |
|
|
|
| Till toppen på sidan |
|
Shueazz

Medlem i: 1029 dagar Från: Stockholm
Status: Offline
#720830
|
Skrivet: 2012-02-21 00:08
Ämne:
|
|
|
Nu har även jag hunnit i kapp och läst kapitel 1 och 5.
Jag är bara lite fundersam till ditt diagram; om nummer är en primär nyckel
och nummer för båda tabellerna har relationer till varandra borde det ju inte
fungera eftersom en kund kan ha flera fakturor? Alltså om en kund med
nummer 4 har två fakturor borde båda dessa få nummer 4. Då måste man
urskilja dessa genom en super-nyckel?
Själv tror jag att jag hade gett fakturorna en egen nyckel i form av ID för
att sedan skapa ett samband till tabellen kunder genom en extra kolum kund.
Har jag förstått fel så förklara gärna.
Edit: Jag blev alltså fundersam när jag såg "1:N" i ditt diagram vilket jag tolkar som att kunden kan ha flera fakturor, därav min fråga. |
|
|
_________________ William |
| Till toppen på sidan |
|
chrillemeter
Medlem i: 1492 dagar
Status: Offline
#720833
|
Skrivet: 2012-02-21 09:23
Ämne:
|
|
|
| Shueazz skrev: |
Nu har även jag hunnit i kapp och läst kapitel 1 och 5.
Jag är bara lite fundersam till ditt diagram; om nummer är en primär nyckel
och nummer för båda tabellerna har relationer till varandra borde det ju inte
fungera eftersom en kund kan ha flera fakturor? Alltså om en kund med
nummer 4 har två fakturor borde båda dessa få nummer 4. Då måste man
urskilja dessa genom en super-nyckel?
Själv tror jag att jag hade gett fakturorna en egen nyckel i form av ID för
att sedan skapa ett samband till tabellen kunder genom en extra kolum kund.
Har jag förstått fel så förklara gärna.
Edit: Jag blev alltså fundersam när jag såg "1:N" i ditt diagram vilket jag tolkar som att kunden kan ha flera fakturor, därav min fråga. |
Vad EmilV har skrivit så behöver man inte skriva ut dessa kolumner då det är sambandstypen som talar om vad för "förhållande" entiteterna har till varandra.
Nummer är primärnyckel i båda entiteterna.
Kund->nummer och Faktura->nummer.
Kan passa på att rekomemdera ett bra program för att rita ER diagram med. Programmet heter DIA och är Open source, finns både till Linux och Windows.
http://projects.gnome.org/dia/ |
|
|
|
| Till toppen på sidan |
|
Shueazz

Medlem i: 1029 dagar Från: Stockholm
Status: Offline
#720847
|
Skrivet: 2012-02-21 12:48
Ämne:
|
|
|
Tack för uppdateringen, jag måste läsa kapitel 2 och 6 nu också så att jag verkligen förstår ER-diagram och hur man använder sig utav sambandstyper.  |
|
|
_________________ William |
| Till toppen på sidan |
|
ladan

Medlem i: 1960 dagar Från: Vara
Status: Offline
#720853
|
Skrivet: 2012-02-21 13:51
Ämne:
|
|
|
| chrillemeter skrev: |
Kan passa på att rekomemdera ett bra program för att rita ER diagram med. Programmet heter DIA och är Open source, finns både till Linux och Windows.
http://projects.gnome.org/dia/ |
Tack för tipset. |
|
|
|
| Till toppen på sidan |
|
chrillemeter
Medlem i: 1492 dagar
Status: Offline
#720857
|
Skrivet: 2012-02-21 14:30
Ämne:
|
|
|
| ladan skrev: |
| chrillemeter skrev: |
Kan passa på att rekomemdera ett bra program för att rita ER diagram med. Programmet heter DIA och är Open source, finns både till Linux och Windows.
http://projects.gnome.org/dia/ |
Tack för tipset. |
Hittade Dia av en slump när jag letade igenom Software center i Ubuntu. |
|
|
|
| Till toppen på sidan |
|
|