Avatar billede jedimaster Nybegynder
12. juli 2006 - 11:44 Der er 11 kommentarer og
2 løsninger

NULL - godt eller skidt?

Hey.

Jeg har hørt flere gange at det er skidt at have NULL værdier i en tabel. Kan nogen forklare hvorfor - eller måske endda forklare hvorfor det er fuldstændig lige meget.


Håber der er nogle der gider deltage i diskussionen.
Avatar billede fennec Nybegynder
12. juli 2006 - 12:07 #1
Det er fuldstændig lige meget. (også ikke alligevel ikke)

Problem ligger omkring tekstfelter, som er sat til ''. Så ser det ud til at felter som er lig '' og NULL er ens, men det er de ikke. Du finder f.eks ikke rækker hvor navn=NULL med "where navn=''" og omvent finder du ikke '' med "where navn is NULL". Og som du kan se er betingelsen for at finde NULL anderledes ("navn=''" <> "Navn IS NULL")

Hvis det endelig skal være så sæt alle tekstfelter til at være "NOT NULL" i oprettelsen. Så er du uden om tekst problematikken.

Men tal kan du ikke sætte til '', så her er NULL nødvendigt, hvis man skal kunne nulstille feltet.

NULL er altså nødvendig ved tal, og unødvendig ved tekst.
Avatar billede fsconsult.dk Nybegynder
12. juli 2006 - 12:49 #2
NULL - ulemple:  man skal huske at teste på NULL hvergang man henter/gemmer/opdaterer feltet
NULL - fordel:  man kan vise at feltet IKKE er udfyldt.  ifm. fremmednøgler bliver det også krævet at det nøglen peger på  faktisk findes eller er NULL.
Avatar billede erikjacobsen Ekspert
12. juli 2006 - 12:56 #3
Den er lidt gammel, men let læst: http://www.firstsql.com/inulls.htm
Avatar billede jedimaster Nybegynder
12. juli 2006 - 13:09 #4
Jeg sidder og laver et kartotek der spænder over flere tabeller. Jeg kan bare ikke hitte ud af, om det jeg gør er det rigtige - det rigtige kommer selvfølgelig også an på øjnene der ser. Her er et eksempel på min tvivl:

Der bruges følgende tabeller:
[MOVIE]
id
titel
etc. etc.

[ACTOR]
id
name

[ACTOR_MOVIE]
id
id_actor
id_movie

Her hænger tabellerne sammen - men kunne man ikke bare lave 10 felter i MOVIE der eksempelvis hed actor_ID1, actor_ID2 etc. Så kunne man undgår den ene tabel, men i stedet ville man have en masse NULL felter?

Det smarste ville vel i virkeligheden være at have eet fetl i MOVIE, hvor actor ideer blev opregnet adskildt af komma, altså (1, 6, 40, 3, 7)???
Avatar billede pidgeot Nybegynder
12. juli 2006 - 13:14 #5
Nej, det er det der der er det rigtige. På den måde begrænser du dig ikke til et vist antal skuespillere, og det er også langt nemmere at vedligeholde - lad os for eksempel sige det viser sig at en skuespiller af en eller anden grund skal fjernes. Med den struktur kan du let fjerne alle referencer til den skuespiller med en DELETE FROM ACTOR_MOVIE where id_actor=id_der_skal_slettes.

Det er dog ikke nødvendigt med en id-kolonne i ACTOR_MOVIE, da de to andre felter tilsammen udgør en primærnøgle - en skuepsiller skal jo ikek kunne listes 2 gange for samme film.
Avatar billede erikjacobsen Ekspert
12. juli 2006 - 13:25 #6
Det du skitserer med dine 3 tabeller er den rigtigste måde at gøre det på -  SQL-sproget er lavet til at dette. Prøver du på de 2 andre måder, du beskriver nedenunder, kommer du nok et stykke af vejen, men vil ganske sikkert på en masse frustrationer senere hen.
Avatar billede arne_v Ekspert
13. juli 2006 - 01:25 #7
Jeg synes at NULL ville være svær at undvære.

Og jeg er ikke enig i at '' kan erstatte NULL for streng felter. Der kan sagtens
være tilfælde hvor man vil skelne mellem bevidst ingenting og uudfyldt/uoplyst.
Avatar billede Slettet bruger
15. juli 2006 - 14:33 #8
I netop denne situation kunne det være smart med en id-kolonne i ACTOR_MOVIE-tabellen på grund af eventuelle udvidelser, så der også kan søges på rollen, og det dermed kunne være at en skuespiller optræder mere end en gang på samme film.
Avatar billede jedimaster Nybegynder
30. august 2006 - 14:45 #9
Tak for debatten. Jeg vil egentlig godt fordele point mellem jer - gider i afsætte er svar. THANX.
Avatar billede Slettet bruger
30. august 2006 - 15:48 #10
Ok
Avatar billede pidgeot Nybegynder
30. august 2006 - 15:57 #11
Ved ikke om det også var henvendt til mig, men elelrs afviser du bare :)
Avatar billede erikjacobsen Ekspert
30. august 2006 - 16:05 #12
nej tak
Avatar billede fennec Nybegynder
31. august 2006 - 09:31 #13
jeg behøver heller ikke.
.o) <-- One Eyed Jack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester