Avatar billede chrisrj Forsker
13. februar 2020 - 15:03 Der er 12 kommentarer og
1 løsning

Find ud af hvornår der ikke kan sættes flere kolonner i tabel i db'en

Hejsa

Jeg har et "lille" problem. Jeg har for mange data til at de kan være i een tabel, så jeg har derfor brug for at kunne lave nye tabeller On-The-Fly.
Men for at jeg kan det, skal jeg vide hvornår tabellen er fyldt.

Jeg troede jeg kunne tjekke det via:
SHOW TABLE STATUS LIKE 'tabelnavn' og så kigge på Data_length. Men den ser ikke ud til at ændre sig??

Så hvad gør man?? :D
Avatar billede arne_v Ekspert
13. februar 2020 - 15:22 #1
MySQL kan max. jave 4096 kolonner i en tabel. Og en række (minus LOB's) kan max. være 64 KB.

Jeg vil mene at hvis det er et problem så er din applikation fejldesignet.

Det må være bedre at fixe den logik end at oprette nye tabeller.
Avatar billede chrisrj Forsker
13. februar 2020 - 15:30 #2
Jamen, du er da velkommen til at finde en bedre ide, hvis du kan. :D

Der er tale om spørgeskemasvar.
Så mange spørgsmål*rigtig mange svar.
Pt. har jeg spørgsmål som rækker og svar som kolonner - der giver mig ca. 200 svar kolonner.
Vender jeg det om (som jeg startede med!), har jeg så kun mulighed for de samme ca. 200 spørgsmål, hvilket langt fra er nok.

Der er vel ca. 1000 spørgsmål (fordelt på 3-4 skemaer) og op til 300000 der skal svare på dem. Hvert spørgsmål skal have 20 tegn til svar.

Databasen ligger på et webhotel, så der er grænser for hvad jeg kan gøre med den.

Så hvad vil du foreslå? :)
Avatar billede arne_v Ekspert
13. februar 2020 - 16:23 #3
Jeg ville nok lave det som:

spm
----
spm_id
spm_text

(1 række per spørgsmål)

svar
----
svar_id
svar_spm_id
svar_text

(1 række per svar)
Avatar billede chrisrj Forsker
13. februar 2020 - 16:29 #4
Hmm...jeg er ikke sikker på jeg forstår det helt, så lad mig lige prøve engang:

Spørgsmål tabel:
id, tekst
id, tekst
id, tekst
...

svar tabel:
svar id, spg id, bruger id, svar tekst
svar id, spg id, bruger id, svar tekst
svar id, spg id, bruger id, svar tekst
....


Er det sådan du mener?
Avatar billede arne_v Ekspert
13. februar 2020 - 16:41 #5
Ja. Du har tilføjet et bruger id felt, men det er modellen ja.
Avatar billede chrisrj Forsker
13. februar 2020 - 16:44 #6
Ok. Jamen, det er jo også nødvendigt for at koble svaret til brugeren. :)

Jeg fatter ikke hvorfor jeg ikke så denne løsning fra starten af... :D

Det er jo så lige ud af landevejen! :D
Avatar billede arne_v Ekspert
13. februar 2020 - 16:55 #7
Ja. Det er den rigtige måde at gøre det på.

Og du skal ikke være bekymret over antal rækker. Relationelle databaser er designet til at håndtere mange rækker.

Med mange rækker skal du dog vælge de rigtige indeks for at få en ordentlig performance.
Avatar billede chrisrj Forsker
13. februar 2020 - 17:00 #8
Jeps. :)

Det er jeg heller ikke. :) Ja, heldigvis! :D

Ja...har du et tip til lige denne tabel? :D
Avatar billede chrisrj Forsker
13. februar 2020 - 17:07 #9
Hmmm...

tænker på, om det mon er nemmest af lave update på svar, eller delete+insert når brugeren opdatere sine svar?

De kommer sidevis, så jeg kan ikke bare tage dem alle på een gang.
Avatar billede arne_v Ekspert
13. februar 2020 - 17:22 #10
Med hensyn til indeks så vil jeg tro:

Spørgsmål tabel:
id må være primænøgle d.v.s. den får automatisk indeks)
tekst

svar tabel:
svar id som ovenfor
spg id jeg ville tilføje indeks ved mange rækker
bruger id jeg ville tilføje indeks ved mange rækker
svar tekst
Avatar billede arne_v Ekspert
13. februar 2020 - 17:24 #11
Avatar billede arne_v Ekspert
13. februar 2020 - 17:25 #12
Hvis det er en opdatering, så ville jeg nok bruge UPDATE.
Avatar billede chrisrj Forsker
13. februar 2020 - 17:31 #13
Jamen, det giver jo fint menig.

Vi takker og bukker. :)

Og så har jeg vist ikke flere dumme spørgsmål (høhø) i dag. :D
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

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