Det var länge sedan jag lärde mig databaser och sedan har jag inte använt databaser på flera år så jag vill bolla lite ideer... Dina frågor ser lite skumma ut; jag antar att de inte ser ut så ordagrant? Nejdå, frågorna är inte ordagranna mer principiella. <b>>Nejdå, frågorna är inte ordagranna mer principiella.</b> Skilj på relationer, relationer och relationer... <b>>Vi har dels en fråga om ordval; i beteckningen relationsdatabas syftar inte "relation" på kopplingen mellan tabeller utan på tabellerna själva (som matematiskt sett är ett slags relationer). Därför undviker jag att kalla kopplingarna för relationer.</b>Nytta med relationer?
Jag har en databas med ett gäng tabeller i, bland annat:
Elev
Skola
förening
lärare
I access skulle jag har gjort relationer (jag har det nu...) Men nu bygger jag detta i asp.net och använder urval till "allt".
Jag har ex på sidan där all elevdata registreras en dropdownlist med skolor från den tabellen, en dropdownlist med lärare (från lärartabellen med urval på skolan båda har i sitt skolfält), och en dropdownlist med förening från den tabellen.
Primär nyckel i skoltabellen är skolnamn (skolnamnet är inklusive orten, ex "wasaskolan, arboga")
Vill jag visa data om skolan som eleven går på så skriver jag bara i min sql fråga FROM skola WHERE skola = label1.text (där skolnamnet visas, alt bara en variabel)
Vill skolan se sina elever så gör jag samma lösning fast FROM elev.
Jag funderar på att ta bort relationerna för jag ser ingen nytta med dom. Det ger däremot lite problem, å andra sidan kanske det bara blir en röra av hela databasen om man inte har det så det krävs relaterade poster i andra tabeller, men skriver man inga sådana data manuellt så...
Ett problem jag ser är om ex skolan byter namn, eller en lärare byts ut då måste man välja om på sidan för elevuppgifter, då borde jag ha ett löpnummer som primär nyckel för skolan och läraren, men behöver jag relationen?
Hmm, relationer har man fått lära sig att man "måste" använda så det känns fel att ta bort dom, men det känns nödvändigare (och jag ser fler fördelar) när man kör access direkt.
Från början hade jag normaliserat massor med relationer överallt, men nu blir det mindre och mindre tabeller...
Jag grubblar fram och tillbaka och blir inte klok på det, lite feedback och goda råd vore trevligt!
(Jag har nu en Access DB, men ska migrera till xxSQL när allt funkar som jag vill)Sv: Nytta med relationer?
I princip ska databaser alltid vara "fullt normaliserade" (även om det är ett ganska skumt uttryck). Det innebär att man alltid delar upp all information och alltid ser till att varje entitet bara finns en gång. Du bör inte ha skolans ort och skolans namn tillsammans, utan ha en primary key på (Namn, Ort).
Nyttan är, precis som du skriver, att man undviker anomalier. Utöver det så representerar databasen verkligheten på ett bättre sätt.
Du ger själv en rad skäl till att det är dåligt att ta bort relationer, men jag kan inte se något som helst skäl till att göra det.Sv:Nytta med relationer?
Japp, jag har skola + ort tillsammans som primärnyckel. Men det kanske vore bättre med en räknare?
Nyttan med relationerna (i asp.net och troligen även vb.net) är såvitt jag kan förstå att hålla ordning och reda. I Access har man nytta av dom när man gjorde formulär osv också.
Om jag har relationer kan jag ha nytta av dom utöver ordningshållandet när jag programmerar, eller gör jag rätt som löser det med sql satser? då använder man ju inte (jag gör inte..) relationerna till annat än att säga ifrån om något är fel. Finns det något "mera rätt" sätt att göra?
Jag behåller relationerna, men kan jag utnyttja dom bättre när de ändå är där?
Jag har en tabell som är helt flat eftersom den lagrar gamla registreringar precis som en pappersbok, är det väl skrivet ska det inte ändras.
Jag sparar då ett fält från varje tabell det kunde gå med en relation men när jag ändå måste spara ett fält så är det väl enklare att spara det jag vill ha direkt istället för ett id från nästa tabell? Det är bra mycket enklare att visa info från den tabellen då. I just det fallet ser jag ingen nytta alls att ha några relationer.
Det enda som är "onödigt" är att jag har både pers nr + förnamn + efternamn för att få bättre överblick. pers nr kunde räcka men namnet underlättar.
Skulle jag kunna försvara den flata tabellen mot min gamla lärare?Sv: Nytta med relationer?
Jag pratade om SQL-frågorna
<b>>Japp, jag har skola + ort tillsammans som primärnyckel. Men det kanske vore bättre med en räknare?</b>
Du skrev att du hade dem tillsammans. Jag menar att du bör ha dem som olika fält, och ha båda fälten som primärnyckel tillsammans.
<b>>Nyttan med relationerna (i asp.net och troligen även vb.net) är såvitt jag kan förstå att hålla ordning och reda. I Access har man nytta av dom när man gjorde formulär osv också.</b>
Nej, nej. "Ordning och reda" är alldeles för vagt.
1. Relationer leder till normalisering, normalisering leder till avsaknad av anomalier. Byt namn på en skola på en rad, men inte på andra, osv., så får man problem. Såna problem kan man inte få om det är "korrekt normaliserat".
2. Det ger en bättre koppling till verkligheten. Varje entitet ska på något sätt beskriva en enskild sak. En skola är inte en del av en elev, alltså står inte "skola" i elevtabellen. Däremot går varje elev på en skola, och då har man en relation mellan skola och elever.
<b>>Om jag har relationer kan jag ha nytta av dom utöver ordningshållandet när jag programmerar, eller gör jag rätt som löser det med sql satser? då använder man ju inte (jag gör inte..) relationerna till annat än att säga ifrån om något är fel. Finns det något "mera rätt" sätt att göra?</b>
Ja, det är väl ganska vettigt att se till att man inte kan göra en ganska stor typ av fel!?
Och framför allt: finns det något negativt med att ha dem där, menar du?
Det är det här som är betraktat som "rätt sätt".
<b>>Jag behåller relationerna, men kan jag utnyttja dom bättre när de ändå är där?</b>
Jag ser inte riktigt problemet. Det är en strukturerad beskrivning av verkligheten. Relationernas jobb är att se till att man inte kan göra vissa saker fel.
<b>>Jag har en tabell som är helt flat eftersom den lagrar gamla registreringar precis som en pappersbok, är det väl skrivet ska det inte ändras.</b>
Ser inte poängen med det alls. Om det finns en underliggande struktur så är det i stort sett alltid bättre att normalisera det.
<b>>Jag sparar då ett fält från varje tabell det kunde gå med en relation men när jag ändå måste spara ett fält så är det väl enklare att spara det jag vill ha direkt istället för ett id från nästa tabell? Det är bra mycket enklare att visa info från den tabellen då. I just det fallet ser jag ingen nytta alls att ha några relationer.</b>
Men... det är ju bara några joinar. Du har alternativen:
- Vara garanterad en databas som aldrig får idiotiska fel i stil med att en skola har två olika adresser, en elev har olika namn i olika kurser, en skola kan försvinna för att alla gamla elever är borta, och inga nya elever är inlagda, osv.
- Skriva en rad sql istället för tre rader.
<b>>Skulle jag kunna försvara den flata tabellen mot min gamla lärare?</b>
Definitivt inte.Sv:Nytta med relationer?
Vi har dels en uppdelning av data i flera tabeller (normalisering) med kopplingar mellan tabellerna.
Vi har dels en möjlighet i Access att grafiskt rita upp kopplingarna och sedan få Access att automatiskt skapa JOINs när vi skapar frågor.
Vi har dels en fråga om ordval; i beteckningen relationsdatabas syftar inte "relation" på kopplingen mellan tabeller utan på tabellerna själva (som matematiskt sett är ett slags relationer). Därför undviker jag att kalla kopplingarna för relationer.Sv: Nytta med relationer?
Wikipedia verkar ha samma definition som du. Men som jag mindes det (och det tyckte jag var en bra definition) är varje relation en implementation av en koppling mellan ett objekt A och ett objekt B: "En A har/är del av/går på/innehåller en B". (med fler alternativ än dem förstås).
Då är tabeller en eller många relationer skrivna bredvid varandra. En detalj bara.
Hur som helst är det ju faktiskt en översättningsproblematik, eftersom vi egentligen pratar om "relationships" här ovan, inte samma sak som "relations", men oturligt nog översätts båda till "relationer" i svenskan. Då tycker nog jag att eftersom det är rätt meningslöst att ha två ord för samma sak; "tabell" och "relation", så kan man slopa "relation" som namn på tabeller, och hänsyfta till "relationship" istället.