qualitum logo
Enkel ER-modell för Fotboll

PHPportalen Forum Index » Databaser
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Vorm



Medlem i: 478 dagar

Status: Offline



#720288
Inlägg Skrivet: 2012-02-07 03:13      Ämne: Enkel ER-modell för Fotboll Citera

Hej!

Jag tänkte att jag inte skulle störa i den nya studiecirkeltråden. Dock hade jag redan börjat spåna på min ER-modell och vore tacksam för synpunkter på den. Detta är min första.

Tanken är en relativt okomplicerad fotbollsdatabas. Den ska bara innehålla lag och matcher (samt en hel del information om matcherna), ingen information om enskilda spelare. Såhär blev mitt ER-diagram: http://tinypic.com/view.php?pic=ml5xzd&s=5 (Jag har inte skrivit ut allt, se förklaring nedan.)


Jag ser egentligen bara fyra relationer framför mig, där mycket information går att härleda ur dessa:

Relation: Matcher
Kolumner: Nummer (id = Primary key), Datum, Hemmalag, Bortalag, Matchtyp (värden 'allsvenskan', 'svenska cupen', etc.), Resultat, Väder (eventuellt "Temperatur" istället).

Relation: Hemmalag
Kolumner: Matchnummer (ID), Skador (värden 'målvakt', 'lagkapten', etc.), Avstängningar (värden 'målvakt', 'lagkapten' etc.), Form (värden 'svag', 'stark', 'normal'), Ligaplacering inför match (om ligamatch - härleds?)

Relation: Bortalag
Kolumner: Som för Hemmalag.

Relation: Lag
Kolumner: Namn, Gjorda mål, Insläppta mål, Poäng


Behövs egentligen fler relationer? Mycket går väl att härleda ur ovanstående, t.ex:

Säsong (tänkta värden '2011', '2012', '2013') härleds ur matchdatum? Det vill säga att jag kan sortera matcherna säsongsvis genom att välja (SELECT) från datum?

Poäng härleds ur matchresultaten enligt 3 för vinst, 1 för oavgjort, 0 för förlust. Dessa samlas i kolumnen poäng under relationen Lag. Eller behövs ens den kolumnen? Jag kommer väl att behöva ett script (eller dyl.) som räknar ut poäng?

Aktuell ligatabell borde väl kunna skapas av ovanstående? Jag tänker mig typ: "SELECT från matcher där matchtypen är 'allsvenskan' och matchdatum spänner mellan 2011-03-01 till 2011-11-31; sortera på poäng" (som beräknats enligt ovan).

Spelschema för enskilt lag: Vill jag se ett spelschema (bakåt i tiden, databasen innehåller bara färdigspelade matcher) väljer jag först ORDER BY lagnamn och sedan ORDER BY date.


Eller säg såhär. Jag vill hämta fullständig aktuell (innevarande säsong) ligatabell för allsvenskan, med gjorda och insläppta mål på både hemma och bortaplan, sorterad på poäng. Detta borde väl gå att fixa ur ovanstående relationer? Eller hur gör jag med beräkningen av mål? Kommer ett script krävas för detta liksom för poäng?

Tänker jag högt låter det ungefär såhär:
"SELECT från matcher där matchtypen är 'allsvenskan' och matchdatum spänner mellan '2011-03-01' till '2011-11-31';
COUNT gjorda respektive insläppta mål på både hemma- och bortaplan för varje lag under denna tidsperiod;
ORDER by poäng."


Frågor: Tänker jag fel angående att härleda mycket? Räcker dessa relationer, eller behöver jag dela upp det?

Behövs verkligen relationerna Hemmalag och Bortalag - dessa står ju redan skrivna under relationen Matcher och kan alltså härledas därifrån. Å andra sidan behöver jag kanske inte kolumnerna "hemmalag" och "bortalag" under relationen Matcher överhuvudtaget, eftersom dessa kan identifieras med matchnumret om jag har kolumnen "matchnummer (ID)" under relationerna Hemmalag och Bortalag?

Varmt tack!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
chrillemeter



Medlem i: 1461 dagar

Status: Offline



#720297
Inlägg Skrivet: 2012-02-07 15:33      Ämne: Mitt förslag Citera

Så här har jag gjort det hela, http://i40.tinypic.com/f0tgus.png
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
EmilV
Moderator



Medlem i: 3791 dagar
Från: Upplands Väsby
Status: Offline



#720300
Inlägg Skrivet: 2012-02-07 17:28      Ämne: Re: Mitt förslag Citera

chrillemeter skrev:
Så här har jag gjort det hela, http://i40.tinypic.com/f0tgus.png

Ser rätt bra ut! Några förslag:

"Förnamn" och "Efternamn" behöver inte vara härledda attribut. Ofta väljer man att spara de i varsitt fält i databasen och då är det ju inte härlett.

"Lag"-attributet på "Spelare" är också överflödigt eftersom det är automatiskt inneboende i sambandstypen mellan spelare och lag.

Man kan också fundera över om "Match" ska vara en sambandstyp eller en egen entitetstyp.
 

_________________
Tänk!

EmilVikström.se | GeHjärta.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
chrillemeter



Medlem i: 1461 dagar

Status: Offline



#720303
Inlägg Skrivet: 2012-02-07 17:35      Ämne: Re: Mitt förslag Citera

EmilV skrev:
chrillemeter skrev:
Så här har jag gjort det hela, http://i40.tinypic.com/f0tgus.png

Ser rätt bra ut! Några förslag:

"Förnamn" och "Efternamn" behöver inte vara härledda attribut. Ofta väljer man att spara de i varsitt fält i databasen och då är det ju inte härlett.

"Lag"-attributet på "Spelare" är också överflödigt eftersom det är automatiskt inneboende i sambandstypen mellan spelare och lag.

Man kan också fundera över om "Match" ska vara en sambandstyp eller en egen entitetstyp.


1.
Ok, det är nog jag som missfördstod boken lite.

2.
Tänkte bara förtydliga det. Så jag kan ersätta "Spelar i" med "Lag"?

3.
Jag hade ett matchentitet från början, men kom ihåg ur boken att en sambandstyp som har attribut blir en sambandstabell. Men janske tänkte fel där. I början hade jag en match och ett resultat entitet.


Tack för feedbacken. Det uppskattas Smile


EDIT:

Här är ett omarbetat ER-diagram, http://i41.tinypic.com/25s8wg5.jpg
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Vorm



Medlem i: 478 dagar

Status: Offline



#720325
Inlägg Skrivet: 2012-02-08 01:40      Ämne: Citera

Kul att ni svarar i tråden. Mindre kul att jag inte fick svar på några frågor (eller jo, indirekt fick jag väl ett par). Razz

Men det där jag bubblade om vad gäller härledning. Har jag rätt i att Poäng, Spelschema, Aktuell ligatabell o.s.v. blir härledda grejer som kräver script för att ordnas upp? Jag menar, man ska väl inte ha en egen tabell för ett lags spelschema...?

chrille: Du har utvecklat med spelare ser jag. Min modell var mer inriktad på att bara konstatera att laget har en skada, och på vilken typ av nyckelspelare detta är. Om Kalle Svensson varit skadad ger det mig ganska föga om jag vill jämföra detta med andra lags skador, och veta vilken typ av skadade spelare som gör att ett lag eventuellt presterar sämre.

Samtidigt skulle jag i och för sig kunna göra en relation som jag kallar "spelartyp" (jmf Kap 3 om generalisering och specificering, där författarna skapar relationen "Mellanmålsgrupp") och som varje spelare behåller för en säsong, d.v.s. att Svensson är "lagkapten" hela säsongen. Då kan jag skriva upp hans namn på skadelistan och får automatiskt fram att "lagkaptenen" varit skadad.

Det handlar ju om behov. Jag har behov av att göra statistiska undersökningar för att ta reda på vilka faktorer som gör att ett lag presterar sämre. Då räcker inte de kategorier som chrille presenterar, utan jag behöver kunna karakterisera matcherna som "Derbymatcher" eller som "Toppmöten", samtidigt som jag behöver kunna karakterisera spelarna som "Captains" eller "Top scorers".

I övrigt undrar jag om chrille verkligen behöver en tabell för Resultat och en för Match? Hemmaresultat och bortaresultat kan väl stå i samma tabell som lagnamnen? Eller tar det längre tid att söka fram då?

Edit:
EmilV skrev:


"Lag"-attributet på "Spelare" är också överflödigt eftersom det är automatiskt inneboende i sambandstypen mellan spelare och lag.


Nja, helt överflödigt är det väl inte? Chrille menade väl att Lag fungerar som referensattribut i tabellen spelare? Alltså, det måste ju finnas någon referens som placerar spelaren i ett visst lag (förstås). Men du menar alltså att referensattribut inte behöver sättas ut när man sätter ut sambandstyper?

Men bör man inte då ange kardinalitetsförhållandet, i detta fall "1:N" (en spelare kan bara spela i ett lag) för att visa i vilken tabell man ska placera referensen?

Om jag tänker rätt nu så finns det två sätt att ange referens. Antingen genom sambandstyp (och gärna kardinalitet), eller genom att utesluta sambandstypen och placera referensen direkt i rätt relation?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
chrillemeter



Medlem i: 1461 dagar

Status: Offline



#720352
Inlägg Skrivet: 2012-02-08 16:59      Ämne: Citera

Vorm skrev:
Kul att ni svarar i tråden. Mindre kul att jag inte fick svar på några frågor (eller jo, indirekt fick jag väl ett par). Razz

Men det där jag bubblade om vad gäller härledning. Har jag rätt i att Poäng, Spelschema, Aktuell ligatabell o.s.v. blir härledda grejer som kräver script för att ordnas upp? Jag menar, man ska väl inte ha en egen tabell för ett lags spelschema...?

chrille: Du har utvecklat med spelare ser jag. Min modell var mer inriktad på att bara konstatera att laget har en skada, och på vilken typ av nyckelspelare detta är. Om Kalle Svensson varit skadad ger det mig ganska föga om jag vill jämföra detta med andra lags skador, och veta vilken typ av skadade spelare som gör att ett lag eventuellt presterar sämre.

Samtidigt skulle jag i och för sig kunna göra en relation som jag kallar "spelartyp" (jmf Kap 3 om generalisering och specificering, där författarna skapar relationen "Mellanmålsgrupp") och som varje spelare behåller för en säsong, d.v.s. att Svensson är "lagkapten" hela säsongen. Då kan jag skriva upp hans namn på skadelistan och får automatiskt fram att "lagkaptenen" varit skadad.

Det handlar ju om behov. Jag har behov av att göra statistiska undersökningar för att ta reda på vilka faktorer som gör att ett lag presterar sämre. Då räcker inte de kategorier som chrille presenterar, utan jag behöver kunna karakterisera matcherna som "Derbymatcher" eller som "Toppmöten", samtidigt som jag behöver kunna karakterisera spelarna som "Captains" eller "Top scorers".

I övrigt undrar jag om chrille verkligen behöver en tabell för Resultat och en för Match? Hemmaresultat och bortaresultat kan väl stå i samma tabell som lagnamnen? Eller tar det längre tid att söka fram då?

Edit:
EmilV skrev:


"Lag"-attributet på "Spelare" är också överflödigt eftersom det är automatiskt inneboende i sambandstypen mellan spelare och lag.


Nja, helt överflödigt är det väl inte? Chrille menade väl att Lag fungerar som referensattribut i tabellen spelare? Alltså, det måste ju finnas någon referens som placerar spelaren i ett visst lag (förstås). Men du menar alltså att referensattribut inte behöver sättas ut när man sätter ut sambandstyper?

Men bör man inte då ange kardinalitetsförhållandet, i detta fall "1:N" (en spelare kan bara spela i ett lag) för att visa i vilken tabell man ska placera referensen?

Om jag tänker rätt nu så finns det två sätt att ange referens. Antingen genom sambandstyp (och gärna kardinalitet), eller genom att utesluta sambandstypen och placera referensen direkt i rätt relation?



Med Spelare entiteten tänkte jag bara ett steg längre, brukar se en helhet samtidigt som jag skissar på saker. Men om du bara är intresserad av att visa att ett lag har en skada, så behövs inte "Spelare" naturligtvis.

Varför jag har en Resultat entitet är för att jag ser Match entiteten som ett spelschema, och där tycker jag att endast vilka lag som spelar och vilket datum matchen spelas hör hemma. Med en Resultat entitet blir det blir enklare att ta ut statistik om matcherna. Sen blir det mindre NULL värden också.

Ang Lag attributet så är det precis som Vorm beskriver det. Jag ville visa i vilken entitet referensattributet ska placeras i.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
EmilV
Moderator



Medlem i: 3791 dagar
Från: Upplands Väsby
Status: Offline



#720369
Inlägg Skrivet: 2012-02-08 23:52      Ämne: Re: Enkel ER-modell för Fotboll Citera

Observera att varje sambandstyp inte nödvändigtvis behöver bli en egen relation/tabell. "Match" är lämpligen ett 1:N-samband och kan därför bakas ihop i samma tabell som "Resultat". Se kapitel 6 för detta.

ER-modellen ska försöka efterlikna "verkligheten". Det är faktiskt en fördel om du försöker låta bli att tänka på tabeller när du ritar ditt diagram.

Vorm skrev:
Tanken är en relativt okomplicerad fotbollsdatabas. Den ska bara innehålla lag och matcher (samt en hel del information om matcherna), ingen information om enskilda spelare. Såhär blev mitt ER-diagram: http://tinypic.com/view.php?pic=ml5xzd&s=5 (Jag har inte skrivit ut allt, se förklaring nedan.)


Du kan inte dra streck direkt mellan olika entitetstyper. du måste ha en sambandstyp som binder ihop dem. Återigen, sambandstypen blir inte nödvändigtvis en egen tabell/relation.

Vorm skrev:


...

Frågor: Tänker jag fel angående att härleda mycket? Räcker dessa relationer, eller behöver jag dela upp det?

Behövs verkligen relationerna Hemmalag och Bortalag - dessa står ju redan skrivna under relationen Matcher och kan alltså härledas därifrån. Å andra sidan behöver jag kanske inte kolumnerna "hemmalag" och "bortalag" under relationen Matcher överhuvudtaget, eftersom dessa kan identifieras med matchnumret om jag har kolumnen "matchnummer (ID)" under relationerna Hemmalag och Bortalag?

Varmt tack!


Jag tycker det verkar krångligt att ha egna entitetstyper för bortalag/hemmalag. Jag hade precis som chrille haft detta som ett attribut på sambandstypen.

Jag hade faktiskt kostat på mig ett eget attribut för vilken säsong matchen gäller. Det är inte dumt att härleda data om man kan, men det verkar bökigt med just säsong. Kan en säsong spänna över ett årsskifte?

Saknas det inte information om huruvida det är kval, slutspel eller final? Eller är det ointressant?

"Skador" och "Avstängningar" verkar vara flervärda attribut. Sådana ritas med dubbelring, och vid omvandling till tabeller kommer de hamna i en egen tabell. Jag antar att dessa attribut gäller för ett lag i en match - därför bör de ligga på sambandstypen (som du saknar)!

Jag tycker alltså att chrilles ansats är lite bättre än din, även om han råkade ha med mer information än vad du vill ha.
 

_________________
Tänk!

EmilVikström.se | GeHjärta.se
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Vorm



Medlem i: 478 dagar

Status: Offline



#720372
Inlägg Skrivet: 2012-02-09 03:31      Ämne: Re: Enkel ER-modell för Fotboll Citera

Citat:
ER-modellen ska försöka efterlikna "verkligheten". Det är faktiskt en fördel om du försöker låta bli att tänka på tabeller när du ritar ditt diagram.
Du kan inte dra streck direkt mellan olika entitetstyper. du måste ha en sambandstyp som binder ihop dem. Återigen, sambandstypen blir inte nödvändigtvis en egen tabell/relation.


Hmm, jo. Du har rätt i att jag vill tänka i tabeller när jag skissar på diagrammet. Om man helt kopplar bort det känns det kanske mer nödvändigt att skriva ut sambandstyperna. Eller det kanske är nödvändigt ändå, men det känns åtminstone onödigt många gånger. En sambandstyp som "spelar" (mellan lag och match) fyller ju ingen funktion om man tänker i tabeller. Det är så att säga självklart att lagen spelar match och inte tvärtom. Har jag fel?

Citat:
Jag tycker det verkar krångligt att ha egna entitetstyper för bortalag/hemmalag. Jag hade precis som chrille haft detta som ett attribut på sambandstypen.


På sambandstypen? Chrille har väl satt hemma- och bortalag som attribut på entitetstypen Match?
Annars har du nog rätt i att hemma- och bortalag inte borde tilldelas varsin tabell i slutändan. Fast detta var jag i och för sig inne på i mitt resonemang, att mitt påhitt var onödigt vill säga. Fint, men problemet blir att registrera skadorna!

Ett alternativ, om man kör som Chrille, är att skadorna blir en egen entitetstyp. Men då måste dessa också ha datum, eftersom de upphör att gälla. Via datum skulle man sen kunna koppla skadorna till matcherna inom detta datumintervall. Det andra alternativet är att köra entitetstyper för Hemmalag och Bortalag, och lägga skadorna som attribut på dessa. När man kollar statistik över fotboll måste man alltid skilja på hemma- och bortaprestationer, oavsett vad man undersöker. Men detta blir väl automatiskt inbyggt i systemet om man gör som ni säger, men då måste skadorna datummärkas (vilket skapar problem eftersom man måste hålla koll på exakt när en spelare är tillbaka i spel igen = jobbigt om man har x antal länders ligor att hålla reda på - bättre att inte riskera missa detta utan istället bara lägga skador som attribut till varje enskild match)...

Citat:
Jag hade faktiskt kostat på mig ett eget attribut för vilken säsong matchen gäller. Det är inte dumt att härleda data om man kan, men det verkar bökigt med just säsong. Kan en säsong spänna över ett årsskifte?


Det kan du ha rätt i. Problemet blir de internationella matcherna, eftersom alla ligor utom den svenska (och kanske någon till), spelas höst/vår. Ett alternativ till att ange säsong bör dock kunna vara att sätta ett "landattribut" på lagen. Alla lag vars land inte är Sverige skulle då ha en höst/vår säsong. Men det blir väl krångligare. Kanske.

Citat:
Saknas det inte information om huruvida det är kval, slutspel eller final? Eller är det ointressant?


Det gör det egentligen inte. Jag hade tänkt mig värden som typ A1-A30 för allsvenska omgångar på attributet "matchtyp". Är det cupmatch skriver jag SC-1 till och med SC-final (SC = Svenska Cupen). Jag håller med om att mina förslag kan verka korkade. Rent spontant borde det verka friskare att ange omgång som eget attribut, snarare än att bygga ihop matchtyp (allsv. eller sv. cupen) med spelomgång. Dock har jag inga ambitioner att "offentliggöra" min databas. Därför blev modellen säkert skum i flera avseenden.

Citat:
"Skador" och "Avstängningar" verkar vara flervärda attribut. Sådana ritas med dubbelring, och vid omvandling till tabeller kommer de hamna i en egen tabell. Jag antar att dessa attribut gäller för ett lag i en match - därför bör de ligga på sambandstypen (som du saknar)!


Hur menar du flervärda? Om jag enbart skriver "lagkapten" är ju det ett atomärt värde. Vill du däremot ha med för- och efternamn (vilket jag återigen inser kan verka mest rimligt ur din synvinkel), har du självklart rätt. Ska ändå lägga dubbelringen på minnet. Tack!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » Databaser
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic
qualitum logo