Toon posts:

[databases] Waarom NULL + NULL perikelen *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Wat is het nut van null waardes in een database? ik vind het allemaal maar irritant

ik gebruik mssql samen met asp en elke keer zit ik nu

If Not IsNull(Rs("veld")) And Rs("veld") <> "" Then

terwijl als je gewoon "" ('') in het veld zet je

If Rs("veld") <> "" Then

kan gebruiken


Dus wat is het voordeel van null waardes? het moet ergens goed voor zijn anders zit het er niet in...

[ Voor 28% gewijzigd door Verwijderd op 16-06-2004 14:56 ]


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

NULL betekent echt helemaal niets. Wat jij doet met "" is vergelijken of iets een lege string is. Dat vergelijkt niet zo lekker als je bezig bent met getallen, bijvoorbeeld. NULL is bruibaar als universele aanduideing voor helemaal niets in een database en heeft daarom wel degelijk nut.

With the light in our eyes, it's hard to see.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:31

gorgi_19

Kruimeltjes zijn weer op :9

Omdat Null niet gelijk is aan een leeg veld.
Simpel voorbeeld:
Het gewicht van een klok is 0 kg.
Het gewicht van een klok is Null.

Bij het eerste geval is er een aanduiding dat het gewicht bekend is, bij het tweede geval (Null) is deze niet gedefinieerd en dus onbekend.

[ Voor 8% gewijzigd door gorgi_19 op 16-06-2004 14:57 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:36

TeeDee

CQB 241

Nulls defined: "A null is the absence of a value in a column of a row. Nulls indicate missing, unknown, or inapplicable data. A null should not be used to imply any other value, such as zero. A column allows nulls unless a NOT NULL or PRIMARY KEY integrity constraint has been defined for the column, in which case no row can be inserted without a value for that column."
Bron: Oracle docs.

[...]

edit:
doen jullie allemaal eens niet zo snel posten :(

[ Voor 10% gewijzigd door TeeDee op 16-06-2004 14:59 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
NULL is onbepaalde waarde.

Het heeft z'n nut mbt foreign key velden met referentiele integriteit die niet ingevuld moeten zijn, het heeft nut mbt outer joins, ...

https://fgheysels.github.io/


  • vandijk
  • Registratie: Oktober 1999
  • Laatst online: 23-05 17:51
Je kan toch een mooie IsNullString() functie bouwen die dat in 1 aanroep checked? Als je daar dan ook meteen de begin en eind spaties en tabs uit gooit, dan is het helemaal een mooie functie.

[ Voor 42% gewijzigd door vandijk op 16-06-2004 15:02 ]

Canon cameras en lenzen. Elinchrom flitsers, Lowepro en Pelican tassen/koffers. Polestar 2


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:31

gorgi_19

Kruimeltjes zijn weer op :9

Je kan ook een constraint / default value opnemen in je database. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
hmmm op die manier kan het idd handig zijn, is het aan te raden een lege string om te zetten naar Null?

Dus iets als If var = "" Then var = Null

want als ik via asp een waarde van een input veld opvraag en deze waarde is leeg dan komt er dus een lege string in de db te staan waardoor IsNull() niet meer gebruikt kan worden.

  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 21-05 20:37
niets meer op aan te vullen over NULL waarden...

maar je kunt natuurlijk wel een hulpfunctie (isEmpty ofzo) maken die true of false teruggeeft en checkt op NULL en op de lege string...

edit:
te laat :)

[ Voor 12% gewijzigd door Canard op 16-06-2004 15:04 ]


  • N0stradamus
  • Registratie: April 2002
  • Laatst online: 19-07-2024
Of je doet

code:
1
2
3
4
IF rs("veld") & "" <> "" THEN
..
..
END IF

Als ik het echt allemaal van te voren wist...


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:19
In een goed ontworpen database kan NULL alleen voorkomen als dat ook een zinnige betekenis heeft; bijvoorbeeld in een kolom die een optionele relatie aangeeft of een optionele waarde (denk aan een telefaxnummer). Je kunt dan ook per kolom aangeven of je wel of geen NULL-waarden wilt toestaan; dat doe je dus alleen als je er zinnig gebruik van kunt maken en niet als ze in die kolom "alleen maar irritant" zijn.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:31

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 16 juni 2004 @ 15:01:
hmmm op die manier kan het idd handig zijn, is het aan te raden een lege string om te zetten naar Null?
Dat hangt helemaal van het veld en de applicatie af. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 24-05 21:00
Is weet niet of het qua performance kan, maar deze kom ik ook vaak tegen:
code:
1
If Len(rs("veld")) > 0 Then ...

[ Voor 12% gewijzigd door nescafe op 16-06-2004 15:07 ]

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:36

TeeDee

CQB 241

nescafe schreef op 16 juni 2004 @ 15:07:
Is weet niet of het qua performance kan, maar deze kom ik ook vaak tegen:
code:
1
If Len(rs("veld")) > 0 Then ...
Daar hebben ze dus de isNull functies voor. Dit kan natuurlijk ook wel, maar het zal imho trager zijn dan een IsNull. Weet niet of het zo is, het lijkt mij trager.

edit: Kijk toch weer iets geleerd. Ik dacht dat Len() trager was dan IsNull. Dit is dus niet zo. :)

[ Voor 14% gewijzigd door TeeDee op 16-06-2004 15:22 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Ik weet niet of het in ASP trager is of niet, maar als je volgende code hebt in .NET:

code:
1
2
3
4
5
string s;
...
if( s != string.Empty )
{
}

Dan raadt nprof altijd aan om die code zo te schrijven:
code:
1
if( s.Length  > 0 )

Een numerieke vgl. is nl. altijd sneller dan een alfanumerieke.

https://fgheysels.github.io/


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

nescafe schreef op 16 juni 2004 @ 15:07:
Is weet niet of het qua performance kan, maar deze kom ik ook vaak tegen:
code:
1
If Len(rs("veld")) > 0 Then ...
En het is nog sneller ook.... :7

http://www.aivosto.com/vbtips/stringopt.html

[ Voor 12% gewijzigd door LuCarD op 16-06-2004 15:14 ]

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
heb ff een testje gedaan

If Len(str) > 0 Then
End If

If Not IsNull(str) & str <> "" Then
End If

bijde 100000x uitgevoerd

de len manier is 14x sneller!!

bij de len manier duurde het maar 0.05 sec en bij de isnull manier 0.7 !!

Verwijderd

In oracle is het helemaal leuk..

null is hetzelfde als '' ( = lege string)

select 'J'
from dual
where '' is null --> 'J'

select 'J'
from dual
where null = null --> nix

select 'J'
from dual
where '' = '' -> nix omdat null != null

dus let op mocht je een join schrijven in een SQLletje met null-columns
(als het goed is hoef je dat niet)

[ Voor 27% gewijzigd door Verwijderd op 16-06-2004 15:20 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 16 juni 2004 @ 15:01:
hmmm op die manier kan het idd handig zijn, is het aan te raden een lege string om te zetten naar Null?
Stel jezelf de grote NULL-vraag: heeft de gebruiker daar een lege string ingevuld, of heeft ie de string niet ingevuld? :)

Er is geen vergelijking mogelijk tussen een lege string en NULL. Een lege string is een geldige string, NULL is de absentie van een string.

Om dit te illustreren is het wellicht nuttig om te weten dat NULL zo speciaal is dat ie in een vergelijk niet eens gelijk is aan NULL: omdat ze beiden ongedefinieerd zijn is het oneindig waarschijnlijk dat ze niet gelijk zijn, ergo NULL=NULL is altijd false :)

Een andere handige definitie om in het achterhoofd te houden komt van Joe Celko als ik me niets vergis: "NULL zaps the life out of everything" Probeer ter illustratie van deze regel de volgende SELECTs eens:
• select 5+null;
• select 25 * 25 * null;
• select 'Een stuk string' + null + ' met een extra stuk string';
• select replace('Fiets', 'i', NULL);

Ze leveren allemaal NULL op... Iedere vergelijking/expressie waarin NULL deelneemt wordt vanzelf NULL omdat het resultaat ondefinieerbaar is :)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 16 juni 2004 @ 15:18:
In oracle is het helemaal leuk..

null is hetzelfde als '' ( = lege string)
Is dat geen overtreding van ANSI-SQL? :?

Professionele website nodig?


Verwijderd

curry684 schreef op 16 juni 2004 @ 15:21:
[...]

• select 5+null;
• select 25 * 25 * null;
• select 'Een stuk string' + null + ' met een extra stuk string';
• select replace('Fiets', 'i', NULL);


in oracle

• select 5+null ->
select 5 + null from dual -> nix

• select 25 * 25 * null ->
select 25 * 25 * null from dual -> nix

• select 'Een stuk string' + null + ' met een extra stuk string'->
select 'Een stuk string' || null || ' met een extra stuk string' from dual -> Een stuk string met een extra stuk string 8)7

• select replace('Fiets', 'i', NULL); ->
select replace('Fiets','i',null) from dual -> Fets :r

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 16 juni 2004 @ 15:18:
In oracle is het helemaal leuk..

null is hetzelfde als '' ( = lege string)
Dat zou dan verklaren waarom je geen '' in een not-null varchar kolom mag invoeren...

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Null heeft ook nog een mooie logica. Als je Null opvat als 'unknown' (ipv 'unapplicable') dan is bv:

Null OR True = True
Null AND True = Null
etc.

Verwijderd

en deze slaat alles...

select decode(null,null,'raar hoor','Niet zo raar') from dual -> raar hoor

8)7

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
curry684 schreef op 16 juni 2004 @ 15:23:
[...]

Is dat geen overtreding van ANSI-SQL? :?
Ja. (Hoewel ISO/IEC-SQL of gewoon SQL:2003 misschien een wat meer hedendaagse aanduiding is.)

Verwijderd

Topicstarter
als ik dat zo lees lijkt het me toch het beste null waardes zo veel mogelijk te ontwijken aangezien er een hoop haken en ogen aan zitten.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
curry684 schreef op 16 juni 2004 @ 15:21:
[...]
Ze leveren allemaal NULL op... Iedere vergelijking/expressie waarin NULL deelneemt wordt vanzelf NULL omdat het resultaat ondefinieerbaar is :)
Ligt dat voor strings niet aan de CONCAT_NULL_YIELDS_NULL setting?
voor sql server dan, neem aan dat bv Oracle iets vergelijkbaars heeft

[ Voor 11% gewijzigd door P_de_B op 16-06-2004 16:01 ]

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
ACM schreef op 16 juni 2004 @ 15:39:
[...]

Dat zou dan verklaren waarom je geen '' in een not-null varchar kolom mag invoeren...
Ik geloof dat Oracle een '' omzet naar een NULL bij een INSERT / UPDATE op een kolom waar NULLS toegestaan zijn?

https://fgheysels.github.io/


Verwijderd

P_de_B schreef op 16 juni 2004 @ 16:01:
[...]
voor sql server dan, neem aan dat bv Oracle iets vergelijkbaars heeft
concatenation, dus || is de enig uitzondering qua operators die iets teruggeeft icm null.
functies zijn een ander verhaal zo blijkt. (replace...)
Pagina: 1