26. december 2008 - 20:28
Der er
17 kommentarer og 1 løsning
vurdering af struktur
1. Vil nogen kigge på følgende struktur, inden jeg går videre. Specielt column types. Også INDEX, men det kan måske være lidt sværere at vurdere... 2. Derudover måske en forklaring på hvorfor NULL og hvorfor ikke NOT NULL ? (manualen anbefaler NOT NULL hvis NULL ikke er nødvendig) CREATE TABLE `tblbrugerinformation` ( `id` int(11) NOT NULL auto_increment, `brugerid` int(11) NOT NULL default '0', `navn` varchar(100) NOT NULL default '', `foedselsdato` date NOT NULL default '0000-00-00', `fritord` tinytext NOT NULL, PRIMARY KEY (`id`), KEY `loginid` (`brugerid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Struktur-dump for tabellen `tblbrugerlogin` -- CREATE TABLE `tblbrugerlogin` ( `id` int(11) NOT NULL auto_increment, `emailadresse` varchar(100) NOT NULL default '', `adgangskode` varchar(10) NOT NULL default '', `level` char(1) NOT NULL default '1', `oprettet` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `emailadresse` (`emailadresse`), KEY `adgangskode` (`adgangskode`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Struktur-dump for tabellen `tblforumkategorier` -- CREATE TABLE `tblforumkategorier` ( `id` int(11) NOT NULL auto_increment, `label` varchar(30) NOT NULL default '', `beskrivelse` varchar(255) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Struktur-dump for tabellen `tblforumposter` -- CREATE TABLE `tblforumposter` ( `id` int(11) NOT NULL auto_increment, `toppostid` int(11) NOT NULL default '0', `brugerid` int(11) NOT NULL default '0', `oprettet` timestamp NOT NULL default CURRENT_TIMESTAMP, `indhold` text NOT NULL, PRIMARY KEY (`id`), KEY `brugerid` (`brugerid`), KEY `oprettet` (`oprettet`), KEY `toppostid` (`toppostid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Struktur-dump for tabellen `tblforumtopposter` -- CREATE TABLE `tblforumtopposter` ( `id` int(11) NOT NULL auto_increment, `kategoriid` int(11) NOT NULL default '0', `brugerid` int(11) NOT NULL default '0', `oprettet` timestamp NOT NULL default CURRENT_TIMESTAMP, `emne` varchar(100) NOT NULL default '', `indhold` text NOT NULL, PRIMARY KEY (`id`), KEY `kategoriid` (`kategoriid`), KEY `oprettet` (`oprettet`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Annonceindlæg tema
Cloud & AI
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
26. december 2008 - 20:39
#1
re 2) NULL tillader at et felt er ikke udfyldt (NULL er forskellig fra numerisk 0 og streng "") NOT NULL kræver at feltet har en værdi evt. 0 eller "" et PRIMARY KEY felt kan ikke være NULL NOT NULL hjælper til at enforce lidt data disciplin
26. december 2008 - 20:44
#2
re 1) `oprettet` timestamp er vist ikke så godt - et TIMESTAMP felt vil default blive sat til NOW hver gang rækken ændres er `brugerid` int(11) nødvendigt når du har et id ? hvorfor er `tblbrugerinformation` og `tblbrugerlogin` i 2 tabeller ? hvorfor `fritord` tinytext og ikke VARCHAR(255) ? muligvis index på `tblbrugerinformation`.`navn` hvad er topposter ??
26. december 2008 - 20:56
#3
- `oprettet` ok, den skal ikke automatisk opdatere når rækken bliver ændret. Skal jeg så vælge `datetime` i stedet for? - tblbrugerinformation.brugerid er fremmednøgle til tblbrugerlogin.id - `tblbrugerinformation` og `tblbrugerlogin` er i to tabeller for at holde tingene adskilt. Nok mest for mit eget overbliks skyld. Men derudover er dataene i tblbrugerinformation ikke krævet af brugeren. (tja bortset fra tblbrugerinformation.navn som jo så faktisk skal rykkes over i tblbrugerlogin.) - `fritord`: varchar(255) betyder det ikke et max antal tegn på 255 stk. ? måske har brugeren brug for flere end 255? eller er det usandsynligt. - topposter er "hovedspørgsmålet" om man kan kalde det det. Under hovedspørgsmålet kommer svarene som så ligger i tblforumposter. I tbltopposter er to ekstra felter (kategori_id og emne). Kom endelig med mere :)
26. december 2008 - 21:18
#4
Ja. Jeg er skeptisk overfor ideen med de 2 tabeller med 1:1 relation - jeg tror at en enkelt tabel med felter som tillader NULL er bedre. VARCHAR(255) er max. 255 tegn, men det er TINYTEXT også !!
26. december 2008 - 21:21
#5
10-4 jeg forstår. hvad med tblbrugerlogin.level CHAR(1) er den OK ?
26. december 2008 - 21:27
#6
værdien kan være fra 0-3
26. december 2008 - 21:34
#7
Hvis jeg i en tabel har 2 felter, begge NOT NULL. og jeg i min sql undlader det ene felt. Er det så korrekt at posten ikke vil blive behandlet?
26. december 2008 - 21:38
#8
Hvis den er numerisk i natur ville jeg bruge TINYINT.
26. december 2008 - 21:38
#9
En INSERT vil fejle ja.
26. december 2008 - 21:40
#10
21:38:20 -> hvad mener du med i natur? 21:38:45 -> ikke en update?
26. december 2008 - 21:44
#11
at det er et tal og ikke en tekst - den hurtige test er at tallet 2 er mindre end tallet 11 mens strengen "2" er større end strengen "11"
26. december 2008 - 21:45
#12
En UPDATE der forsøger at sætte feltet til NULL vil fejle, men en UPDATE som retter andre felter kan fint virke.
26. december 2008 - 21:45
#13
Det er kun operationer som vil forsøge at puttet NULL i et NOT NULL felt der vil fejle.
26. december 2008 - 21:56
#14
ach so! super. Jeg har brugt VARCHAR() fordi det er hvad så mange andre bruger :) Men hvad bruges CHAR() så til? det er noget med at der fyldes op fra højre med spaces. og så kan værdien være max 255 tegn. Og VARCHAR fyldes ikke om fra højre, og kan have helt op til 65,535 tegn, eller bytes?
26. december 2008 - 22:28
#15
VARCHAR er til tekst i variabel længde - CHAR er til tekst i fast længde - det er sjældent at man bruger CHAR idag
26. december 2008 - 22:29
#16
VARCHAR er i ældre MySQL versioner max. 255 men i nyere versioner op til 65535.
27. december 2008 - 08:08
#17
tak for hjælpen :) du skal have nogle point så lig et svar
27. december 2008 - 15:12
#18
kommer her
Computerworld tilbyder specialiserede kurser i database-management