/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Hvorfor er NULL stoerre/langsommere end ""~
Fra : Thomas Damgaard


Dato : 20-11-03 22:06

Hej,

Hvordan kan det være at man bør minimere brugen af NULL-værdier?
(jeg tænker især på MySQL - ved ikke om det er generelt for databaser?)

Mvh
Thomas Damgaard

 
 
Kim Emax (20-11-2003)
Kommentar
Fra : Kim Emax


Dato : 20-11-03 22:32

Thomas Damgaard wrote:

> Hvordan kan det være at man bør minimere brugen af NULL-værdier?
> (jeg tænker især på MySQL - ved ikke om det er generelt for
> databaser?)

øhh, hvor har du det fra? Jeg tænker især på et link til din oplysning

--
Take Care
Kim Emax - master|minds: http://www.masterminds.dk
http://www.emax.dk - http://www.ayianapa.dk
Kob din vin online pa http://www.gmvin.dk,
Danmarks maske mest avancerede VinWebShop



Thomas Damgaard (20-11-2003)
Kommentar
Fra : Thomas Damgaard


Dato : 20-11-03 22:31

Kim Emax wrote:

> Thomas Damgaard wrote:
>
> > Hvordan kan det være at man bør minimere brugen af NULL-værdier?
> > (jeg tænker især på MySQL - ved ikke om det er generelt for
> > databaser?)
>
> øhh, hvor har du det fra? Jeg tænker især på et link til din oplysning
>

Det er fra en bog:
Tror nok det er den her
http://www.ravenholm.fi/tuotteet/11_2_37_5348.htm

(sidder en ikke lige ved den lige nu, men skal nok se efter det i
morgen)

Mvh
Thomas Damgaard

Peter Lykkegaard (20-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 20-11-03 23:54

Thomas Damgaard wrote:

> Det er fra en bog:
> Tror nok det er den her
> http://www.ravenholm.fi/tuotteet/11_2_37_5348.htm
>
> (sidder en ikke lige ved den lige nu, men skal nok se efter det i
> morgen)
>
Ja tak
Jeg sidder lige nu og tanker pa hvor nyttige null vardier faktisk er - og
drilske

- Peter



Thomas Damgaard (21-11-2003)
Kommentar
Fra : Thomas Damgaard


Dato : 21-11-03 08:24

Peter Lykkegaard wrote:
> Thomas Damgaard wrote:
>
>> Det er fra en bog:
>> Tror nok det er den her
>> http://www.ravenholm.fi/tuotteet/11_2_37_5348.htm
>>
>> (sidder en ikke lige ved den lige nu, men skal nok se efter det i
>> morgen)
>>
> Ja tak
> Jeg sidder lige nu og tanker pa hvor nyttige null vardier faktisk er
> - og drilske
>

Kan du forklare lidt om dine tanker?
Jeg mener om hvorfor de er så nyttige?


--
Med venlig hilsen
Thomas Damgaard



Tomas Christiansen (22-11-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 22-11-03 23:14

Peter Lykkegaard skrev:
> Jeg sidder lige nu og tanker pa hvor nyttige null vardier faktisk er - og
> drilske

Min erfaring siger mig at de mindst 9 ud af 10 gange er mere til besvær end
til gavn.
De få steder, hvor man rigtigt har gavn af dem er det til gengæld helt OK.

Jeg forstår bare ikke hvorfor nogle database-leverandører mener at en tom
streng skal erstattes med Null - så går meget af idéen tabt, synes jeg!

-------
Tomas


Peter Lykkegaard (23-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-11-03 00:01

Tomas Christiansen wrote:
> Peter Lykkegaard skrev:
>> Jeg sidder lige nu og tanker pa hvor nyttige null vardier faktisk er
>> - og drilske
>
> Min erfaring siger mig at de mindst 9 ud af 10 gange er mere til
> besvær end til gavn.

Jow, de er da lidt trælse at holde styr på

> De få steder, hvor man rigtigt har gavn af dem er det til gengæld
> helt OK

Få steder?
Min fantasi rækker længere.

Termin
Leveringsdato
standard antal til levering
Dato for Brullyp
Ekstra adresse felter
Titel
Stilling

Der er sgisme en del muligheder
Specielt ved dato og tal er Null uundværlig

Bildatabase
Hvordan repræsenteres en farve på bilen, hvis den ikke er kendt?
Vha af en ekstra attribut "ukendt farve" - vha teksten "ukendt" i stedet for
den aktuelle farve
Nahh, jeg vil foretrække Null og angive til brugeren at farven er ukendt

> Jeg forstår bare ikke hvorfor nogle database-leverandører mener at en
> tom streng skal erstattes med Null - så går meget af idéen tabt,
> synes jeg!
>
Joeeh, men Null betyder jo at der ikke endnu er taget stilling til indholder
En tom streng betyder at man netop har taget stilling til indholdet

I øvrigt er det frivilligt hvad man vil bruge i sin implementering i de
rdbms jeg kender til

- Peter



Troels Arvin (23-11-2003)
Kommentar
Fra : Troels Arvin


Dato : 23-11-03 11:16

On Sun, 23 Nov 2003 00:01:14 +0100, Peter Lykkegaard wrote:
> Termin
> Leveringsdato
> standard antal til levering
> Dato for Brullyp
> Ekstra adresse felter
> Titel
> Stilling

Disse oplysninger kunne principielt lægges i separate tabeller. Særligt
"ekstra adressefelter" lægger op til det: Hvis man lægger sekundære
adresser i en ekstern tabel, kan man tilknytte lige så mange
ekstraadresser som der måtte være behov for.

> Specielt ved dato og tal er Null uundværlig

Uundværlig er et stærkt ord, men jeg er enig i, at nogle situationer
lettes betydeligt ved at have NULL.

> Hvordan repræsenteres en farve på bilen, hvis den ikke er kendt? Vha
> af en ekstra attribut "ukendt farve" - vha teksten "ukendt" i stedet for
> den aktuelle farve

Igen kunne man i teorien lade bilfarve ligge i en separat tabel, men her
er et eksempel på en situation, hvor tingene bliver betydeligt lettere at
have med at gøre, hvis man har NULL. Og som du skriver, gør NULL, at man
slipper for diverse selvopfundne regler involverende "magiske værdier"
såsom at "ukendt" ikke skal opfattes som en egentlig værdi.

>> Jeg forstår bare ikke hvorfor nogle database-leverandører mener at en
>> tom streng skal erstattes med Null - så går meget af idéen tabt,
>> synes jeg!
>>
> Joeeh, men Null betyder jo at der ikke endnu er taget stilling til
> indholder En tom streng betyder at man netop har taget stilling til
> indholdet

(Så er du vel også enig med Tomas?)

--
Greetings from Troels Arvin, Copenhagen, Denmark


Peter Lykkegaard (23-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-11-03 11:37

Troels Arvin wrote:
>
> Disse oplysninger kunne principielt lægges i separate tabeller.
> Særligt "ekstra adressefelter" lægger op til det: Hvis man lægger
> sekundære adresser i en ekstern tabel, kan man tilknytte lige så mange
> ekstraadresser som der måtte være behov for.
>
Ohh, jeg tænkte ikke på fakturaadresse/leveringsadresse
Men mere fx CO, ekstra linjer til gadenavn, postbox etc

- Peter



Peter Lykkegaard (23-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-11-03 12:17

Troels Arvin wrote:
> On Sun, 23 Nov 2003 00:01:14 +0100, Peter Lykkegaard wrote:
>> Termin
>> Leveringsdato
>> standard antal til levering
>> Dato for Brullyp
>> Ekstra adresse felter
>> Titel
>> Stilling
>
> Disse oplysninger kunne principielt lægges i separate tabeller.

Jeg kom til at tænke på en ting
Jow mange ting burde/kunn ligge i ekstra tabeller i den logiske tabel
Der er dog det allestedsnæværende hensyn til performance der gør at den
faktiske implementering afviger fra den logiske model
Views er jo et billede på den fysiske model, og tit skal man lave outer
joins for at få fx lister til at virke tilfredstillende
Ved manglende rækker i fx en titel tabel bliver der jo indsat en Null i
stedet - så hvad har man egentligt vundet?

En til dels uoverskuelig, mindre ydende database, og man slipper ikke for
Null

(lidt firkantet sat op)

>>> Jeg forstår bare ikke hvorfor nogle database-leverandører mener at
>>> en tom streng skal erstattes med Null - så går meget af idéen tabt,
>>> synes jeg!
>>>
>> Joeeh, men Null betyder jo at der ikke endnu er taget stilling til
>> indholder En tom streng betyder at man netop har taget stilling til
>> indholdet
>
> (Så er du vel også enig med Tomas?)

Både og - der er jo forskel på Null og ''

- Peter



Tomas Christiansen (23-11-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 23-11-03 20:55

Peter Lykkegaard skrev:

> >>> Jeg forstår bare ikke hvorfor nogle database-leverandører mener at
> >>> en tom streng skal erstattes med Null - så går meget af idéen tabt,
> >>> synes jeg!
> >>>
> >> Joeeh, men Null betyder jo at der ikke endnu er taget stilling til
> >> indholder En tom streng betyder at man netop har taget stilling til
> >> indholdet
> >
> > (Så er du vel også enig med Tomas?)
>
> Både og - der er jo forskel på Null og ''

Præcis!
Det er derfor at det undrer mig såre at f.eks. Oracle som standard gennem
flere værktøjer opfatter den tomme streng som Null. Resultatet af at
indsætte den tomme streng er at der kommer til at ligge en Null-værdi i
basen. Formålet med dette er mig ganske uforståeligt - det gør at jeg netop
IKKE kan bruge Null - i forbindelse med strenge - til at afgøre om der rent
faktisk er indsat en værdi (som jo _kunne_ ved den tomme streng) eller ej...

-------
Tomas


Peter Lykkegaard (23-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-11-03 21:13

Tomas Christiansen wrote:

> Det er derfor at det undrer mig såre at f.eks. Oracle som standard
> gennem flere værktøjer opfatter den tomme streng som Null. Resultatet
> af at indsætte den tomme streng er at der kommer til at ligge en
> Null-værdi i basen. Formålet med dette er mig ganske uforståeligt -
> det gør at jeg netop IKKE kan bruge Null - i forbindelse med strenge
> - til at afgøre om der rent faktisk er indsat en værdi (som jo
> _kunne_ ved den tomme streng) eller ej...
>
Arghhh, det er jo den omvendte problemstilling
Jeg er mere end almindeligt enig og jeg er endda født kværulant...

Der må da være en option eller andet du har overset?

Man kan bringe MSSQL til at opføre sig på lignende måde
Dvs felter der ikke udfyldes ved indsætning af data bliver automatisk
udfyldt med en tom streng
Ret irriterende når man har udviklet et system der baserer sig på NULL og
den stakkel der har installeret MSSQL alligevel kan kende forskel på Null og
en tom steng...

- Peter



Tomas Christiansen (23-11-2003)
Kommentar
Fra : Tomas Christiansen


Dato : 23-11-03 22:17

Peter Lykkegaard skrev:
> Der må da være en option eller andet du har overset?

Overset og overset. Vi taler om et miljø, som har kørt i årevis, og som der
er udviklet bunker af programmer til.

Tror du lige at jeg har lyst til at pille ved noget så grundlæggende ved
sådan et produktionsmiljø? Advr-bvadr!

-------
Tomas


Peter Lykkegaard (23-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-11-03 22:33

Tomas Christiansen wrote:
> Peter Lykkegaard skrev:
>> Der må da være en option eller andet du har overset?
>
> Overset og overset. Vi taler om et miljø, som har kørt i årevis, og
> som der er udviklet bunker af programmer til.
>
> Tror du lige at jeg har lyst til at pille ved noget så grundlæggende
> ved sådan et produktionsmiljø? Advr-bvadr!
>
Det var mere for interessen og fremtiden

- Peter



Troels Arvin (23-11-2003)
Kommentar
Fra : Troels Arvin


Dato : 23-11-03 22:29

On Sun, 23 Nov 2003 21:12:45 +0100, Peter Lykkegaard wrote:
> Jeg er mere end almindeligt enig og jeg er endda født kværulant...

Og til tider svær at tolke. Har jeg ret i at tolke dit indlæg som at du
blev overrasket over, at Oracle virkelig opfører sig så tosset?

> Der må da være en option eller andet du har overset?

Ikke mig bekendt. Oracle's underlige opfattelse af, at '' og NULL er det
samme er ret enestående i DBMS-verdenen. Jeg har i hvertfald ikke mødt
andre systemer, der opfører sig på den måde:

CREATE TABLE testtab (
label VARCHAR(30) PRIMARY KEY,
a VARCHAR(10),
b VARCHAR(10)
);
INSERT INTO testtab VALUES('both null',NULL,NULL);
INSERT INTO testtab VALUES('a null',NULL,'b not null');
INSERT INTO testtab VALUES('b empty string','a','');
INSERT INTO testtab VALUES('a null, b empty string',NULL,'');
INSERT INTO testtab VALUES('equal non-empty strings','x','x');
INSERT INTO testtab VALUES('non-equal non-empty strings','x','y');

SELECT * FROM testtab WHERE a=b; -- OK

LABEL A B
------------------------------ ---------- ----------
equal non-empty strings x x



SELECT * FROM testtab WHERE a<>b; -- Strange (2)

LABEL A B
------------------------------ ---------- ----------
non-equal non-empty strings x y



SELECT * FROM testtab WHERE b IS NULL; -- Strange (1)

LABEL A B
------------------------------ ---------- ----------
both null
b empty string a
a null, b empty string



SELECT * FROM testtab WHERE b IS NOT NULL; -- Strange (5)

LABEL A B
------------------------------ ---------- ----------
a null b not null
equal non-empty strings x x
non-equal non-empty strings x y



I det ovenstående betyder "-- Strage (x)", at resultatet er enestående i
forhold til PostgreSQL, DB2, MySQL og MSSQL, der alle er enige om, at det
i stedet burde have givet x antal rækker.

Se også http://troels.arvin.dk/db/tests/null-test-20031123a/

--
Greetings from Troels Arvin, Copenhagen, Denmark


Peter Lykkegaard (23-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-11-03 22:41

Troels Arvin wrote:
> On Sun, 23 Nov 2003 21:12:45 +0100, Peter Lykkegaard wrote:
>> Jeg er mere end almindeligt enig og jeg er endda født kværulant...
>>
>
> Og til tider svær at tolke.

Jeg synes at have hørt det før

> Har jeg ret i at tolke dit indlæg som at
> du blev overrasket over, at Oracle virkelig opfører sig så tosset?
>
Jeps det har du ret i

>> Der må da være en option eller andet du har overset?
>
> Ikke mig bekendt. Oracle's underlige opfattelse af, at '' og NULL er
> det samme er ret enestående i DBMS-verdenen. Jeg har i hvertfald ikke
> mødt andre systemer, der opfører sig på den måde:

- faktisk mere overrasket over at det tilsyneladende ikke kan toggles

Nå det gør nu ikke så meget for mig, da jeg er bundet på hænder og fødder
til MSSQL
Men tingene har det med at ændre sig, så det er da rart at vide at Oracle
opfører sig på den måde

Hvad gør man så?
Opfinder en Null value eller tager den manglende Null til efterretning og
handler derefter?
Nok det sidste

Hmm gad vide om det er Oracles udviklingsværktøjer der ikke kan lide Null?
Nahh, det er vist på overdrevet

- Peter



Kristian Damm Jensen (24-11-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 24-11-03 08:32

Troels Arvin wrote:
> On Sun, 23 Nov 2003 21:12:45 +0100, Peter Lykkegaard wrote:
>> Jeg er mere end almindeligt enig og jeg er endda født kværulant...
>>
>
> Og til tider svær at tolke. Har jeg ret i at tolke dit indlæg som at
> du blev overrasket over, at Oracle virkelig opfører sig så tosset?
>
>> Der må da være en option eller andet du har overset?
>
> Ikke mig bekendt. Oracle's underlige opfattelse af, at '' og NULL er
> det samme er ret enestående i DBMS-verdenen.

Sybase gør det samme. Men kun for varchar, ikke for char.

<snip>

--
Kristian Damm Jensen
damm (at) ofir (dot) dk



Thomas Damgaard (21-11-2003)
Kommentar
Fra : Thomas Damgaard


Dato : 21-11-03 08:23

Kim Emax wrote:
> øhh, hvor har du det fra? Jeg tænker især på et link til din
> oplysning

PHP and MySQL Web Development
by Luke Welling, Laura Thomson

Fra denne bog:
http://www.amazon.com/exec/obidos/tg/detail/-/0672317842/002-0795705-8404804?v=glance

Men der står ikke så meget om _hvorfor_ man bør minimere brugen af dem.

--
Med venlig hilsen
Thomas Damgaard



Trine Banke Brennech~ (21-11-2003)
Kommentar
Fra : Trine Banke Brennech~


Dato : 21-11-03 15:41

"Thomas Damgaard" <tdn@sprex.dk> skrev

> Hvordan kan det være at man bør minimere brugen af NULL-værdier?
> (jeg tænker især på MySQL - ved ikke om det er generelt for databaser?)

Det er vel noget isar relationel-model-purister gar ind for - fx. hvis du
har en database over musik, sa er den ene halvdel maske pa CD og den anden
halvdel pa noder. Pa CDerne er man maske interesseret i hvem der spiller
musikken, mens der i noderne selvfolgelig ikke er nogen, der spiller - det
skal du selv gore Men hvis man har samlet al musik i een tabel vil det
give NULL-vardier i "udfort af" ved samtlige noder. Nogle valger at leve med
det, mens puristerne mener, at sa bor man splitte tabellen i 2 tabeller,
hvor det sa kun er CDerne, der har relation til den ny tabel hvori i de
udovende musikere befinder sig. Dermed undgar man en masse NULL-vardier, som
alligevel optager unodig plads, da det er irrelevant med "udfort af", nar vi
taler om noder.

Det er i hvert fald sadan som jeg har forstaet det - sadan skal det vare i
den ideelle databaseverden (relationel). Desuden er der jo ogsa (i hvert
fald med det eksempel jeg har navnt) noget med en normalform, der siger, at
een vardi i en tabel ikke ma vare afhangig af en anden vardi i tabellen,
ligesom NULL altid vil vare kadet sammen med Noder. Og derfor man ikke bor
have fx. Postnummer og By i samme tabel som fx. adresserne - sa skal man
splitte tabellen op, sa man har en tabel med postnummer og by, som sa har en
relation til en tabel med fx. Postnummer, Navn og Adresse.

Men, er det ikke primart sadan, at man ideelt set gerne vil minimere brugen
af NULL-vardier, bade af ovenstaende grund og ogsa fordi de sa at sige
unodvendigt optager plads (omend lidt plads) ? Jeg er ikke super ekspert,
men har da engang last en allerhelvedes tung teoretisk bog om databaser...
(dog ikke Dates bog...)

Mvh
Trine Banke Brenneche



Kristian Damm Jensen (21-11-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 21-11-03 16:54

Trine Banke Brenneche wrote:
> "Thomas Damgaard" <tdn@sprex.dk> skrev
>
>> Hvordan kan det være at man bør minimere brugen af NULL-værdier?
>> (jeg tænker især på MySQL - ved ikke om det er generelt for
>> databaser?)
>
> Det er vel noget isar relationel-model-purister gar ind for - fx.
> hvis du har en database over musik, sa er den ene halvdel maske pa
CD
> og den anden halvdel pa noder. Pa CDerne er man maske interesseret i
> hvem der spiller musikken, mens der i noderne selvfolgelig ikke er
> nogen, der spiller - det skal du selv gore Men hvis man har
> samlet al musik i een tabel vil det give NULL-vardier i "udfort af"
> ved samtlige noder. Nogle valger at leve med det, mens puristerne
> mener, at sa bor man splitte tabellen i 2 tabeller, hvor det sa kun
> er CDerne, der har relation til den ny tabel hvori i de udovende
> musikere befinder sig. Dermed undgar man en masse NULL-vardier, som
> alligevel optager unodig plads, da det er irrelevant med "udfort
af",
> nar vi taler om noder.

"Purister" som du kalder dem, bekymrer sig ikke om pladsforbrug, men
om den logiske sammenhæng i databasen.

NULL er problematisk i den sammenhæng fordi tilstedeværelsen af NULL
(som *ikke* er en værdi, men en tilstand) kan tolkes på mange
forskellige måder:
- data giver ikke mening i sammenhængen (der er ingen udført af, for
noder)
- data er ikke tilgængelige (idioten angav ikke sit telefonnummer, da
han udfyldte formularen)
- data findes ikke (slutdato er ikke kendt endnu)
Listen kan gøres meget længere, jeg mener at Celko et sted nævner en
liste med over 20 forskellige betydninger.

Problemet er (efter min mening) ikke så meget NULL i sig selv. Men
NULL kan være en indikation af, at man kunne gøre et bedre stykke
arbejde med at modellere basen.

> Det er i hvert fald sadan som jeg har forstaet det - sadan skal det
> vare i den ideelle databaseverden (relationel).

Er der i praksis andet en relationelle databaser i vore dage? (Ja, jeg
ved godt, at der foregår en del OO-modellering, men ender det ikke i
en relationsdatabase, når man laver design og implentering?)

> Desuden er der jo
> ogsa (i hvert fald med det eksempel jeg har navnt) noget med en
> normalform, der siger, at een vardi i en tabel ikke ma vare afhangig
> af en anden vardi i tabellen, ligesom NULL altid vil vare kadet
> sammen med Noder.

Nej, det er der ingen regler der siger, tværtimod. Alle værdier vil jo
(oplagt) være afhængige af primærnøglen (som også er en værdi). 3NF
siger, at der ikke må findes funktionelle afhængigheder (dvs. at du
kan identificere en værdi ud fra en anden) uden at den funktionelle
afhængighed indikerer en _mulig_ primærnøgle i tabellen.

> Og derfor man ikke bor have fx. Postnummer og By i
> samme tabel som fx. adresserne - sa skal man splitte tabellen op, sa
> man har en tabel med postnummer og by, som sa har en relation til en
> tabel med fx. Postnummer, Navn og Adresse.
>
> Men, er det ikke primart sadan, at man ideelt set gerne vil minimere
> brugen af NULL-vardier, bade af ovenstaende grund og ogsa fordi de
sa
> at sige unodvendigt optager plads (omend lidt plads) ?

Et NULL vil i mange tilfælde optage lige så meget plads som en værdi
ville gøre. I en tabel med et par millioner poster kan det hurtigt
løbe op.

> Jeg er ikke
> super ekspert, men har da engang last en allerhelvedes tung
teoretisk
> bog om databaser... (dog ikke Dates bog...)

En introduktion til normalisering kan findes på
http://www.gslis.utexas.edu/~l384k11w/normstep.html

Vær opmærksom på, at de skelner mellem 3NF og BCNF, hvilket man ikke
altid gør. BCNF er en anelse mere restriktiv en 3NF (uden at jeg kan
forklare hvordan). Den beskrivelse jeg giver ovenfor er i
virkeligheden BCNF.

I praksis ville jeg aldrig give mig i kast med at normalisere forbi
BCNF.

--
Kristian Damm Jensen
damm (at) ofir (dot) dk



Trine Banke Brennech~ (21-11-2003)
Kommentar
Fra : Trine Banke Brennech~


Dato : 21-11-03 23:23

"Kristian Damm Jensen" <REdammMOVE@ofir.dk> skrev:

> Trine Banke Brenneche wrote:
<snip>
> > Det er vel noget isar relationel-model-purister gar ind for - fx.
> > hvis du har en database over musik, sa er den ene halvdel maske pa
> CD
> > og den anden halvdel pa noder. Pa CDerne er man maske interesseret i
> > hvem der spiller musikken, mens der i noderne selvfolgelig ikke er
> > nogen, der spiller - det skal du selv gore Men hvis man har
> > samlet al musik i een tabel vil det give NULL-vardier i "udfort af"
> > ved samtlige noder. Nogle valger at leve med det, mens puristerne
> > mener, at sa bor man splitte tabellen i 2 tabeller, hvor det sa kun
> > er CDerne, der har relation til den ny tabel hvori i de udovende
> > musikere befinder sig. Dermed undgar man en masse NULL-vardier, som
> > alligevel optager unodig plads, da det er irrelevant med "udfort
> af",
> > nar vi taler om noder.
>
> "Purister" som du kalder dem, bekymrer sig ikke om pladsforbrug, men
> om den logiske sammenhæng i databasen.

Yup, men _samtidig_ sparer det vel plads, når man ikke længere har
NULL-"værdierne", idet man jo ikke har sat en værdi ind i stedet?

<snip>

> Problemet er (efter min mening) ikke så meget NULL i sig selv. Men
> NULL kan være en indikation af, at man kunne gøre et bedre stykke
> arbejde med at modellere basen.

Ja, det er vel også netop det puristerne mener, og i hvert fald det jeg har
_forsøgt_ at forklare med mit musik-eksempel...

<snip>
> > Desuden er der jo
> > ogsa (i hvert fald med det eksempel jeg har navnt) noget med en
> > normalform, der siger, at een vardi i en tabel ikke ma vare afhangig
> > af en anden vardi i tabellen, ligesom NULL altid vil vare kadet
> > sammen med Noder.
>
> Nej, det er der ingen regler der siger, tværtimod. Alle værdier vil jo
> (oplagt) være afhængige af primærnøglen (som også er en værdi). 3NF
> siger, at der ikke må findes funktionelle afhængigheder (dvs. at du
> kan identificere en værdi ud fra en anden) uden at den funktionelle
> afhængighed indikerer en _mulig_ primærnøgle i tabellen.

Jeg giver dig ret i at det måske er et tvivlsomt eksempel med musikken, da
vi ikke kan sige om der der kun vil være NULL ved "udført af" hvis det er
noder, og det kun vil være noder, hvis der er NULL ved "udført af".

Det jeg havde forestillet mig var en tabel med:

> > Men, er det ikke primart sadan, at man ideelt set gerne vil minimere
> > brugen af NULL-vardier, bade af ovenstaende grund og ogsa fordi de
> sa
> > at sige unodvendigt optager plads (omend lidt plads) ?
>
> Et NULL vil i mange tilfælde optage lige så meget plads som en værdi
> ville gøre. I en tabel med et par millioner poster kan det hurtigt
> løbe op.

Min pointe var, at NULL optager unødvendig plads idet NULL kunne udraderes
ved at splitte op i to tabeller. Så er NULL ikke længere NULL, NULL er
heller ikke erstattet af en værdi, den er simpelthen elimineret.

<snip>
> Vær opmærksom på, at de skelner mellem 3NF og BCNF, hvilket man ikke
> altid gør. BCNF er en anelse mere restriktiv en 3NF (uden at jeg kan
> forklare hvordan). Den beskrivelse jeg giver ovenfor er i
> virkeligheden BCNF.

Sådan som jeg har forstået det er BCNF mere restriktiv, fordi man ikke kan
overholde den uden at overholde 2NF og 3NF. Man kan selvf. heller ikke
overholde 3NF uden at overholde 2NF idet det er en del af definitionen på
3NF at den skal overholde 2NF - men i definitionen af BCNF behøver man altså
ikke at skrive at den skal overholde 3NF, for det kommer helt af sig selv:

- 2NF taler om, at alle ikke-nøgleattributter skal være fuldt funktionelt
afhængige af kandidatnøglen. (-nøglerne). BCNF kræver, at alle
determinantfelter skal være kandidatnøgler. Hvis vi har et tilfælde, hvor en
ikke-nøgleattribut er funktionelt afhængig af en del af nøglen, vil denne
del af nøglen jo være en determinant-attribut, som ikke i sig selv er en
kandidatnøgle. Definitionen på BCNF "fanger" altså tilfælde, hvor der ikke
er fuldt funktionel afhængighed af kandidatnøglen.

- 3NF taler om transitive afhængigheder, hvori der jo indgår afhængigheder
mellem attributter, som ikke deltager i nøglen. Eksisterer der en
transitiv-afhængighed i en tabel, eksisterer der altså en
determinant-attribut, som ikke er kandidatnøgle. BCNF "fanger" altså også
dette tilfælde.

Altså kan man være grov at sige, at man kan nøjes med at fokusere på
definitionen på BCNF og blot opfatte de øvrige normalformer, som
"baggrundsmateriale, der kan være med til at forklare, hvad def. på BCNF
egentlig drejer sig om".

> I praksis ville jeg aldrig give mig i kast med at normalisere forbi
> BCNF.

Jeg tror slet ikke jeg ved, hvad 4NF og 5NF går ud på...

Mvh
Trine Banke Brenneche
--
http://www.brenneche.dk/



Nikolaj Hansen (22-11-2003)
Kommentar
Fra : Nikolaj Hansen


Dato : 22-11-03 03:38



> "Purister" som du kalder dem, bekymrer sig ikke om pladsforbrug, men
> om den logiske sammenhæng i databasen.

Jeg er for så vidt enig med dig. Jeg tror aldrig jeg er blevet kald purist
før


> Er der i praksis andet en relationelle databaser i vore dage? (Ja, jeg
> ved godt, at der foregår en del OO-modellering, men ender det ikke i
> en relationsdatabase, når man laver design og implentering?)

I høj grad! Hierakiske databaser bruges overalt.

Windows registry
JNDI til java
LDAP i det hele taget - Bruges tonsvis af steder.
etc etc.

Fordelene ved hieraktiske databaser er at de normalt er svidende hurtige til
opslag, men dårlige til updates og inserts, hvis man da kan tale om sådanne
begreber i en hierakisk database. Desuden er de, i form af deres struktur,
som skabt til bruger databaser.

Ang. OO databaser er det vel en flydende overgang fra relationelle
databaser? Hvis man ser på en flad oracle tabel som data felterne i en
klasse, så mangler man noget indkapsling, polymorfi og arv. Ja og så et sted
at smide sin kode. Det har længe været muligt at køre en JDK i maven på eks.
oracle uden den dog er blevet helt objektorienteret af det.

Spg. er om EJB bønner (og paralleler fra andre App. platforme) ikke bedst
implementerer det objektorienterede paradigme, og så man nøjes med at se på
en tabel som et persistent storage med høj ydelse herunder. Tit ender man jo
op med en Entity Bean per tabel i sit system.

> I praksis ville jeg aldrig give mig i kast med at normalisere forbi
> BCNF.

Hvis du gør det kan der også opstå andre problemer. Specielt din performance
kan lide under et perfekt normaliseret layout. Derfor er det ofte at man
laver de-normalisering for at få den mængde data igennem, som der er brug
for i en situation.



Peter Lykkegaard (22-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 22-11-03 10:54

Nikolaj Hansen wrote:
>
> Fordelene ved hieraktiske databaser er at de normalt er svidende
> hurtige til opslag, men dårlige til updates og inserts, hvis man da
> kan tale om sådanne begreber i en hierakisk database. Desuden er de,
> i form af deres struktur, som skabt til bruger databaser.
>
Ulempen er så at du skal følge hierakiet
Man kan svjv ikke gå på tværs i de underliggende dele
Det morede jeg mig meget med på en XAL applikation for år tilbage

Heldigvis kørte den på en Oracle database og understøttede derved SQL
Og så kunne jeg lave ting og sager der performede fornuftigt
De samme ting ville tage et par minutter i XAL's native database der er
(var?) hierarkisk opbygget fordi jeg så skulle traverse frem og tilbage i et
anseeligt antal tabeller

- Peter



Nikolaj Hansen (22-11-2003)
Kommentar
Fra : Nikolaj Hansen


Dato : 22-11-03 15:43

> Ulempen er så at du skal følge hierakiet
> Man kan svjv ikke gå på tværs i de underliggende dele
> Det morede jeg mig meget med på en XAL applikation for år tilbage
>
> Heldigvis kørte den på en Oracle database og understøttede derved SQL
> Og så kunne jeg lave ting og sager der performede fornuftigt
> De samme ting ville tage et par minutter i XAL's native database der er
> (var?) hierarkisk opbygget fordi jeg så skulle traverse frem og tilbage i
et
> anseeligt antal tabeller

Du nævner rigtigt en af de store ulemper - man skal have sine "vigtigste"
nøgler så højt oppe i hierakiet for hver "node" for at få noget ordentligt
performance. Ellers skal man til at tæve hele sub træet for hver node
igennem for hver søgning.

Og en restrukturering af en træstruktur kan godt være en slem omgang, så en
anden ulempe er, at når man først har sin struktur på plads - ja så hænger
man mere eller mindre på den for good. Så brug af hierakiske databaser
kræver i den grad planlægning.



henrik@woerskidespam~ (21-11-2003)
Kommentar
Fra : henrik@woerskidespam~


Dato : 21-11-03 21:27


"Thomas Damgaard" <tdn@sprex.dk> skrev i en meddelelse
news:3fbd2e7b$0$95101$edfadb0f@dread11.news.tele.dk...
> Hej,
>
> Hvordan kan det være at man bør minimere brugen af NULL-værdier?
> (jeg tænker især på MySQL - ved ikke om det er generelt for databaser?)
>
> Mvh
> Thomas Damgaard



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste