Open jesjos opened 12 years ago
Jag förstår egentligen inte vad fördelarna är med id vs nummer enligt databasfolket. Någon kanske vill elaborera på det?
Däremot är jag rätt säker på att i samtliga fall så är både labbar och labgrupper alltid kopplade till en kurs. Så visst kan vi alltid köra med nummer om vi vill det iaf?
Jag körde lite naiva benchmarks:
Benchmark.measure {GivenCourse.find(11).labs.where(number: 1)}
Benchmark.measure {Lab.find(1)}
Båda querys ger samma labb. Körde båda querys 100 gånger och tog sedan medelvärde på det. Det skiljer 1 ms i medelvärdet – id är "bättre".
Enda anledningen att köra id är väl att det är konvention, antar jag.
@Tarrasch Vi använder relativa nummer för att användaren ska få enklare och mer lättlästa labb- och grupprelaterade url:er. Tänkt dig själv en url som denna. http://water.com/courses/tda123/groups/1/labs/4
vs http://water.com/courses/tda123/groups/122432/labs/1231234
. En databasmupp skulle även argumentera för att groups#id
är redundant. En grupp kan unikt identifies m.h.a given_courses#id
och groups#number
, på samma sätt som att en LabHasGroup
kan tas fram m.h.a labs#number
och groups#number
.
@jesjos Ang benchmarken. Var inte de ganska givet? Jag menar, den ena raden kör en query, den andra två. En annan, möjligen mer korrekt AR-lösning vore GivenCourse.includes(:labs).where("labs.number = ?", 1).find(11).labs
. Den är dock garanterat långsammare än Lab.find(123)
– något du aldrig kommer i från. Rekommenderat är f.ö att sätta ut lite index innan dessa tester görs – annars har föregående query inte en chans.
Sedan så kan jag inte riktigt se när vi vill visa en labb löst utan en kurs.
@oleander Jag körde testerna på kul, inte för att bevisa något.
@oleander Det låter vettigt det du säger.
I vilket fall, jag lutar åt att köra nummer genomgående. Förresten, vad händer om en examinator skapar labbar i fel ordning? Kommer "första labben" ha nummer 2
medans "andra labben" ha nummer 1
? Vad tycker @water?
@Tarrasch Skapas labb ett efter labb två så kommer labb två att få number = 1
.
En inställningspanel där möjligheten finns att ändra detta vore bra.
+1 på föregående talare. Vi bör fundera ut ett sätt att ändra labbnummer. Dock farligt om någon påbörjat arbetet...
I princip har vi ju sagt att vi alltid vill referera till labbar och grupper med deras relativa nummer.
En grej som jag tänkte på dock:
Kan det finnas situationer då vi tar fram labbar eller grupper utan att de är scopeade under en kurs? I den situationen finns inga relativa nummer och approachen pajar.
Om vi inte hittar några undantag eller tycker att undantagen är för få för att vi ska orka bry så blir det väl skäl att köra en liten sprint där vi ser till att skriva om controllers så att dom gör "rätt".