Avatar billede alexander_j Nybegynder
05. oktober 2015 - 21:44 Der er 8 kommentarer og
1 løsning

Tabel i tabel

Jeg vil gerne lave en side, hvor man dynamisk kan lave et ukendt antal tabeller, med et ukendt antal kolonner og et ukendt antal rækker. Disse tabeller skulle så gemmes i mysql.

Jeg forestille mig at lave følgende 4 tabeller i mysql:

tables: id - caption
Denne skal indeholde tabellens navn.

th: tableid - series - content
Denne skal indeholde tabellens kolonneoverskrifter koblet op på tabellen 'tableid' og sorteret efter 'series'.

rows: id - tableid - series
Denne viser hvor mange rækker der er i tabellen koblet op på tabellen 'tableid' og sorteret efter 'series'.

cells: rowsid - series - content
Denne indeholder cellernes indhold koblet op på 'rowsid' sorteret efter 'series'.

På den måde kan jeg med 4 tabeller i princippet lave uendelig mange tabeller som kan vises på en hjemmeside.

Men når jeg kigger på mine 4 tabeller, så kan jeg ikke lade være med at tænke, at det må kunne gøres bedre. Er der nogen der har en bedre måde de tænker jeg kan gøre det på?
Avatar billede alexander_j Nybegynder
05. oktober 2015 - 23:15 #1
Hmm efter at have tænkt lidt over det, så er x-/y-koordinater nok den smarteste måde at gøre det på, når man ikke kender tabellernes antal og hver tabels antal kolonner og antal rækker.

Altså to tabeller.

tables: id - caption
Denne skal indeholde tabellens navn.

cells: tableid - row - col - content
Denne skal indehold tabellens cellers indhold. Ved row = -1 så er der tale om kolonneoverskrifter (th).

Disse data kan relativt nemt puttes i et php-array og derefter udskrives som html eller XML.

Jeg hører fortsat gerne, hvis der er en smartere måde.
Avatar billede arne_v Ekspert
06. oktober 2015 - 02:37 #2
Jeg ville nok lave 3 tabeller:

dyntable
--------
table_id PK
table_name

dyncol
------
table_id PK,FK
col_id PK
col_name
col_type

dyndata
-------
table_id PK,FK
col_id PK,FK
row_id PK
data
Avatar billede alexander_j Nybegynder
06. oktober 2015 - 18:24 #3
Det kunne du godt sælge til mig, da det også giver muligheden for at sætte forskellige data på rækkerne/kolonnerne.

To tillægsspørgsmål:
1) Bytter du ikke om på rækker og kolonner i dit eksempel?
HTML arbejder jo med rækker(tr) som du efterfølgende putter celler i(td). I dit eksempel forstår jeg det sådan, at du danne kolonner som du kobler celler på.

2) Hvorfor kobler du table_id på den tredje tabel(dyndata)?
Cellerne er jo allerede koblet op på col_id og behøver vel derfor ikke også table_id. Det kan naturligvis gøre det nemmere at slette en tabel, men omvendt, så er det unødig fyld af data i mysql.

Kom med svar.
Avatar billede arne_v Ekspert
06. oktober 2015 - 18:34 #4
re 1)

Jeg taenker database ikke HTML.

I en database er der et fast antal kolonner for en given tabel.

re 2)

Jeg ville lade col_id loebe 1,2,3 for hver tabel ikke 1,2,3 for foerste tabel og 4,5,6 for anden tabel.

Derfor skal tabel id med.
Avatar billede alexander_j Nybegynder
06. oktober 2015 - 19:03 #5
Du mangler stadig at lægge svar.

Jeg kan se ideen med kolonner, da du ved col_name kan navngive kolonnen og også markere hvilken type data denne kolonne indeholder.

PK står vel for primary key og FK for foreign key.

Hvis col_id starter forfra for hver tabel, så bør den vel ikke være PK? Ligeså med row_id.
Avatar billede arne_v Ekspert
06. oktober 2015 - 20:42 #6
svar
Avatar billede arne_v Ekspert
06. oktober 2015 - 20:43 #7
Ja - jeg mener at navn og type i separat tabel giver lidt mere styr paa det. Row id -1 for col header er et hack.

PK og FK er primary og foreign keys.
Avatar billede arne_v Ekspert
06. oktober 2015 - 20:45 #8
table_id PK,FK
col_id PK,FK
row_id PK
data

skal laeses som at det er kombinationen af table id, col id og row id der er PK altsaa en fler felts PK.

Det er den logiske data model.

Rent praktisk kan du overveje om det er bedre med en syntetisk PK:

data_id PK
table_id FK
col_id FK
row_id
data

da fler felts PK godt kan vaere lidt boevlede i praksis.
Avatar billede alexander_j Nybegynder
06. oktober 2015 - 21:15 #9
1000 tak for hjælpen.

Så har jeg noget at arbejde med.
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