Databasupplägg dynamiska attribut

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Kan du definiera rätt index? Databaser är inte min grej riktigt men försöker lära mig

Du bör sätta index på de kolumner som du ämnar göra dina sökningar på.

Permalänk
Citat:

Ursprungligen inskrivet av Garret
Du bör sätta index på de kolumner som du ämnar göra dina sökningar på.

Det var ju inte så svårt

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

En lösning till flera tabeller vs flera kolumner är ju att du har en kolumn där du lagrar "rå" data. Det må vara datum som timestamps (epoch) eller tal som strängar o.s.v, och sedan abstraherar du "bort" (det försvinner ju aldrig riktigt helt även om du har ett mellanlager) problemet genom en klass där du alltid omvandlar till/från rätt datatyp med hjälp av metoder såsom SetDateValue(), GetDateValue() osv.

Permalänk
Citat:

Ursprungligen inskrivet av Wishie
En lösning till flera tabeller vs flera kolumner är ju att du har en kolumn där du lagrar "rå" data. Det må vara datum som timestamps (epoch) eller tal som strängar o.s.v, och sedan abstraherar du "bort" (det försvinner ju aldrig riktigt helt även om du har ett mellanlager) problemet genom en klass där du alltid omvandlar till/från rätt datatyp med hjälp av metoder såsom SetDateValue(), GetDateValue() osv.

Hmm... Hur är prestandan om man jämför? Blir det inte mer overhead att använda c# för sånt? Annars är det ju helt klart ett alternativ...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Jag ser inte prestandan som någon nackdel mot för vad du tjänar: ett konsekvent beteende. Det finns en tabell och en kolumn för ditt data, varken mer eller mindre.

En annan möjlig approach är att du gör på ett liknande sätt, men istället för att ha flera SetXXXValue() så har du flera överladdade: SetValue(String), SetValue(Integer), SetValue(Date) osv osv. Sedan i din kolumn så använder du det första tecknet som styrtecken, och när du kör GetValue() så kollar den på styrtecknet och parsar det till rätt datatyp.

Exempel:

SetValue(String): s:<data>
SetValue(Integer): i:<data>
SetValue(Date): d:<data>

Nu är jag inte så klar på hur hårt typat C# är, men detta kanske kan vara en sämre approach med tanke på att när du anropar GetValue() så vet du inte vad den returnerar och måste kanske därför själv typecasta till rätt datatyp.

Permalänk
Medlem

Problemet kvarstår dock om man vill sortera den data som finns i databasen. Vill man t.ex. sortera på ålder så vill man helst göra det genom att jämföra heltal och inte strängar. I vissa fall kommer detta orsaka problem och att läsa in allt i koden och sortara där känns som onödigt ont. Men självklart är det en smaksak hur man vill lösa detta.

Permalänk
Citat:

Ursprungligen inskrivet av Wishie
Jag ser inte prestandan som någon nackdel mot för vad du tjänar: ett konsekvent beteende. Det finns en tabell och en kolumn för ditt data, varken mer eller mindre.

En annan möjlig approach är att du gör på ett liknande sätt, men istället för att ha flera SetXXXValue() så har du flera överladdade: SetValue(String), SetValue(Integer), SetValue(Date) osv osv. Sedan i din kolumn så använder du det första tecknet som styrtecken, och när du kör GetValue() så kollar den på styrtecknet och parsar det till rätt datatyp.

Exempel:

SetValue(String): s:<data>
SetValue(Integer): i:<data>
SetValue(Date): d:<data>

Nu är jag inte så klar på hur hårt typat C# är, men detta kanske kan vara en sämre approach med tanke på att när du anropar GetValue() så vet du inte vad den returnerar och måste kanske därför själv typecasta till rätt datatyp.

Hade ju varit kul att kunna overloada men tyvärr stödjer inte c# som funktioner som enbart skiljer sig i returnvärde, kompilerar inte ens då...
Men SetValue kan ju vara overloadad, det funkar... Skulle iofs vara lätt att sortera även med sorteringen i c# ifall man kör LinqToSql... Skulle kunn köra följande

return from user in DB.Users orderby int.Parse(user.Values["age"]) select user;

Då values är en dictionary med <string, object>

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase