Avatar billede dpp83 Nybegynder
23. august 2005 - 14:08 Der er 18 kommentarer og
1 løsning

2. eller 3. normalform? (Performance)

Hej derude.

Jeg sidder med et spørgsmål ang. en databases performance kontra hvilken form jeg skal normalisere til.

Min database (2.NF):

tblUser
-----------------------------------------------------------
UserID(PK)|F_Name|L_Name|Phone|Profile|Pass_Name|Pass_Code|
-----------------------------------------------------------

tblFirm
---------------------------------------------------------------------------------
FirmID(PK)|Name|Adresse|City|ZipCode|County|Country|Contact|Phone|Mail|FirmStatus
---------------------------------------------------------------------------------

tblActiveJob
----------------------------------------------------
JobID(PK)|FirmID(FK)|UserID|Description|Date|Status|
----------------------------------------------------

tblClosedJob
--------------------------------------------------
CJobID(PK)|CUserID(FK)|CFirmID|CDescription|CDate|
--------------------------------------------------

Nå man skal normalisere til 3.NF er der jo problemet med transitiv afhængighed, og det er der en del af i min tblFirm. Mit spørgsmål er derfor om det kan betale sig for mig ift opdatering af databasen at dele tblFirm op i de 6 tabeller der er mulighed for, for at opfylde 3.NF, eller om jeg skal lade den være på 2.NF.

PFT.

David
Avatar billede arne_v Ekspert
23. august 2005 - 14:46 #1
er der andre end ZipCode - City ?

og ja - den synes jeg at du skal splitte op

det bør ikke påvirke performance væsentligt

og du kan få postnumme rlisten fra PostDanmark
Avatar billede dpp83 Nybegynder
23. august 2005 - 14:54 #2
Ja, som jeg ser det er der ZipCode-City, County-Country, Phone-Country, City-Country og ZipCode - County, eller er det mig der er galt på den?

Det jeg sidder og arbejder med er at denne DB skal tilgås via et web-interface(web service) fra en/flere PDA'er.
Avatar billede dpp83 Nybegynder
23. august 2005 - 14:55 #3
Den data der skal lagres er forresten ikke kun for danske firmaer..
Avatar billede teepee Nybegynder
23. august 2005 - 14:57 #4
Tjah normalt gør man det jo, men du må selv vurdere hvor meget det vil blive brugt. Flade strukturer er ikke nødvendigvis dårlige. Du kan dog få lidt problemer med historik ved adressekskift osv. hvis ikke du splitter op. Hvorfor har du en activeJob og en closedJob når du allerede har et statusfelt på activeJob? Det er måske overkill med mindre at performance i praksis viser sig at være for dårlig i activeJob.
Avatar billede erikjacobsen Ekspert
23. august 2005 - 15:04 #5
Når databasen skal dække over flere lande (alle lande?), så har du jo ikke en reel chance for at få en komplet liste over zipkoder/postnumre, og skal zipcode->city tabellen opdateres ved kundernes indtastning får du slå- og stavefejl med. Og så mener jeg også at man fx i Tanzania ikke har (eller i praksis bruger) zipcodes.

Så jeg ville sige nej - selv om teorien siger ja.
Avatar billede dpp83 Nybegynder
23. august 2005 - 15:06 #6
Ideen er at jeg i ClosedJob kopiere data fra de ActiveJob's der er udført, for derved at slette disse fra ActiveJob. Grunden til at jeg gemmer dem i ClosedJob er at det skal være muligt at "åbne" lukkede opgaver igen. Derudover skal det være muligt at trække statistik.
Avatar billede dpp83 Nybegynder
23. august 2005 - 15:13 #7
Erik: Jeg m indrømme at jeg ikke har den store erfaring ud i webservices, for slet ikke at tale om PDA'er og WS's sammen, men mit scenarie er at hvis jeg bryder tabellen tblFirm op, vil jeg ligeledes skulle lave væsentlig flere kald for at få den information jeg skal bruge, og hvis dette skal gøres af fx. 50-100 PDA'er samtidig, ville det resultere i lange svartider.
Avatar billede erikjacobsen Ekspert
23. august 2005 - 15:16 #8
Hvis den er splittet op, vil du typisk samle det igen men en eller flere joins på sql-serveren. Det giver samme antal kald.
Avatar billede dpp83 Nybegynder
23. august 2005 - 15:19 #9
Siger du derved at jeg kun burde normalisere videre hvis jeg vil have en "pæn" database?
Det skal måske lige siges at jeg til enhver tid vil vægte performance frem for videre normalisering i og med at det miljø jeg arbejder i er en smule ukendt.
Avatar billede arne_v Ekspert
23. august 2005 - 15:22 #10
så vidt jeg ved er der ikke noget som udelukker at 2 countries kan have et county
med samme navn, ditto med alle de andre bortset fra zipcode-city (forudsat at
zipcode indeholder country code altså DK-6000)
Avatar billede arne_v Ekspert
23. august 2005 - 15:24 #11
en forholdsvis lille ret statisk tabel som zipcode-city burde ikke påvirke
performance nævneværdigt
Avatar billede arne_v Ekspert
23. august 2005 - 15:27 #12
hm - hvis man prefixer med country så skal country med over i tabellen
Avatar billede dpp83 Nybegynder
23. august 2005 - 15:31 #13
Arne_V: I teorien har du selvfølgelig ret, men uanset hvad vil det forekomme ufatteligt sjældent at fx. 2 countrys har et county med samme navn, og på den måde vil der være transitiv afhængighed. Derudover er Phone - country vel transitiv afhængig hvis du skal have landekode med.
Avatar billede erikjacobsen Ekspert
23. august 2005 - 15:31 #14
" Siger du derved at jeg kun burde normalisere videre hvis jeg vil have en "pæn" database? "

Nej, jeg siger du kun skal normalisere videre hvis du har strukturerede data, og zipcode->by kan være struktureret hvis du kun har byer i Danmark, men ikke hvis du skal medtage Tanzania og Tonga-tongaøerne.
Avatar billede erikjacobsen Ekspert
23. august 2005 - 15:32 #15
" ...forekomme ufatteligt sjældent " - men derfor netop vil det kunne forekomme!
Avatar billede arne_v Ekspert
23. august 2005 - 15:33 #16
sjældent != afhængighed

hvis der er landekode med så af hænger country af phone
Avatar billede dpp83 Nybegynder
23. august 2005 - 17:04 #17
Jamen jeg takker for svarene, og kommer nok til den konklusion at jeg lader det være ved 2.NF lige nu.

Jeg ved ikke hvem af jer der skal tildeles point, men i kan jo begge smide et svar og få halvdelen hver.
Avatar billede arne_v Ekspert
23. august 2005 - 18:06 #18
ok
Avatar billede erikjacobsen Ekspert
23. august 2005 - 21:02 #19
Ingen point til mig, tak.
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