Så här ser det ut idag Excelform: Låter som ett många till många förhållande. Här kommer ett förslag: Behöver jag inte i Tävlingstabellen Sätta upp fält om det är en <info> <info> <info> Tack Patrik ska prova i em. Då kan du även lägga till tabellerna: Jag måste väl någonstans i tbl_Tävling ha med ett Fält för Spelsätt Eller är det knutet till TävlingsID på ngt sätt? Och gör du detta i Access eller direkt i en SQL-sats från webbformuläret? Nej du måste inte ha något fält för spelsätt eftersom du har en relationstabell och den visar vilka spelsätt som ingår i en tävlig. Vad jag menade var att man från sin webbsida direkt kan koppla relationerna med JOIN/INNERJOIN och då inte behöver skapa en fråga i Access mot SQL-frågan på webbsidan. Som jag sa Hittade en bra länk via google när jag sökte på third normal form http://internet.physto.se/webbapplikationer/databasdesign/relationsmodell/konkret_exempel/forsta_forsoket/index.php Sen finns det lite tutorials i SQL på http://www.idg.se/webstudio/pub/object.asp?id=14 Här är ett exempel hur det ser ut i Excel boken TavlingsID 1:Skall skapa ett sökregister på tävlingar.
Småland
Hall Startdat Slutdat Final Tävlingsnamn Spelsätt Serie
Jönköping, Arena 2004-09-22 2004-09-25 2004-09-26 Super Six Tournament H D I 6s am, Super Six
Jönköping, Arena 2004-11-05 2004-11-06 2004-11-07 Mixed-SM H D 12s Scotch,
Jönköping, Arena 2004-12-27 2005-01-06 JP-fighten H D I 3s cup eu,
Jönköping, Arena 2005-02-05 2005-03-20 Bowling Arena Open H D I 8s hcp eu,
Vad jag då behöver är en tbl_Distrikt:
DistriktID
Distrikt
en tbl_hall
HallID
Hall
en tbl_tävling
TävlingId
DistriktId
HallId
TävlingsNamn
Startdatum
Slutdatum
Final
Men hur gör jag med tävlingssätten?
Det kan alltså i samma tävling vara både för dam herr eller bara dam individuellt och i lag. Det kan vara 2-manna 4-manna 5-manna tävling.
Det kan vara europeisk,amerikanskt baker eller scottish spelsätt.
Det kan vara pojk, flick, junior, ungdom, senior och veteran.
Det är 4, 6, 8, eller 12 serier.
Det kan vara Hcp, open eller både och.
Vet ej hur jag ska göra den tabellen/tabellerna?
Tacksam för förslag.
Gert
Sv: Skall skapa ett sökregister på tävlingar.
Tabell: tbl_Distrikt
Fält: DistriktID
Fält: DistriktNamn
Tabell: tbl_Hallar
Fält: HallID
Fält: HallNamn
Tabell: tbl_Tävlingar
Fält: TävlingsId
Fält: TävlingsDistrikt -> tbl_Distrikt.DistriktID
Fält: TävlingsHall -> tbl_Hall.HallID
Fält: TävlingsNamn
Fält: TävlingsStartdatum
Fält: TävlingsSlutdatum
Fält: TävlingsFinal
Tabell: tbl_Spelsätt
Fält: SpelsättId
Fält: SpelsättNamn
Tabell: tbl_TävlingarSpelsätt
Fält: TävlingsId -> tbl_Tävlingar.TävlingsId
Fält: SpelsättId -> tbl_Spelsätt.SpelsättIdSv: Skall skapa ett sökregister på tävlingar.
Jag förstår inte riktigt hur du menar med tabellen:
Tabell: tbl_TävlingarSpelsätt
Fält: TävlingsId -> tbl_Tävlingar.TävlingsId
Fält: SpelsättId -> tbl_Spelsätt.SpelsättId
Innebär det att jag i tbl_Tävling inte behöver några
Fält: TävlingHerr
Fält: TävlingDam
Fält: TävlingJunior
Fält: TävlingSenior
Fält: TävlingOldboys
Fält: TävlingSerier
Fält: TävlingSpelsätt
Fält: TävlingHcp
Eftersom det i en och samma tävling kan vara för:
Damer o Herrar
8 serier
Hcp och Open
europeiskt spelsätt
Eller i en annan tävling:
3-manna lag
12 serier
Open
Bakers
Tabell: tbl_Tävlingar
Fält: TävlingsId
Fält: TävlingsDistrikt -> tbl_Distrikt.DistriktID
Fält: TävlingsHall -> tbl_Hall.HallID
Fält: TävlingsNamn
Fält: TävlingsStartdatum
Fält: TävlingsSlutdatum
Fält: TävlingsFinal
Fält: TävlingSex // Dam, Herr, Junior, Senior, Oldboys
Fält: TävlingSerier // 4, 6, 8, 12 och så vidare
Fält: TävlingSpelsätt // eu, am, mix, baker, scotshSv: Skall skapa ett sökregister på tävlingar.
Innebär det att jag i tbl_Tävling inte behöver några
Fält: TävlingHerr
Fält: TävlingDam
Fält: TävlingJunior
Fält: TävlingSenior
Fält: TävlingOldboys
Fält: TävlingSerier
Fält: TävlingSpelsätt
Fält: TävlingHcp
</info>
Ja, det är precis vad det betyder.
Att bygga en lösning som ovan med en kolumn för varje typ är dålig databasdesign. Istället har man en tabell som innehåller de olika tävlingssätten. Därför använder man istället en design som Andreas givit dig. Den innehåller en tabell för varje "typ av objekt" som finns i systemet och sedan relationstabeller som kopplar ihop dessa. På detta sätt kan man ha 1-n och n-n relationer.Sv: Skall skapa ett sökregister på tävlingar.
Tabell: tbl_TävlingarSpelsätt
Fält: TävlingsId -> tbl_Tävlingar.TävlingsId
Fält: SpelsättId -> tbl_Spelsätt.SpelsättId </info>
Har inte hängt med i hur man tänker på relationsnivå.
Betyder det att jag i denna tabell lägger upp om det är
TävlingsID SpelsättID Spelsätt
1 1 Herr
2 2 Dam
3 3 Junior
osv.
Men hur går kopplar man relationerna till detta då. Om det både är dam och herr klass, samt junior tävling?
GertSv: Skall skapa ett sökregister på tävlingar.
Tabell: tbl_Distrikt
Fält: DistriktID
Fält: DistriktNamn
Tabell: tbl_Hallar
Fält: HallID
Fält: HallNamn
Tabell: tbl_Tävlingar
Fält: TävlingsId
Fält: TävlingsDistrikt -> tbl_Distrikt.DistriktID
Fält: TävlingsHall -> tbl_Hall.HallID
Fält: TävlingsNamn
Fält: TävlingsStartdatum
Fält: TävlingsSlutdatum
Fält: TävlingsFinal
Tabell: tbl_Spelsätt
Fält: SpelsättId
Fält: SpelsättNamn
Tabell: tbl_TävlingarSpelsätt
Fält: TävlingsId -> tbl_Tävlingar.TävlingsId
Fält: SpelsättId -> tbl_Spelsätt.SpelsättId
</info>
Att gå igenom en tutorial i grundläggande databasdesign och en i SQL är nyttigt och ett måste om man ska pyssla med databaser.
Om vi kollar på tabellerna Andreas designat och stoppar in lite exempeldata
tblDistrikt
1 Stockholm
2 Göteborg
tblHallar
1 Kungshallen
2 Tennishallen
3 Vallahallen
tblTävlingar
1 Supertävling 1 1 'En supertävling' 2004-10-01 2004-10-05 2004-10-05
tblSpelsätt
1 Herr
2 Dam
3 Junior
tblTävlingarSpelsätt (detta är en relationstabell)
1 1
1 2
1 3
En tävlings alla spelsätt ser vi nu i tblTävlingarSpelsätt. Om vi har en tävling med ID=1 kan vi göra en JOIN mellan tblTävlingarSpelsätt och tblSpelsätt och få ut namnen på spelsätten för den valda tävlingen.
<code>
SELECT SpelsättNamn
FROM tblSpelsätt s JOIN tblTävlingarSpelsätt ts ON s.SpelsättId = ts.SpelsättID
</code>
Resultatet från denna fråga bli
<code>
Herr
Dam
Junior
</code>Sv: Skall skapa ett sökregister på tävlingar.
JAg håller på att klippa och klistra fr en Excel bok (heter det så) där det ser ut så här idag
<info>
Lidingö 2005-02-02 2005-02-05 2005-02-06 Lidingö Tourn.Viking Components H D I 6s am, Super Six
</info>
Som du ser så är det för Herrar damer den är internationell spelas över 6 serier med amerikanskt spelseätt. Som ingår den i Super Six som är en tunering
GertSv: Skall skapa ett sökregister på tävlingar.
tblTurnering
TurneringsID
TurneringsNamn
tblTurneringsTävlingar
TurneringsID
TävlingsID
och på så sätt få fram alla tävlingar som är med i en turnering.
Alternativt går det att lägga en kolumn i tävlingstabellen för TurneringsID, men då blir det ett noll eller null värde om tävlingen inte ingår i någon turnering.Sv: Skall skapa ett sökregister på tävlingar.
GertSv: Skall skapa ett sökregister på tävlingar.
Det här är väldigt grundläggande design och du måste läsa någon tutorial för att lära dig grunderna om du ska förstå hela konceptet. Läs på om Third Normal Form (3NF).
<info>
Och gör du detta i Access eller direkt i en SQL-sats från webbformuläret?
</info>
Jag förstår inte frågan.
Relationerna ligger i tabellerna. För att ta ut data ställer du SQL-frågor. Antingen genom parameteriserade databaskommandon i koden eller genom stored procedures (queries i Access).Sv: Skall skapa ett sökregister på tävlingar.
Sv: Skall skapa ett sökregister på tävlingar.
<info>
Relationerna ligger i tabellerna. För att ta ut data ställer du SQL-frågor. Antingen genom parameteriserade databaskommandon i koden eller genom stored procedures (queries i Access).
</info>
Man kopplar inte relationer, dom finns där genom relationstabellen. Det räcker med en SQL-fråga och det spelar ingen roll om du lägger frågan i databasen eller i koden, förutom ur säkerhetssynpunkt.Sv: Skall skapa ett sökregister på tävlingar.
Ska läsa den först!Sv: Skall skapa ett sökregister på tävlingar.
Sv: Skall skapa ett sökregister på tävlingar.
DistriktsId HallId Start Slut Final TavlingsNamn OlikaSpelsätt
1 702 2004-10-30 2004-10-31 3-manna DM H D J 15s 3m Baker
Jag övergick till MSDN2000 För det är lättare att testa SQL-Satserna där.
Om jag nu då gör en SQL Sats som Du gav ett exempel på tidigare
SELECT dbo.Tavling.TavlingsId, dbo.Tavling.DistriktId, dbo.Tavling.HallId, dbo.Tavling.Start, dbo.Tavling.Slut, dbo.Tavling.Final, dbo.Tavling.TavlingsNamn,
dbo.tblSpelsatt.SpelsattsNamn
FROM dbo.tblTavlingarSpelsatt INNER JOIN
dbo.tblSpelsatt ON dbo.tblTavlingarSpelsatt.SpelsattsID = dbo.tblSpelsatt.SpelsattsID INNER JOIN
dbo.Tavling ON dbo.tblTavlingarSpelsatt.TavlingsID = dbo.Tavling.TavlingsId
WHERE (dbo.Tavling.TavlingsId = 1)
Så får jag ut sex rader Från Tävling spelsätt
TavlingsId DistriktId HallId Start Slut TavlingsNamn Spelsatt
1 1 702 2004-10-30 2004-10-31 3-manna DM Dam
1 1 702 2004-10-30 2004-10-31 3-manna DM Herr
1 1 702 2004-10-30 2004-10-31 3-manna DM Junior Herr
1 1 702 2004-10-30 2004-10-31 3-manna DM Junior Dam
1 1 702 2004-10-30 2004-10-31 3-manna DM Baker
1 1 702 2004-10-30 2004-10-31 3-manna DM 3-Manna
Kan man på något sätt ändra så att den skrivs ut på en rad?
Alltså att Slå samman kolumnen Spelsatt då man får:
TavlingsId DistriktId HallId Start Slut TavlingsNamn Spelsatt
1 1 702 2004-10-30 2004-10-31 3-manna DM Dam Herr Junior Herr Osv
Gert