/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Design af Access db
Fra : Zodiax


Dato : 25-01-04 23:39

Jeg har en Access database, der indeholder nogle CD titler. Jeg vil også
have at den skal indeholde navnene på de forskellige sange på cd'erne. Jeg
havde først tænkt mig at smide alle sangnavnene ind i ét felt i samme række
som CD titlen stod i, separeret med komma, men jeg hører at det er en dårlig
løsning. Jeg kan ikke lige overskue hvordan jeg skal bygge databasen op så
jeg undgår ovenstående problem, så jeg håber der er nogle der kan hjælpe mig
lidt.

--
Zodiax



 
 
Jens Gyldenkærne Cla~ (26-01-2004)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 26-01-04 00:28

Zodiax skrev:

> Jeg har en Access database, der indeholder nogle CD titler.
> Jeg vil også have at den skal indeholde navnene på de
> forskellige sange på cd'erne. Jeg havde først tænkt mig at
> smide alle sangnavnene ind i ét felt i samme række som CD
> titlen stod i, separeret med komma, men jeg hører at det er en
> dårlig løsning.

Det er helt korrekt. Et felt bør indeholde maksimalt indeholde én
oplysning.

> Jeg kan ikke lige overskue hvordan jeg skal
> bygge databasen op så jeg undgår ovenstående problem,

Løsningen er flere tabeller, kædet sammen af relationer. I dit
tilfælde er cd-titlerne en samling oplysninger der hører til i en
tabel. Numrene på hver enkelt cd hører til i en anden tabel. Til
hvert nummer hører præcis én cd, mens en cd godt kan indeholde
flere numre. I databasesammenhæng siger man at der er en "en til
mange"-relation mellem de to tabeller.

Du kan lave tabellerne som her:

tbl_cd (tabelnavnet, feltnavnene følger herunder)
- cdID (id-nummer, primærnøgle - identificerer hver cd entydigt)
- titel
- kunstner

tbl_numre
- nummerID
- cdID (refererer til tbl_cd - sørger for at et nummer knyttes til
en cd)
- nummerTitel
- varighed


Jeg vil anbefale dig at låne eller købe en bog eller et hæfte om
databasedesign. Det kan spare dig for en del problemer senere. Jeg
har selv haft glæde af Joakim Dalbys "Databasehåndbogen", men de
små hæfter fra IDG er vist også nogenlunde.

Endelig vil jeg anbefale dig at kigge på eksempeldatabasen
Northwind der følger med Access. Her kan man se en del ting om
databaseopbygning vist i praksis.

Held og lykke med projektet.
--
Jens Gyldenkærne Clausen
»Diplomatiet består netop i, at de gamle kommatister kan få lov til
at tro, at de har vundet. Men i virkeligheden har de tabt.«
Ole Togeby i Information

Jesper Stocholm (26-01-2004)
Kommentar
Fra : Jesper Stocholm


Dato : 26-01-04 00:31

Zodiax wrote :

> Jeg har en Access database, der indeholder nogle CD titler. Jeg vil
> også have at den skal indeholde navnene på de forskellige sange på
> cd'erne. Jeg havde først tænkt mig at smide alle sangnavnene ind i ét
> felt i samme række som CD titlen stod i, separeret med komma, men jeg
> hører at det er en dårlig løsning. Jeg kan ikke lige overskue hvordan
> jeg skal bygge databasen op så jeg undgår ovenstående problem, så jeg
> håber der er nogle der kan hjælpe mig lidt.

En løsning kunne være at splitte dine data op i to tabeller - en tabel
til CD-data og en tabel til track-data.

Tabel: CdData

| id | Kunstner | Titel | Udgivelsesaar |
------------------------------------------------
1 Karen Én til én 2001
2 Snap Cult of Snap 1990

Tabel: CdTracks

| id | Sang | Laengde | CdId |
----------------------------------------------------
1 Vis mig, at du er min mand 3.24 1
2 Guld og papir 3.54 1
3 Power of Snap 2.57 2
4 Snap rules ( :) ) 3.15 2

Hvis du så skal udtrække alle Karens numre, så finder du det unikke Id
for hendes CD og laver SQL som

SELECT id,Sang,Laengde FROM CdTracks WHERE id = 1

Resultatet af dette giver

1 Vis mig, at du er min mand 3.24
2 Guld og papir 3.54

Hvis du vil udtrække all CD-data for en sang i tabellen over sange, så
laver du en JOIN imellem de to tabeller

SELECT
d.Kunstner, d.Titel, d.Udgivelsesaar, t.Sang, t.Laengde
FROM
CdData d INNER JOIN CdTracks t ON t.Cdid = d.Id
WHERE
t.id = 1

Der giver

Karen | Én til én | 2001 | Vis mig, at du er min mand | 3.24

(det kan naturligvis gøres passende mere kompliceret end som så)



--
Jesper Stocholm

Gør Christiania en tjeneste - køb din hash et andet sted.

Zodiax (26-01-2004)
Kommentar
Fra : Zodiax


Dato : 26-01-04 18:47

Jesper Stocholm wrote:
<KLIP>
> En løsning kunne være at splitte dine data op i to tabeller - en tabel
> til CD-data og en tabel til track-data.

Det ser meget fornuftigt ud det I siger.
Tak for hjælpen

--
Zodiax



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste