Struttura del database per salvare le 'tabelle'

6

Sto lavorando a un progetto in cui un utente può creare tabelle per salvare alcuni dati. Quale sarebbe il modo migliore per implementarlo? In questo momento lo sto facendo in questo modo:

Tabella "tabelle": contiene le impostazioni dell'utente come un nome.

Tabella "righe": contiene un ID e una relazione a "tabelle".

Tabelle "celle": contiene un ID, un valore, una posizione e una relazione a "righe".

C'è un modo più pulito o migliore per farlo?

    
posta user263337 21.02.2017 - 18:17
fonte

4 risposte

3

Poiché @RobertHarvey ha menzionato la piattaforma interna:

Perché non utilizzare la funzionalità RDBMs per mantenere una tabella? Crea uno schema separato per inserire le tabelle degli utenti. Per ogni tabella utente, crea una tabella DB chiamata qualcosa come usertable_userId_counter .

Definisci tutte le righe e le colonne all'interno di quella tabella. È anche possibile definire un contatore di incrementi che funzioni in modo simile a ROW_ID in SQLite:

CREATE TABLE usertable_4711_1;
ALTER TABLE usertable_4711_1 ADD COLUMN rowid INT NOT NULL AUTO INCREMENT;

ALTER TABLE usertable_4711_1 ADD COLUMN col1 VARCHAR(255);
...
ALTER TABLE usertable_4711_1 ADD COLUMN colX VARCHAR(255);

// inserts and updates go alike
INSERT INTO usertable_4711_1 (col1, col2, col3) VALUES ('data', 'data', 'data')

Se vuoi che i tuoi utenti siano in grado di inserire più metadati (o più complessi vincoli) sulla tabella, puoi anche creare una tabella usertable_userId_counter_meta che contenga i metadati.

Penso che ciò provocherebbe prestazioni migliori di molto rispetto al tentativo di ricreare la cosa con SQL. Se si utilizza un query-builder appropriato, è possibile gestire in modo sicuro le tabelle definite dall'utente.

    
risposta data 24.03.2017 - 10:00
fonte
3

colonne XML

Sto suggerendo questo solo come alternativa - potrebbe o non potrebbe essere la tua migliore opzione. Il server Sql supporta le colonne XML con XPath / XQuery completo sul documento XML.

link

Ciò eviterà la necessità di creare schemi separati / tabelle utente per i dati. Tutte le informazioni possono essere contenute in una colonna. Basta serializzare la tabella dell'utente in XML per inserire e deserializzare per visualizzare.

Solo un'idea ...

    
risposta data 24.03.2017 - 17:01
fonte
0

Se vuoi 3 tabelle, puoi farlo in questo modo:

tabelle - table_id, name, created_at, updated_at

righe - row_id, table_id, row_type, row_pos, created_at, updated_at

colonne - column_id, table_id, row_id, column_pos, column_val, created_at, updated_at

row_type perché una riga può anche avere intestazioni di tabella. Puoi impostarlo enum per indicare che è header o data .

Modo alternativo e migliore:

Tables tabella

| TableID | TableName | Righe | Colls |

TableData tabella

| TableDataId | TableID | Riga | Colonna | Dettagli |

    
risposta data 21.02.2017 - 22:55
fonte
0

Tabella TableID, Nome

Colonna ID colonna (chiave primaria), TableID (chiave esterna), Posizione, Nome, DataType, Unique (booleano). La combinazione {TableID, Position} deve essere unica.

Dati ColumnID, RowID, Value. La combinazione {ColumnID, RowID} deve essere unica.

    
risposta data 22.02.2017 - 01:35
fonte

Leggi altre domande sui tag