Databasupplägg dynamiska attribut

Permalänk

Databasupplägg dynamiska attribut

Tjena igen...

Ska bygga en hemsida där användarhantering ingår. Då vill jag bygga det med dynamiska attribut. Dvs de värden en användare måste fylla i är inte hårdkodat utan kan ändras. Hur bör databas uppllägget se ut? Jag har tänkt mig en tabell med användare med id UserID och en tabell med attribut med id AttributeID. Sen när ett värde läggs till hamnar det i en tabell med AttributeID, UserID och Value..

Vad sägs om det? kan tillägga att jag kommer bygga i C#.Net

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

Prova något nytt och testa en dokumentbaserad databas, de är gjorda för såna här tillämpningar. Jag jobbar mycket i Lotus Notes/Domino som är en helt dokumentbaserad databas, och det har helt klart sina fördelar. Det går otroligt snabbt att komma igång och hela databasen blir väldigt flexibel.

Jag kan försöka förklara lite kort vad det hela innebär.. Din databas består kort sagt av en klump dokument. Varje dokument kan man säga är en hashmap, en samling nycklar och värden. Svårare än så är det inte. I Lotus Notes t.ex. finns det vissa "nyckelfält" man brukar använda för att kunna ha olika typer av dokument. Då skapar man olika formulär för att skapa desa dokument, och varje dokument får sedan ett fält "Form" som innehåller formulärnamnet av det formulär det är skapat med.

Det finns flera open source-projekt som har egna, fristående implementationer av dokumentdatabaser, bland annat CouchDB som är inspirerat av just Lotus Notes. Så om du känner för att kolla på nåt nytt kan du ju kika på det.

http://couchdb.apache.org/

Permalänk
Citat:

Ursprungligen inskrivet av Wishie
Prova något nytt och testa en dokumentbaserad databas, de är gjorda för såna här tillämpningar. Jag jobbar mycket i Lotus Notes/Domino som är en helt dokumentbaserad databas, och det har helt klart sina fördelar. Det går otroligt snabbt att komma igång och hela databasen blir väldigt flexibel.

Jag kan försöka förklara lite kort vad det hela innebär.. Din databas består kort sagt av en klump dokument. Varje dokument kan man säga är en hashmap, en samling nycklar och värden. Svårare än så är det inte. I Lotus Notes t.ex. finns det vissa "nyckelfält" man brukar använda för att kunna ha olika typer av dokument. Då skapar man olika formulär för att skapa desa dokument, och varje dokument får sedan ett fält "Form" som innehåller formulärnamnet av det formulär det är skapat med.

Det finns flera open source-projekt som har egna, fristående implementationer av dokumentdatabaser, bland annat CouchDB som är inspirerat av just Lotus Notes. Så om du känner för att kolla på nåt nytt kan du ju kika på det.

http://couchdb.apache.org/

Låter ju helt klart intressant! Vore dock trevligt om man kunde köra det i en och samma databas? Tänker köra LinqToSQL av flertalet anledningar(borde nämnt det) vilket kräver mssql

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
Citat:

Ursprungligen inskrivet av KurreKula
Låter ju helt klart intressant! Vore dock trevligt om man kunde köra det i en och samma databas? Tänker köra LinqToSQL av flertalet anledningar(borde nämnt det) vilket kräver mssql

En dokumentbaserad databas kan ses som en förlängning av en relationsdatabas, d.v.s. man kan implementera en sådan som ett lager ovanpå en relationsdatabas. Nu har du inte sagt så mycket om hur dina användadefinierade attribut ska behandlas och presenteras, ej heller omfattningen av det hela. Det är sådant som spelar in när du ska välja om du ska bygga på en vanlig relationsdatabas på det sätt som du beskrivit, eller om du ska abstrahera det hela litet mer och implementera någon form av dokumentbaserad databas.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Hmm! Nu kanske jag är ute och cyklar men visst kan man i C# ställa queries mot en XML-fil? Det borde vara supersmidigt..

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Citat:

Ursprungligen inskrivet av Teknocide
Hmm! Nu kanske jag är ute och cyklar men visst kan man i C# ställa queries mot en XML-fil? Det borde vara supersmidigt..

Jodå, det finns ju Linq To XML

Citat:

Ursprungligen inskrivet av Phod
En dokumentbaserad databas kan ses som en förlängning av en relationsdatabas, d.v.s. man kan implementera en sådan som ett lager ovanpå en relationsdatabas. Nu har du inte sagt så mycket om hur dina användadefinierade attribut ska behandlas och presenteras, ej heller omfattningen av det hela. Det är sådant som spelar in när du ska välja om du ska bygga på en vanlig relationsdatabas på det sätt som du beskrivit, eller om du ska abstrahera det hela litet mer och implementera någon form av dokumentbaserad databas.

Det är ett omfattande projekt. Det kommer att vara massvis med användare och när jag släpper mitt projekt till beställaren vill jag att de ska kunna definiera vilka attribut de vill att en användare ska ha. En dokumentbaserad datebas låter ju smidigt.

Frågan är om det inte är smidigare att använda sig av Xml så som Teknocide nämner?

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
Citat:

Ursprungligen inskrivet av KurreKula
Det är ett omfattande projekt. Det kommer att vara massvis med användare och när jag släpper mitt projekt till beställaren vill jag att de ska kunna definiera vilka attribut de vill att en användare ska ha. En dokumentbaserad datebas låter ju smidigt.

Frågan är om det inte är smidigare att använda sig av Xml så som Teknocide nämner?

Du bör nog tänka över hur användandet av XML påverka ditt projekt performance-mässigt. Minnesanvändning och concurrency är exempel på områden där XML kan innebära en svaghet. Jag vet att många på det här forumet tycker att XML-baserade databaser är förträffliga, men om det är ett omfattande projekt som du säger så kanske de innebär mer problem än de underlättar.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Så här tänker jag:
Om inställningarna av någon orsak behöver ändras "on the fly", möjligen av flera användare samtidigt, så använd en databas. Om kravet däremot är att inställningarna endast ska kunna ändras av administratör eller enskild användare (namnuppgifter exempelvis) så kör med en fil per konto. Detta ger flest möjligheter i underhåll då admin kan göra ändringar direkt mot filen eller med ett [3:e parts] verktyg, strukturen på disk blir tydlig och användaren får rättigheter enbart mot sin egen fil.

Behövs användargrupper? Det kan fungera med XML också men så fort flera användare ska kunna uppdatera gruppdata samtidigt går flat file-alternativet mer eller mindre bort.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Teknocide
Så här tänker jag:
Om inställningarna av någon orsak behöver ändras "on the fly", möjligen av flera användare samtidigt, så använd en databas. Om kravet däremot är att inställningarna endast ska kunna ändras av administratör eller enskild användare (namnuppgifter exempelvis) så kör med en fil per konto. Detta ger flest möjligheter i underhåll då admin kan göra ändringar direkt mot filen eller med ett [3:e parts] verktyg, strukturen på disk blir tydlig och användaren får rättigheter enbart mot sin egen fil.

Behövs användargrupper? Det kan fungera med XML också men så fort flera användare ska kunna uppdatera gruppdata samtidigt går flat file-alternativet mer eller mindre bort.

Exakt! Detta är ett exempel på att XML förhindrar bra concurrency.

Ett annat exempel är om data från fler källor ska aggregeras. Då kan man få mycket I/O och högre minnesanvändning.

Nackdelarna med databasvägen, speciellt om du använder en dokumentbaserad modell, är att det kan bli mer och mer invecklat initialt arbete.

Så för att kunna göra en avvägning av vilken metod som lämpar sig bäst måste man alltså känna till flera parametrar.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Citat:

Ursprungligen inskrivet av Teknocide
Så här tänker jag:
Om inställningarna av någon orsak behöver ändras "on the fly", möjligen av flera användare samtidigt, så använd en databas. Om kravet däremot är att inställningarna endast ska kunna ändras av administratör eller enskild användare (namnuppgifter exempelvis) så kör med en fil per konto. Detta ger flest möjligheter i underhåll då admin kan göra ändringar direkt mot filen eller med ett [3:e parts] verktyg, strukturen på disk blir tydlig och användaren får rättigheter enbart mot sin egen fil.

Behövs användargrupper? Det kan fungera med XML också men så fort flera användare ska kunna uppdatera gruppdata samtidigt går flat file-alternativet mer eller mindre bort.

Citat:

Ursprungligen inskrivet av Phod
Exakt! Detta är ett exempel på att XML förhindrar bra concurrency.

Ett annat exempel är om data från fler källor ska aggregeras. Då kan man få mycket I/O och högre minnesanvändning.

Nackdelarna med databasvägen, speciellt om du använder en dokumentbaserad modell, är att det kan bli mer och mer invecklat initialt arbete.

Så för att kunna göra en avvägning av vilken metod som lämpar sig bäst måste man alltså känna till flera parametrar.

Skönt att höra att ni är överrens! Lutar mer och mer att jag kör på XML! Det är enbart admin som ska kunna ändra på vilka attribut som finns och enbart den enskilda användaren ska kunna styra sina egna attribut. Utefter era argument känns det som att det passar med en XML-databas.

Min tanke är att jag har record på de basattribut som inte ska GÅ att ta bort i en relationsdatabas. Det kanske man alltid gör? För att underlätta listningen. I den listan kan jag ha namn, id etc etc.... Finns det någon nackdel med att ha det så?

Om jag vill t.ex. ta fram alla användare som heter "Anders", går det att köra XML då? Förstår att det går rent praktiskt men prestandamässigt känns det lite konstigt... Kommer ju bli lika många diskläsningar som det är användare?

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
Citat:

Ursprungligen inskrivet av KurreKula
<snip>
... Om jag vill t.ex. ta fram alla användare som heter "Anders", går det att köra XML då? Förstår att det går rent praktiskt men prestandamässigt känns det lite konstigt... Kommer ju bli lika många diskläsningar som det är användare?

Precis, här blir det problem. Det finns två scenarion:

Scenario 1: Du har alla användare i en stor XML-fil. Det går relativt snabbt att göra sökningar över användarbasen.
Problem 1: Concurrency. Användarna kan inte längre ändra sina egna uppgifter simultant eftersom alla delar på en enda fil. Admin kan dock utan problem göra ändringar, och med en fillåsmekanism kan man låta andra (moderatorer, enstaka superusers etc.) göra ändringar, bara de inte gör det samtidigt.

Scenario 2: Du har varje enskild användares data i en egen fil. Användare har tillgång till sina egna uppgifter och kan ändra vissa (väldigt enkelt att sätta med, exempelvis, ett restricted="true"-attribut på vissa element.
Problem 2: Hur söka på användare? Ska användare kunna söka på varandra? Då blir det antagligen segt. Man kan läsa in alla användarfiler i ett enda svep och sedan parsa; det blir relativt snabbt men tungrott för servern om användarbasen är stor. Ett annat alternativ är att cacha sökningar på något smart sätt.

Bägge scenariona är struliga.

edit: om det enbart rör sig om namnsökningar så är det en smal sak att skapa katalogstrukturer efter initialer/förnamn/efternamn. Att söka efter directories borde inte alls vara särskilt komplicerat, och begränsar urvalet betydligt.

Om man istället ska kunna hitta något random som alla användare som gillar rosa skor -- då användare ska kunna ha olika data -- blir det krångligare.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Skönt att höra att ni är överrens! Lutar mer och mer att jag kör på XML! Det är enbart admin som ska kunna ändra på vilka attribut som finns och enbart den enskilda användaren ska kunna styra sina egna attribut. Utefter era argument känns det som att det passar med en XML-databas.

Min tanke är att jag har record på de basattribut som inte ska GÅ att ta bort i en relationsdatabas. Det kanske man alltid gör? För att underlätta listningen. I den listan kan jag ha namn, id etc etc.... Finns det någon nackdel med att ha det så?

Om jag vill t.ex. ta fram alla användare som heter "Anders", går det att köra XML då? Förstår att det går rent praktiskt men prestandamässigt känns det lite konstigt... Kommer ju bli lika många diskläsningar som det är användare?

För det första skulle jag inte blanda XML- och relationsdatabaser. Det innebär ju dubbelt arbete. Vad är problemet med att använad XML till att lagra de attribut som får förekomma?

För det andra tycker jag det låter som om en relationsdatabas skulle passa bättre om du vill kunna köra globala sökningar utan att ha en monolitisk XML-fil. Men om du vill söka i en användarlista så lagras väl den i en XML-fil, och är kanske cachad i minnet, och då blir det inte så mycket filläsning.

Vad är det för operationer du vill köra på dina listor med attribut? Om du vill att administratören ska definiera dem och sätta värden så är det väl inte så svårt att implementera ett interface för en relationsdatabas? Eller vill du utföra mer komplicerade operationer?

En sak du måste tänka på om du implementerar en XML-baserad databas är att om flera processer kan uppdatera samma XML-fil samtidigt så måste du låsa de operationerna med en mutex, semafor eller liknande.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Citat:

Ursprungligen inskrivet av Phod
För det första skulle jag inte blanda XML- och relationsdatabaser. Det innebär ju dubbelt arbete. Vad är problemet med att använad XML till att lagra de attribut som får förekomma?

För det andra tycker jag det låter som om en relationsdatabas skulle passa bättre om du vill kunna köra globala sökningar utan att ha en monolitisk XML-fil. Men om du vill söka i en användarlista så lagras väl den i en XML-fil, och är kanske cachad i minnet, och då blir det inte så mycket filläsning.

Vad är det för operationer du vill köra på dina listor med attribut? Om du vill att administratören ska definiera dem och sätta värden så är det väl inte så svårt att implementera ett interface för en relationsdatabas? Eller vill du utföra mer komplicerade operationer?

En sak du måste tänka på om du implementerar en XML-baserad databas är att om flera processer kan uppdatera samma XML-fil samtidigt så måste du låsa de operationerna med en mutex, semafor eller liknande.

Citat:

Ursprungligen inskrivet av Teknocide
Precis, här blir det problem. Det finns två scenarion:

Scenario 1: Du har alla användare i en stor XML-fil. Det går relativt snabbt att göra sökningar över användarbasen.
Problem 1: Concurrency. Användarna kan inte längre ändra sina egna uppgifter simultant eftersom alla delar på en enda fil. Admin kan dock utan problem göra ändringar, och med en fillåsmekanism kan man låta andra (moderatorer, enstaka superusers etc.) göra ändringar, bara de inte gör det samtidigt.

Scenario 2: Du har varje enskild användares data i en egen fil. Användare har tillgång till sina egna uppgifter och kan ändra vissa (väldigt enkelt att sätta med, exempelvis, ett restricted="true"-attribut på vissa element.
Problem 2: Hur söka på användare? Ska användare kunna söka på varandra? Då blir det antagligen segt. Man kan läsa in alla användarfiler i ett enda svep och sedan parsa; det blir relativt snabbt men tungrott för servern om användarbasen är stor. Ett annat alternativ är att cacha sökningar på något smart sätt.

Bägge scenariona är struliga.

edit: om det enbart rör sig om namnsökningar så är det en smal sak att skapa katalogstrukturer efter initialer/förnamn/efternamn. Att söka efter directories borde inte alls vara särskilt komplicerat, och begränsar urvalet betydligt.

Om man istället ska kunna hitta något random som alla användare som gillar rosa skor -- då användare ska kunna ha olika data -- blir det krångligare.

Jo, att låsa med semaphore känns ju rimligt och det klarar jag, så det är inte problemet. Problemet är att det kommer att, med 100% säkerhet, att vara flertalet attribut som ska sökas på samtidigt. T.ex. alla tjejer som gillar rosa skor och har grönt hår.... Det kommer att hända från massvis av olika användare hela tiden...

Det känns inte som xml klarar det här isåfall. Administratörören ska difiniera vilka attribut som finns, men varje enskild användare definierar sitt eget värde. Så det kommer väl att vara en skrivare och flera läsare...

Frågan är om det inte blir jobbigare att använda XML... Alla de saker som ni har nämnt som nackdelar med XML kommer ju att förekomma i projektet, och tusen gånger om.

Det går inte att använda en fil, för precis som du nämner Teknocide kommer det bli concurrency. Som du nämner i exempel två behövs det göra massvis med sökningar. Cachning är ju en idé, men är det inte smartare att cacha relationsdatabasen isåfall?

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

Troligtvis.

För att göra valet enkelt: om du för att nå dina mål skulle behöva bygga ett helt databassystem för att hantera din XML-fil/filer så är det bättre att använda ett redan färdigt system. Jag har en förkärlek för flat-files och deras enkelhet, men det ska ju vara enkelt att implementera lösningen också

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Citat:

Ursprungligen inskrivet av Teknocide
Troligtvis.

För att göra valet enkelt: om du för att nå dina mål skulle behöva bygga ett helt databassystem för att hantera din XML-fil/filer så är det bättre att använda ett redan färdigt system. Jag har en förkärlek för flat-files och deras enkelhet, men det ska ju vara enkelt att implementera lösningen också

I det här fallet tror jag att det faktiskt skulle behövas ett helt databassystem för att kunna söka igenom alla filer korrekt... rent prestandamässigt bör en relationsdatabas vara av intresse...

På användarklassen har jag å en Dictionar<string, object>... hur ska man lösa typeproblemet? Man vill ju att attributet på användaren ska vara DateTime, om det är ett födelsedatum och inte en sträng.. Går det att lösa snyggt eller bör allt sparas som strängar?

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
Citat:

Ursprungligen inskrivet av KurreKula
I det här fallet tror jag att det faktiskt skulle behövas ett helt databassystem för att kunna söka igenom alla filer korrekt... rent prestandamässigt bör en relationsdatabas vara av intresse...

På användarklassen har jag å en Dictionar<string, object>... hur ska man lösa typeproblemet? Man vill ju att attributet på användaren ska vara DateTime, om det är ett födelsedatum och inte en sträng.. Går det att lösa snyggt eller bör allt sparas som strängar?

Menar du att födelsedatumet används som en unik identifierare för en användare, eller vad är det som ligger i strängen?

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Citat:

Ursprungligen inskrivet av Phod
Menar du att födelsedatumet används som en unik identifierare för en användare, eller vad är det som ligger i strängen?

Nä, det är inte bara en svensk sida så födelsedatum kan inte vara id... Det är ett attribut. Tänk er att admin i slutändan när de får hemsidan tycker att födelsedatum är ett bra attribut för deras användare.. Då måste de ju sparas i databasen som strängar? Samt vara strängar i objektet user... Finns det inget sätt att behandla det som ett Datetime? Iofs kanske man inte tjänar nåt på det:/ vet jag inte typen i förväg lär jag inte utnyttja typspecifika funktioner och properties

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
Citat:

Ursprungligen inskrivet av KurreKula
Nä, det är inte bara en svensk sida så födelsedatum kan inte vara id... Det är ett attribut. Tänk er att admin i slutändan när de får hemsidan tycker att födelsedatum är ett bra attribut för deras användare.. Då måste de ju sparas i databasen som strängar? Samt vara strängar i objektet user... Finns det inget sätt att behandla det som ett Datetime? Iofs kanske man inte tjänar nåt på det:/ vet jag inte typen i förväg lär jag inte utnyttja typspecifika funktioner och properties

Aha, OK, då förstår jag! Du kan väl spara information om vilken datatyp attributet innehåller (om det inte är en sträng) och använda denna till att konveratera datan när du sparar i och hämtar från databasen?

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Citat:

Ursprungligen inskrivet av Phod
Aha, OK, då förstår jag! Du kan väl spara information om vilken datatyp attributet innehåller (om det inte är en sträng) och använda denna till att konveratera datan när du sparar i och hämtar från databasen?

Jo, min tanke med... Men då behöver jag göra antingen en enum eller använda mig av reflektion. Enum känns lite bökigt att skriva och reflektion är ju inte världens snabbaste.. Kanske lika bra att köra allt som strängar kanske? Och använda datatypen som skrivs i databasen (precis som du sa) för när personen ska fylla i. T.ex. om det är ett datum ska en datepicker visas, inte ett fritextfält.. Så någon sorts kontroll måste jag ju såklart ha. Men kanske är onödigt att använda konvertera runt det?

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
Citat:

Ursprungligen inskrivet av KurreKula
Jo, min tanke med... Men då behöver jag göra antingen en enum eller använda mig av reflektion. Enum känns lite bökigt att skriva och reflektion är ju inte världens snabbaste.. Kanske lika bra att köra allt som strängar kanske? Och använda datatypen som skrivs i databasen (precis som du sa) för när personen ska fylla i. T.ex. om det är ett datum ska en datepicker visas, inte ett fritextfält.. Så någon sorts kontroll måste jag ju såklart ha. Men kanske är onödigt att använda konvertera runt det?

Du kan gå två vägar:

1) Att låta databasen vara typagnostisk och köra alla kontroller o.dyl. i C#, d.v.s. lagra allt som strängar. Det här är kanske ett fall där jag inte ser något fel med en sådan lösning, p.g.a. att datan till så stor grad är användardefinierad.

2) Att konvertera allt till de datatyper som stöds av databasen. Ett problem som detta kan innebära är att du kanske vill introducera någon slags egendefinierad datatyp, t.ex. klädstorlek. Då kan du inte dra nytta av de de datatyper som databasen stödjer och har ett fall där all kontroll av datatypen sker i C#.

Utan att veta mer om hur du planerar att bygga ditt system är det svårt att säga vad som är bäst, och jag antar att ditt sätt att konstruera det skiljer sig från det sätt jag skulle använda, så jag säger att du ska välja den metod som passar dig bäst. Var noga med att planera i förväg så går nog allt bra.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Citat:

Ursprungligen inskrivet av Phod
Du kan gå två vägar:

1) Att låta databasen vara typagnostisk och köra alla kontroller o.dyl. i C#, d.v.s. lagra allt som strängar. Det här är kanske ett fall där jag inte ser något fel med en sådan lösning, p.g.a. att datan till så stor grad är användardefinierad.

2) Att konvertera allt till de datatyper som stöds av databasen. Ett problem som detta kan innebära är att du kanske vill introducera någon slags egendefinierad datatyp, t.ex. klädstorlek. Då kan du inte dra nytta av de de datatyper som databasen stödjer och har ett fall där all kontroll av datatypen sker i C#.

Utan att veta mer om hur du planerar att bygga ditt system är det svårt att säga vad som är bäst, och jag antar att ditt sätt att konstruera det skiljer sig från det sätt jag skulle använda, så jag säger att du ska välja den metod som passar dig bäst. Var noga med att planera i förväg så går nog allt bra.

Känns som det blir alt. 1. Dels för att det kan komma egendefinierade datatyper dels för att om jag ska ha rätt sorts datatyp i databasen måste jag ju skapa kolumner on the fly? Känns skumt att hålla på och ändra tabellerna hela tiden. Känns inte optimalt. Man skulle ju kunna ha en tabell per datatyp skapad redan innan man det känns bökigt... Det blir nog alt.1

Vill tacka er alla för hjälpen och en bra diskussion

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

Tänk på att om du sparar all data i databasen som strängar kommer du få problem med databassökningar. Du kan t.ex. inte jämföra om ett datum är större än ett annat då jämförelsen kommer göras på strängar och inte DateTime-objekt.

Permalänk
Citat:

Ursprungligen inskrivet av Garret
Tänk på att om du sparar all data i databasen som strängar kommer du få problem med databassökningar. Du kan t.ex. inte jämföra om ett datum är större än ett annat då jämförelsen kommer göras på strängar och inte DateTime-objekt.

har tänkt på det också! Men hur fan löser man det då?:S Om man nu inte vill spara det som strängar?

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

Som vi gjorde på jobbet var att skapa en kolumn per datatyp, som tur var så hade vi endast ett fåtal datatyper som vi tillät. Det är inte en vacker lösning men det var den enklaste...utan att ta för mycket tid i anspråk.

Om du vill lägga in egendefinierade objekt i tabellen så kan du ändå inte styra hur jämförelserna görs av dessa i databasen. T.ex. någon skrev något om klädstorlekar, hur ska databasen veta att S är mindre än M. En strängjämförelse skulle säga att M är mindre än S.

Permalänk
Citat:

Ursprungligen inskrivet av Garret
Som vi gjorde på jobbet var att skapa en kolumn per datatyp, som tur var så hade vi endast ett fåtal datatyper som vi tillät. Det är inte en vacker lösning men det var den enklaste...utan att ta för mycket tid i anspråk.

Om du vill lägga in egendefinierade objekt i tabellen så kan du ändå inte styra hur jämförelserna görs av dessa i databasen. T.ex. någon skrev något om klädstorlekar, hur ska databasen veta att S är mindre än M. En strängjämförelse skulle säga att M är mindre än S.

Tror jag kommer att göra liknande (enbart tillåta vissa datatyper). Behöver troligen bara int, sträng och datum... Är det inte snyggare att ha 3 olika tabeller då? Annars blir det ju en massa tomma kolumner

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

Det är en smaksak. Tre tabeller för samma sorts data men olika datatyp eller tre kolumner i samma tabell? Vilket sätt vill du "smutsa ner" din databas på?

Permalänk
Citat:

Ursprungligen inskrivet av Garret
Det är en smaksak. Tre tabeller för samma sorts data men olika datatyp eller tre kolumner i samma tabell? Vilket sätt vill du "smutsa ner" din databas på?

Haha, jo... Tråkigt att det ska bli smutsigt hur man än gör... eller? Om någon vet något rent sätt så säg gärna till!

Iofs så kanske det är cleanare att använda samma tabell och sen bara köra "SELECT DateValue from Attributes" eller dylikt

edit: är det inte snabbare att ha det upplagt såhär: "Select Value from DateAttributes" ? Då lär det ju bli färre rader i varje tabell vilket ger snabbare sökningar(?)

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
Citat:

Ursprungligen inskrivet av KurreKula
är det inte snabbare att ha det upplagt såhär: "Select Value from DateAttributes" ? Då lär det ju bli färre rader i varje tabell vilket ger snabbare sökningar(?)

Hur gör du om du vill inkludera flera värden i en sökning och dessa har olika datatyp?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
edit: är det inte snabbare att ha det upplagt såhär: "Select Value from DateAttributes" ? Då lär det ju bli färre rader i varje tabell vilket ger snabbare sökningar(?)

Förutsatt att du har rätt index lär det ju inte ta så lång tid, och då behöver du inte skriva flera olika frågor beroende på vilken typ av attribut du söker efter.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Citat:

Ursprungligen inskrivet av Phod
Förutsatt att du har rätt index lär det ju inte ta så lång tid, och då behöver du inte skriva flera olika frågor beroende på vilken typ av attribut du söker efter.

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

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