16. januar 2002 - 09:55Der er
9 kommentarer og 1 løsning
Relation i MS SQL!
Hej jeg er rimelig ny i MS SQL, og kan derfor ikke finde udaf følgende:
Jeg har i en database to tabeller hvor jeg har en \'hovedtabel\' og en som skal indeholde nogle få dataer fra \'hovedtabellen\'. Jeg vil gerne have det sådan at når man indtaster noget i \'hovedtabellen\' ryger der automatisk nogle af dataerne over i den anden tabel....
Du kunne også vælge at lave et view i stedet, det vil give en bedre performance end triggers (i de fleste tilfælde).
Og du kan i et view opnå præcis det samme, eks. kun vise nogle bestemte poster og/eller felter samt give andre rettigheder til view\'et end den originale tabel.
Jeg anvender en del triggers, men det er altså noget som koster performance og som i værste fald kan få eks. en insert i master tabellen til at fejle. Hvis du eks. indsætter en post i master tabellen, som triggeren indsætter i kopi tabellen og denne insert fejler, så vil den oprindelige insert fejle!
tmceu> Hvordan vil du så håndtere en faktura (ordre) til en kontantkunde (kundenummer specielt til kontantsalg), hvor kunden ønsker navn osv. på fakturaen (ordren). Kundeoplysninger skal så ligge i hver deres tabel, men informationerne mellem kunde og ordre på samme kundenr er dermed forskellige.
Som jeg tolker det, så er det ønsket (eller noget lignende)
Jeg forstår ikke helt formuleringen af dit eksempel - hvordan bliver de pludseligt forskellige ?
Som jeg opfatter spørgsmålet, drejer dette sig om en tabel hvor udvalgte data skal \"replikeres\" til en anden tabel.
Men du har naturligvis ret i at det ikke lyder sandsynligt at dette er den eneste tabel i databasen/systemet. Jeg kan dog ikke se at det gør den store forskel i det ene eller det andet forslag.
Du kan selvfølgelig godt vælge at lave en trigger som aut. opdaterer alle relaterede poster i øvrige tabeller også. Men jeg vil foretrække at haveet view pr. tabel, primært gr. sikkerhed men også gr. performance.
I en kundetabel er der en kunde til kontantsalg. Den har et kundenummer.
I ordretabellen oprettes ordrer, hvor der også skal bruges kundeoplysninger, og derfor haves et kundenummer i ordretabellen.
Hvis du laver et kontantsalg, hvor kunden ønsker at have navn osv. på faktura, skal disse oplysninger ind. Du bruger kundenummer til kontantsalg og indtaster øvrige oplysninger. Disse oplysninger findes ikke i kundetabellen på det kundenummer, men findes i ordretabellen på den ordre med det kundenummer.
Det kan du kun, hvis du har navnefelterne i begge tabeller.
Så faldt 10 øren (hmm, den findes jo ikke mere :-)
Du har ret i det eksempel at du kan være nødt til at bryde med normaliseringsreglerne, men jeg kan altså stadig ikke se hvordan dette spørgsmål leder dig hen til dit meget specielle eksempel.
Dels kan jeg kun se ud af spørgsmålet at det drejer sig om en hovedtabel og en \"kopi af udvalgte data tabel\". Derudover vil jeg påstå at med mindre du står i en forretning nede på strøget, vil din model med kontantkunden ikke være relevant. I langt størstedelen af øvrige virksomheder der sælger, vil man oprette en kunde som normalt i kundetabellen, også selv om denne kunde aldrig køber noget mere end den ene gang.
Men uanset hvad, så kan jeg altså ikke se hvad forskel det gør om man vælger den ene eller anden model i.f.t. det konkrete spørgsmål. Men lad os se hvad der sker, måske har du ret :-)
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.