Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)
One's never alone with a rubber duck.
Verwijderd
ik insert de waarde van de variabele gebdatum en die heb ik boven zo neergezet -> gebdatum = "" en ik heb ook gebdatum = NULL geprobeerd maar bij allebei zelfde resultaat
Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)
Verwijderd
Volgens mij bedoelen ze hierboven je default waarde in je SQL dbOp donderdag 21 februari 2002 10:35 schreef muis het volgende:
ik insert als het goed is helemaal nx
ik insert de waarde van de variabele gebdatum en die heb ik boven zo neergezet -> gebdatum = "" en ik heb ook gebdatum = NULL geprobeerd maar bij allebei zelfde resultaat
oogjes open, snaveltjes dicht
Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)
Maar heeft iemand enig idee hoe ik deze verander?
Alter table tbl_blaat alter column geboortedatum datetime NULL .... en dan?
Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)
Verwijderd
Het ding MOET een waarde hebben, NULL of iets anders. Het is IMHO bad database design als je NULL fields toelaat, want dit levert errors op in code die je met onnodige code weer moet afvangen. Dus blijft een initiele waarde over. '0' is dan OK. Eventueel een bitfield ernaast dat aangeeft of de waarde gezet is of niet (dwz GeboorteDatumIsValid bit)
Besluit je om NULL fields toe te laten dan zou ik het NULL laten en in je retrieval query de ISNULL() functie gebruiken om NULL fields naar '0' om te zetten.
Op donderdag 21 februari 2002 12:00 schreef Otis o.a.:
Het is IMHO bad database design als je NULL fields toelaat, want dit levert errors op in code die je met onnodige code weer moet afvangen.
Dit getuigt meer van een onbegrip wat de 'waarde' NULL betekend dan van slecht db-design, imho.
Today's subliminal thought is:
Verwijderd
heh neuOp donderdag 21 februari 2002 13:23 schreef Annie het volgende:
[..]
Dit getuigt meer van een onbegrip wat de 'waarde' NULL betekend dan van slecht db-design, imho.
Het gaat om het feit dat bij een retrieval van data uit de tabel, de ontvangde partij van de dataset/recordset er vanuit mag gaan dat de data er is en niet dmv het testen op 'NULL' moet kijken of er data is of niet.
NULL columns worden door sommige designers gebruikt voor het aangeven van 'non-mandatory' data, maar eerlijk gezegd ben je een stuk robuuster bezig door alle columns NOT NULL te maken en default values te definieren. Zodoende hoef je niet alle columns te vullen, maar is bij een dataretrieval wel elke column in je data/recordset gevuld met een waarde en hoeft de ontvangende partij niet te kloten met testcode of een field een waarde heeft. (die vroeg nl. om data, niet om NULL values, en verwacht van de supporting layer waar hij die data aan vraagt of dat verzorgt kan worden. Dat er NULL values in staan is niet het probleem van de ontvanger.)
Verwijderd
Jij vind dus een veld vullen met een default dummy waarde en het zetten van 'n extra bitfield minder werk dan het simpel weg testen op een NULL value?Op donderdag 21 februari 2002 14:05 schreef Otis het volgende:
maar is bij een dataretrieval wel elke column in je data/recordset gevuld met een waarde en hoeft de ontvangende partij niet te kloten met testcode of een field een waarde heeft.
EDIT: Want je kan juist prima met code controleren of een waarde NULL is. Errors komen dan door slecht coderen.
oogjes open, snaveltjes dicht
Ben ik op zich wel met je eens, alleen in het geval van een datum, wat wil je er anders van maken? Je zou overigens in de query natuurlijk gewoon op isnull kunnen checken, en 'm een lege waarde of 0-0-0000 terug laten geven of zo, beetje afhankelijk van wat er met de data moet worden gedaan.Op donderdag 21 februari 2002 14:05 schreef Otis het volgende:
en hoeft de ontvangende partij niet te kloten met testcode of een field een waarde heeft. (die vroeg nl. om data, niet om NULL values, en verwacht van de supporting layer waar hij die data aan vraagt of dat verzorgt kan worden. Dat er NULL values in staan is niet het probleem van de ontvanger.)
Exact expert nodig?
Prima dat de ontvangende partij niet hoeft te weten dat de waarde NULL is, maar dan moet je dus in je applicatie laag checken op NULL en deze evt. omzetten in een 'leukere' waarde, imho.Op donderdag 21 februari 2002 14:05 schreef Otis het volgende:
NULL columns worden door sommige designers gebruikt voor het aangeven van 'non-mandatory' data, maar eerlijk gezegd ben je een stuk robuuster bezig door alle columns NOT NULL te maken en default values te definieren.
In de database hoort de data te staan die daar thuishoort en niet 'vervuilde data' alleen maar omdat dat handiger is voor de gebruikers.
Bijvoorbeeld:
In de database staat 0 bij het salaris van Jan.
Betekend dat dan dat Jan zijn salaris niet heeft ingevuld (en dus een defaultwaarde krijgt) of dat hij echt niks krijgt per maand?
En wat als je AVG(salaris) wil doen?
NULL is ook dataOp donderdag 21 februari 2002 14:05 schreef Otis het volgende:
(die vroeg nl. om data, niet om NULL values, ....
Today's subliminal thought is:
Verwijderd
Ja. Dit komt op hetzelfde neer als bv in C/C++:Op donderdag 21 februari 2002 14:13 schreef Yarvieh het volgende:
[..]
Jij vind dus een veld vullen met een default dummy waarde en het zetten van 'n extra bitfield minder werk dan het simpel weg testen op een NULL value?![]()
![]()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| SSomeStruct *pPointer;
// some function
pPointer = SomeFunctionReturningStruct();
// ... some code
// freeing memory
free(pPointer);
// ...some other code
// testing if pPointer is freed?
if(pPointer)
{
// ...
} |
Dit is brakke code. Niet alle C runtimes zet namelijk de pointer op NULL bij de free. Er een flag voor gebruiken, DAT je de pointer/mem hebt gefreed is beter.
Je test op een NULL value in een databaseveld om welke reden? Een semantische waarde geven aan de inhoud van dat veld. Echter, dit is LOGISCHER door te testen op een boolean veld dat aangeeft of het veld valid is of niet, dan te testen op een NULL value. Sommige talen ondersteunen niet het testen op NULL values, wat je opvangt door het bitveld.
Logisch met je data omgaan, daar gaat het hier over. Indirect semantische waarde hechten aan NULL values lijkt me minder logisch (en met mij veel database designers) dan het testen op een field dat daarvoor speciaal is gecreeerd.
Verwijderd
Helemaal mee eens...Op donderdag 21 februari 2002 15:44 schreef Annie het volgende:
Prima dat de ontvangende partij niet hoeft te weten dat de
NULL is ook data
Verwijderd
Verwijderd
Waarom moet ik checken op een NULL waarde? Ik moet ALLEEN checken op null values om errors te voorkomen.Op donderdag 21 februari 2002 15:44 schreef Annie het volgende:
[..]
Prima dat de ontvangende partij niet hoeft te weten dat de waarde NULL is, maar dan moet je dus in je applicatie laag checken op NULL en deze evt. omzetten in een 'leukere' waarde, imho.
Het is niet aan de database om te bepalen wat de semantische waarde is van data. De database slaat data op, verder niks.In de database hoort de data te staan die daar thuishoort en niet 'vervuilde data' alleen maar omdat dat handiger is voor de gebruikers.
AVG over non-mandatory fields, wat zegt dat? Ik zou voor een non-mandatory field een bitfield opnemen of de waarde geldig is of niet. Dat veld vertelt een functie of de waarde geldig genoemd kan worden of niet. Verder niks.Bijvoorbeeld:
In de database staat 0 bij het salaris van Jan.
Betekend dat dan dat Jan zijn salaris niet heeft ingevuld (en dus een defaultwaarde krijgt) of dat hij echt niks krijgt per maand?
En wat als je AVG(salaris) wil doen?
Wil je per se aggregates draaien over non-mandatory fields, kun je daar altijd faciliteiten voor treffen.
Nee, NULL is geen data, maar een 'leeg' aanduiding. 0 is data, 'NULL' niet. Maar dat is een academische discussie ala 'C++' is wel/niet OO.NULL is ook data
Verwijderd
voorbeeld:Op donderdag 21 februari 2002 16:08 schreef Otis het volgende:
Waarom moet ik checken op een NULL waarde? Ik moet ALLEEN checken op null values om errors te voorkomen.
1
| Select * from tblWoningen where verkoopdatum is NULL |
Welke taal niet? Zie nu wel wat meer in dat bitveld btw, maar zo het niet snel gebruiken. Denk trouwens dat in dit geval (de meeste gevallen) je wil weten welke datums NOT NULL zijn, dus niet ge-(re)set zijn. Resetten van die datum, denk het niet snel.Op donderdag 21 februari 2002 15:58 schreef Otis het volgende:
Sommige talen ondersteunen niet het testen op NULL values, wat je opvangt door het bitveld.
oogjes open, snaveltjes dicht
Verwijderd
Helemaal mee eens. 'NULL' geeft aan dat er geen data is. Net zoals wit (of zwart) geen kleur is. Daarom is het ideaal om aan te geven dat er nog geen data voor het desbetreffende veld aanwezig is. (en niet door het te vullen met een default waarde)Op donderdag 21 februari 2002 16:08 schreef Otis het volgende:
[..]
Nee, NULL is geen data, maar een 'leeg' aanduiding. 0 is data, 'NULL' niet. Maar dat is een academische discussie ala 'C++' is wel/niet OO.
Verwijderd
Nee, alleen voor non-mandatory fields. Je weet wel, die velden die volgen uit een 0:n relatie. Veelal zijn velden in een table echter mandatory (1:1 of 1:n relaties).Op donderdag 21 februari 2002 16:02 schreef r-e-m het volgende:
Otis, wil je dan voor elk veld in een database een extra veld opnemen om aan te geven dat deze is ingevuld
Lijkt me dat je hierdoor wel heel veel overhead in je db krijgt.
Maar dit is een zeurdiscussie ala dat je pointers moet testen op NULL versus een boolean testen. De nitwitts die grienen om elke regel code zullen pointervalidatie code bouwen op basis van NULL-tests, mensen die snappen dat je solide code moet maken, bouwen pointervalidatie code op basis van boolean tests.
Als ik een recordset terugkrijg en ik moet velden vullen in een client wil ik dat in een kleine loop doen die niet vergeven is van af en toe een NULL test want o jee, anders crasht de code. Die code is nl. leesbaarder wanneer je test op velden die validiteit aangeven over andere velden. Oftewel semantische meerwaarde geven aan je records.
Maar iedereen moet maar doen wat hij/zij het beste vindt. Mijn databases hebben nooit NULL values en veel prof. database designers denken er net zo over.
Verwijderd
VB had lange tijd geen IsNull functie. Je moest dat doen door waarde uit dat veld te halen, en dan in een errorhandler kijken welke error je kreeg en dan resumen. Net zoals je dat deed met object references die er niet waren.Op donderdag 21 februari 2002 16:12 schreef Don Facundo het volgende:
[..]
Welke taal niet? Zie nu wel wat meer in dat bitveld btw, maar zo het niet snel gebruiken. Denk trouwens dat in dit geval (de meeste gevallen) je wil weten welke datums NOT NULL zijn, dus niet ge-(re)set zijn. Resetten van die datum, denk het niet snel.
Tuurlijk lijken die bitfields overbodig. Het gaat echter over het aangeven van hints aan de recordset user welke fields valid zijn en welke niet. Mandatory field code zal die velden links laten liggen, maar indien nodig is het t.a.t. verstandiger NULL values te mijden.
Ik vind dat je wel heel erg overtuigd bent van je gelijkOp donderdag 21 februari 2002 16:16 schreef Otis o.a.:
Maar iedereen moet maar doen wat hij/zij het beste vindt. Mijn databases hebben nooit NULL values en veel prof. database designers denken er net zo over.
Er zijn waarschijnlijk net zoveel prof.db-ers die er anders over denken.
En opmerkingen als "nitwits" komen bij mij behoorlijk flame-erig over
btw.
ooit gehoord van coalesce(), isnull()
jij ookOp donderdag 21 februari 2002 16:16 schreef Otis het volgende:
Je komt er wel op terug, echt
Today's subliminal thought is:
Verwijderd
C.J. Date "An Introduction to Database Systems, Volume II", pag 210-212.Op donderdag 21 februari 2002 16:19 schreef r-e-m het volgende:
[en veel prof. database designers denken er net zo over]
Waar haal je dit vandaan..
Meneer Date lijkt me genoeg gewicht geven aan de stelling
Neem aan dat die niet door de eerste de beste prutser in elkaar zijn gezet
Verwijderd
hahaOp donderdag 21 februari 2002 18:02 schreef raptorix het volgende:
Uhm Northwind DB, de voorbeeld DB van MS bevat anders ook behoorlijk wat velden die Null zijn
Neem aan dat die niet door de eerste de beste prutser in elkaar zijn gezet
Verwijderd
Nee, NULL geeft aan dat dat veld niet is geinitialiseerd. Daarop testen is exact hetzelfde als in VB een boolean definieren en er vanuit gaan dat hij 'false' is, want standaard wordt deze op 'false' gezet door de compiler. Een database hoeft in theorie geen 'NULL' in een veld te zetten, het veld is nl. niet geinitialiseerd. Theoretisch geneuzel, helemaal mee eens, maar in softwaredevelopment is het noodzaak de reden te weten waarom je doet en waarom iets is zoals het is.Op donderdag 21 februari 2002 16:16 schreef r-e-m het volgende:
[..]
Helemaal mee eens. 'NULL' geeft aan dat er geen data is. Net zoals wit (of zwart) geen kleur is. Daarom is het ideaal om aan te geven dat er nog geen data voor het desbetreffende veld aanwezig is. (en niet door het te vullen met een default waarde)
*grouphug*Op donderdag 21 februari 2002 18:29 schreef Otis het volgende:
... Ok, ik was wat flamerig met 'nitwitts'...
of mag dat alleen in /13 ?
Today's subliminal thought is:
Verwijderd
nee hoor, dat kan hier ook welOp vrijdag 22 februari 2002 11:34 schreef Annie het volgende:
[..]
*grouphug*
of mag dat alleen in /13 ?
Weet iemand misschien al een oplossing
Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)
Verwijderd
Je vraag is toch al beantwoord? Die 1-1-1900 is de representatie van '0' als value van een datetime field.Op vrijdag 22 februari 2002 12:10 schreef muis het volgende:
uhm dit gaat me allemaal wat ver
Weet iemand misschien al een oplossing
Verwijderd
In het geval van VB/ASP/SQL is het een kwestie van een keer goed doorlezen hoe Null-values werken. Als je dat snapt (is niet zo heel moeilijk
oogjes open, snaveltjes dicht