Avatar billede jonas_h Nybegynder
19. januar 2009 - 22:40 Der er 9 kommentarer

Partial keys i tabel

Jeg har følgende tabeller:
TableEntry(TableEntryID (PK)(guid), Name)
TableEntryVersion(TableEntryID (guid), Version (int), etc)

I sidstnævnte, er der egentligt ikke nogen Primary key da TableEntryID er foreign og Version er en partiel key sammen med TableEntryID.

Håber I forstår problemet :)

Hvordan laver man denne strkutur i MS SQL?
Avatar billede Syska Mester
19. januar 2009 - 23:14 #1
Hvad version af SQL bruger du ?

Og kan ikke lige se problemet ?
Avatar billede arne_v Ekspert
19. januar 2009 - 23:48 #2
Lav en primary key i TableEntryVersion enten en genereret eller en 2 kolonne key
på TableEntryID og Version.
Avatar billede jonas_h Nybegynder
20. januar 2009 - 09:57 #3
Det er lige præcis en 2 kolonne key jeg gerne vil have lavet - men har ikke helt gennemskuet hvordan dette gøres i MS SQL. Bruger SQL Server Studio Express.
Avatar billede arne_v Ekspert
20. januar 2009 - 15:15 #4
I raa SQL er det:

CREATE TABLE xxxx (
  felt1 type1,
  felt2 type2,
  felt3 type3,
  PRIMARY KEY(felt1,felt2)
)

I SQLServer Studio skal du sikkert bare klikke paa primary key symbolet udfor to kolonner.
Avatar billede janus_007 Nybegynder
20. januar 2009 - 20:59 #5
Øhh.. en sammensat nøgle hvor den ene er GUID? Lyder en anelse overdrevent ;)

Husk på du alligevel ikke kan bruge en sammensat primær nøgle som en foreign key i en anden tabel! Så det er faktisk ganske unødigt, medmindre man blot finder det sjovt :)
Avatar billede jonas_h Nybegynder
21. januar 2009 - 09:55 #6
Haha, jeg finder det ekstremt sjovt at lave random primary keys :)

Men problemet er, at den GUID går igen flere gange - blot med forskellige versionsnumre. Derfor er det nødvendigt at begge er keys. Men tror jeg har fundet ud af hvordan det gøres i SQL Studio Express.

Alternativt kan jeg give "TableEntryVersions" en PK "TableEntryVersionID" og derved lade denne ene være en PK? Vil det være en bedre løsning?
Avatar billede torbenkoch Nybegynder
23. januar 2009 - 22:56 #7
Hvis du absolut har et behov for en primary key, så lave dog et felt mere, TablenEntryVersionId (PK)(guid), så slipper du for det bøvl som kombinerede keys afstedkommer senere.
Avatar billede janus_007 Nybegynder
23. januar 2009 - 23:36 #8
Lyder som om dit design er forkert, normaliser til BC!
Avatar billede jonas_h Nybegynder
24. januar 2009 - 12:19 #9
Torben: Det var også den løsning jeg beskrev inden dit svar. Tror jeg bliver vejen frem.

Janus: Det ern oget tid siden jeg havde om BC-normalisering, men er nu ret sikker på at mit design overholder det. Men bruger løsningen som beskrevet med en ny PK - så slipper jeg i hvert fald for bøvl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester