Gå til innhold

Anbefalte innlegg

Hei,

 

Eg holder på med eit system der ein bruker skal kunne registrere seg. Under registreringa får han ein god del valg som for eksempel kortid han kan vere online og kvaslags gear han har (det er til eit wow guild) dei forskellige online tidene og gear typene ligger i ein database og er indentifisert av ein id. Denne infoen skal lagrest i ein brukerdatabase. Siden antallet av ider på gear og online time kan endre fra person til person og så endrest av administratorer så er ikkje løsningen å lage eit felt for kvart av valga i bruker databasen. Så det eg tenkte å gjøre var legge til eit felt der eg lagra idene komma separert. For eks:

user_online TEXT => 1,4,7,19,3,

 

Er dette ei god løsning?

 

Det einaste problemet eg kan se er når eg skal liste brukerane etter på så må eg vel først trekke ut alle brukerene for å så splitte opp listene og hente ut infoen for kver av idene. Og dette virker litt tungvint.

 

Tar i mot alle forslag med takk :)

 

(Dette var kanskje litt dorlig forklart men eg håper dere forstår det ;) )

 

Runar

Lenke til kommentar
Videoannonse
Annonse

Ser ut til at eg ikkje klarte og forklare det godt nok, så eg prøver igjen.

 

La oss si at eg har ein tabell som heiter så mye som 'users'. I 'users' er det tre felt. user_id, user_name og user_online. user_id er unik for kver bruker og user_name er eit vanlig text felt, mens user_online skal inneholde info om kortid brukere kan vere online.

 

Så har eg ein tabell til 'onlinetimes' og i denne tabellen har eg to felt online_id og online_text. online_id er unik mens online_Text er teksten som skal vises. F.eks: "Mandag 17-18" eller "Tirsdag 14-19".

 

Dei forskellige radene i 'onlinetimes' blir vist fram til brukeren ved hjelp av ei gruppe med checkboxer. Brukeren kan velge ein eller fleire av alternativene. Det er lurer på er korleis eg bør lagre idene for kortid bruken kan vere online i bruker databasen.

 

Det eg har tenkt på sjøl er å lagre det i eit tekst felt kommareparert. F.eks: "1,5,20,50" men dette virker som en dorlig løsning siden det vil by på problemer senere når det kommer til sortering (eller tar eg feil der?)

Er det noen som har noen innspill på om dette er ein god måte å gjøre det på, evntuelt noen som har ein anna løsning ved bruk av ein anna datatype eller lignende?

 

Runar

Lenke til kommentar
  • 2 uker senere...

Her er ett forslag (trenger sikkert litt justering):

 

CREATE TABLE user (
 user_name     VARCHAR(20) NOT NULL,
 password        VARCHAR(30) NOT NULL,
 firstname        VARCHAR(20) NOT NULL,
 middlename    VARCHAR(20),
 surname         VARCHAR(30) NOT NULL,
 last_updated   TIMESTAMP NOT NULL,
 --
 CONSTRAINT USER_PK PRIMARY KEY (user_name)
);

CREATE TABLE day (
 day_id           INT(1) AUTO_INCREMENT,
 day_name     VARCHAR(10) NOT NULL,
 --
 CONSTRAINT DAY_PK PRIMARY KEY (day_id)
);

CREATE TABLE user_restriction (
 user_name     VARCHAR(20) NOT NULL,
 day_id            INT(1) NOT NULL,
 start_time       TIME NOT NULL,
 end_time        TIME NOT NULL,
 --
 CONSTRAINT USER_RESTRICTION_PK PRIMARY KEY (user_name,day_id),
 CONSTRAINT USER_RESTRICTION_FK_TO_USER FOREIGN KEY (user_id)
 REFERENCES user(user_id),
 CONSTRAINT USER_RESTRICTION_FK_TO_DAY FOREIGN KEY (day_id)
 REFERENCES day(day_id)
);

 

Tenkte at det kanskje kunne lønne seg å ha user_name som PK siden user_name må være unik (da tar du to fluer i en smekk ved å ikke bruker user_id, slipper å måtte kjøre et ekstra søk gjennom databasen for å sjekke at ingen har samme brukernavn).

I tillegg satte jeg opp en tabell over ukedagene som jeg kalte DAY.

USER_RESTRICTION er det samme som din ONLINETIMES, her satte jeg opp en composite PK (av user_name og day_id) for å unngå at f.eks. en bruker kan ha flere "restrictions" på den samme dagen.

 

Uannsett, kun ett forslag som sikkert kan endres litt. :o)

 

Lykke til.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...