Niet een hele spannende vraag, maar vooral uit nieuwsgierigheid.
Ik ben benieuwd hoeveel tel.nrs en e-mailadressen een user kan invoeren op jouw website. Vaak zie je bij het inschrijven 2 velden voor een tel.nr. (een vast en een mobiel nummer). Is dat nog nodig, of is 1 tel.nr. tegenwoordig gebruikelijker? En dezelfde vraag voor een e-mailadres. Bied je de gebruiker de mogelijkheid om 1 e-mailadres in te voeren, of geef je hem de mogelijkheid om nog een extra e-mailadres in te voeren zodat de mail altijd naar 2 adressen wordt verstuurd?
Oké. En dan accepteer je dus als ik het goed begrijp het feit dat die 2 velden niet altijd gevuld zijn?
Er bestaat een verschil tussen wat mensen opgeven en wat je in de database opslaat.
Volgens de normalisatie theorieën kan je geen nullable kolommen in een tabel hebben, maar je moet daar praktisch mee omgaan.
Wards voorbeeld met tussenvoegsels is daar een goed voorbeeld voor. (Overigens bestaat er in MySQL een verschil tussen null en ''.
Een andere sitautie is als je een factuuradres en verzendadres hebt, 1 op de mss 30 keer zit daar verschil tussen en dan kies ik ervoor omdat in een aparte table op te slaan.
>> Volgens de normalisatie theorieën kan je geen nullable kolommen in een tabel hebben, maar je moet daar praktisch mee omgaan.
Wat bedoel je precies. Ben je het wel of niet met de methode van Ward eens? Dus 2 mailadres velden en 2 tel.nr. velden, maar accepteren dat vaak 2 velden leeg zijn?
>> Er bestaat een verschil tussen wat mensen opgeven en wat je in de database opslaat.
Wat zou jij dan invullen indien men geen extra tel.nr. / mailadres opgeeft?
>> Heel bot gezegd is het voordeel dat je geen gezeur aan je kop krijgt over normalisatie.
Van wie? Van de normalisatiepolitie? Hehe, grapje hoor ;)
Ik snap alleen niet echt wat je doet. Omdat volgens de theorie een veld niet leeg mag zijn, zet je er toch maar iets in? Is dat waar het dan op neerkomt, of zie ik het helemaal verkeerd? Zou zo maar kunnen hoor?
Er is een verschil tussen "we weten niet of het bestaat" en "het bestaat niet", maar in beide gevallen sta je met lege handen. (Om de argumentatie om te keren: als er nergens een God te bekennen is, kan dat "we weten niet of God bestaat" betekenen maar ook "God bestaat niet".)
Volgens sommigen zou je daarvoor het verschil tussen NULL en '' moeten gebruiken.
Stel, iemand meldt zich aan bij een site, maar gebruikte daarvoor het nieuwsbriefformulier. Daarin hoef je alleen voornaam en e-mailadres in te vullen. Van de volledige naam weten we alleen de voornaam, de andere data zijn nooit gecontroleerd of in actie gekomen.
Later plaatst onze gebruiker een bestelling en leren we zijn volledige naam: Jan Jansen, zonder tussenvoegsels. We kunnen de NULL voor "weet niet" nu vervangen door '' voor "bestaat niet":
In theorie klinkt dat heel mooi. In de praktijk gaat het fout om verschillende redenen. Niet alle applicatiebouwers houden zich aan het verschil tussen '' en NULL, of weten niet hoe je NULL in een INSERT zet, waardoor onze database in hoog tempo vervuilt. Bovendien handelen MyISAM en InnoDB die NULL ook nog anders af.
Vandaar dat de oplossing van Ger een slim alternatief is: gebruik bijvoorbeeld 0 in de betekenis "we hebben de naam gecontroleerd en er zijn nul tussenvoegsels.
>> Niet alle applicatiebouwers houden zich aan het verschil tussen '' en NULL, of weten niet hoe je NULL in een INSERT zet
Je kunt de waarde toch ook gewoon niet inserten als ie leeg is en dan defaulten naar null?
Ik snap de insteek enigszins, maar wat maakt het in de praktijk uit of het "weet niet" of "bestaat niet" is. Ik zou gewoon denken "we hebben 'm niet" :) Waarom we 'm niet hebben doet er niet toe.
Ik zou alleen 2 email's gebruiken als je daar van plan bent gebruik van te maken
voor het geval dat iemand niet meer op z'n mail kan kunnen ze een alternatief email adres gebruiken om een nieuw wachtwoord aan te vragen of dat soort dingen
>>
>> Niet alle applicatiebouwers houden zich aan het verschil tussen '' en NULL, of weten niet hoe je NULL in een INSERT zet
Je kunt de waarde toch ook gewoon niet inserten als ie leeg is en dan defaulten naar null?
Dat kan ja, maar dan kan het nog steeds voorkomen dat iemand anders het wel doet maar dan met '' in plaats van NULL.
Met een NOT NULL constraint dwing je af dat er iets opgegeven wordt, of je kan met een default value afdwingen dat het niets altijd hetzelfde is.