Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen
Oops! Google Chrome could not find www.rijks%20museum.nl
BTW: Als je alle documenten wilt, waarom wordt er dan uberhaupt een conditie toegevoegd op 'de titel mag alles zijn'?
Death smiles at us all, all a man can do is smile back.
PSN
Bedankt voor het meedenken.
Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen
Fout.DeathKnight24 schreef op donderdag 11 augustus 2011 @ 12:08:
Ja hoor een titel is optioneel daar de documenten ook via andere parameters te indexeren zijn. Ik heb het probleem inmiddels eenvoudig opgelost door de default waarde geen NULL te geven maar gewoon "".
Null == Geen waarde gespecificeerd voor dit veld. En dat is iets anders dan een lege string wat wél een waarde is, namelijk een lege string.
Zoals gezegd had je beter gewoon COALESCE kunnen gebruiken (of ISNULL of... net wat je RDMBS daarvoor gebruikt).
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen
Dat zal best, maar 't is niet 'tzelfde. Je hebt dus functioneel iets gewijzigd hoewel je in de waan bent iets gefixed te hebben. Misschien wat 't al fout in-the-first-place en waren de NULL values helemaal niet de bedoeling en is je fix inderdaad correct. Maar misschien ook wel. All I know is dat ik een datamodel (waar doorgaans, niet altijd) toch goed over nagedacht is niet zo 1-2-3 en zo simpel zou verbouwen als je nu hebt gedaan (althans: dat is de indruk die je wekt). Het is namelijk geen oplossing maar symptoombestrijding. En wie weet heb je nu wel meer stuk gemaakt dan je denkt.
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Oude waarden in de database waren leeg en niet NULL. Dus het is nu zoals het ooit bedoeld is.
Ik begrijp het verschil tussen NULL & '' volledig en besef de consequenties voor eventuele insert queries.
Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Maar gelukkig heb jij tijd om alle code die je niet zelf geschreven hebt te verbeteren als dat niet facturabel is
[ Voor 29% gewijzigd door me1299 op 11-08-2011 12:42 ]
Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen
Je kan verdorie gewoon alles laten staan, het enige dat je hoeft te doen is documenten.titel veranderen in COALESCE(documenten.titel, '') en je bent er, alles blijft werken zoals het altijd deed met bijkomend voordeel dat NULL-waardes gewoon werken. In plaats daarvan heb je de meest ranzige oplossing gebruikt die er maar te vinden is voor dit probleem en als je daarop gewezen wordt kom je met die cynische ondertoon? Doe eens niet.DeathKnight24 schreef op donderdag 11 augustus 2011 @ 12:42:
Het zou inderdaad beter zijn dat deze WHERE clause helemaal niet gebruikt wordt op het moment dat er niet gefilterd wordt op een omschrijving.
Maar gelukkig heb jij tijd om alle code die je niet zelf geschreven hebt te verbeteren als dat niet facturabel is
[ Voor 6% gewijzigd door NMe op 11-08-2011 13:34 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Wat ik er uit lees is dat 'ie een update die de zooi "gebroken" heeft nu juist heeft gefixed door die NULLs niet meer toe te staan:
Dat is ook precies de reden waarom ik een beetje een slag om de arm hieldDeathKnight24 schreef op donderdag 11 augustus 2011 @ 12:33:
Het klopt inderdaad dat oude waardes niet NULL moesten zijn. Het systeem heeft namelijk recent een update gehad en sindsdien werkte het niet meer naar behoren.
Neemt niet weg dat ik eerst even die COALESCE had gebruikt tot ik zeker wist dat 't niet-NULLs-toestaan de juiste oplossing was. En dat ik 't verdraaid vreemd vind dat dit topic überhaupt bestaat. TS had namelijk al meteen in de gaten dat 't met NULLs mis ging en toen er een oplossing kwam waren opeens de NULLs verkeerd.
[ Voor 30% gewijzigd door RobIII op 11-08-2011 13:38 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Ja, maar intussen staan er dus wel al NULL-waardes in de database die nu vervangen zijn door lege strings. Voor iets als een titel zijn ze beiden niet handig maar het onderliggende probleem los je in beide gevallen niet op...RobIII schreef op donderdag 11 augustus 2011 @ 13:36:
[...]
Wat ik er uit lees is dat 'ie een update die de zooi "gebroken" heeft nu juist heeft gefixed door die NULLs niet meer toe te staan:
[...]
Dat is ook precies de reden waarom ik een beetje een slag om de arm hield
Zie ook dit trouwens:
Dan is het dus ooit fout bedoeld, want lege waarden horen geen lege strings te zijn. Geen titel = null. Die update heeft dus een onvolkomenheid gefixt die nu weer geherintroduceerd is omdat de topicstarter liever geen coalesce wil gebruiken?DeathKnight24 schreef op donderdag 11 augustus 2011 @ 12:33:
Oude waarden in de database waren leeg en niet NULL. Dus het is nu zoals het ooit bedoeld is.
[ Voor 27% gewijzigd door NMe op 11-08-2011 13:40 ]
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Dat klinkt leuk, maar het levert wel een vrij fundamenteel probleem op: hoe toon je dat aan de gebruiker? Een leeg tekstveld kan immers twee dingen betekenen: NULL of een lege string (itt bijvoorbeeld een vakje waar een telefoonnummer of een getal inmoet, daar betekent een leeg vakje duidelijk NULL) - en de vraag is of je je gebruiker daar mee lastig wilt/moet vallen.NMe schreef op donderdag 11 augustus 2011 @ 13:38:
Dan is het dus ooit fout bedoeld, want lege waarden horen geen lege strings te zijn.
Toegegeven, in dit geval betekent een leeg vakje hoogstwaarschijnlijk 'geen data beschikbaar', maar dat /hoeft/ niet: je kunt best een document zonder titel maken.
[ Voor 12% gewijzigd door ValHallASW op 11-08-2011 14:09 ]
In dit geval heeft iemand die de query heeft geschreven dus een aantal selecties gemaakt met select tabel.* (ja vies en traag enz enz). Dit zou dus betekenen dat ik de query voluit moet herschrijven waarvoor ik alle relevante kolommen in de database moet gaan nazoeken.
Het eindresultaat zou sneller mooier en beter te onderhouden zijn, dat zal ik zeker niet ontkennen maar uiteindelijk is het niet facturabel en zodoende kan ik mijn tijd beter nuttiger besteden.
Een klant wil vaak een website die werkt, of het op de achtergrond zeer netjes werkt zal hem zijn reet roesten. Wel probeer ik bij nieuwe projecten van te voren dit soort onvolkomenheden van te voren te vermijden. Dit is dan ook een oud project wat niet door mij geschreven is.
Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen
'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.
Maar ja, kan je wel het extra onderhoud en de nodige fixes als je pleistertje faalt factureren?DeathKnight24 schreef op donderdag 11 augustus 2011 @ 14:09:
Het eindresultaat zou sneller mooier en beter te onderhouden zijn, dat zal ik zeker niet ontkennen maar uiteindelijk is het niet facturabel en zodoende kan ik mijn tijd beter nuttiger besteden.
{signature}
Precies, en met de oorspronkelijke invoer heb je hetzelfde probleem, tenzij je het titelinvoervakje alleen toont als de gebruiker op een extra knopje drukt dat hij een titel toe wil voegen.ValHallASW schreef op donderdag 11 augustus 2011 @ 14:08:
[...]
Dat klinkt leuk, maar het levert wel een vrij fundamenteel probleem op: hoe toon je dat aan de gebruiker? Een leeg tekstveld kan immers twee dingen betekenen: NULL of een lege string (itt bijvoorbeeld een vakje waar een telefoonnummer of een getal inmoet, daar betekent een leeg vakje duidelijk NULL) - en de vraag is of je je gebruiker daar mee lastig wilt/moet vallen.
Hij wordt niet weggefilterd, anders zou hij NULL-values ook matchen.NMe schreef op donderdag 11 augustus 2011 @ 12:37:
Je hebt dus een ranzige wijziging in je data gemaakt om zo een where-clause mogelijk te maken die niets doet behalve je query langer maken (de query optimizer filtert hem vast weg)?
Verwijderd
Oracle heeft in haar oneindige wijsheid besloten dat lege strings ('') worden opgeslagen als NULLs. Altijd lachen, en zorgt absoluut niet voor frustratie en onverwachte uitkomsten.
Probleem waar je nu mee komt te zitten is dat bij de volgende update je waarschijnlijk weer alles moet "fixen" omdat dan weer NULL wordt gebruikt
Dat lijkt mij op zich weer een ranzige manier van documenten onzichtbaar makenAloys schreef op donderdag 11 augustus 2011 @ 16:21:
Was het zetten van de document.titel op NULL niet toevallig een nieuwe "feature". Waarmee je dus documenten "onzichtbaar" kon maken (hoewel het wel ranzig is).
Probleem waar je nu mee komt te zitten is dat bij de volgende update je waarschijnlijk weer alles moet "fixen" omdat dan weer NULL wordt gebruikt