Una tabella per ogni tipo di campo o un modello di tabella all-in-one?

1

Sto creando un'applicazione in cui gli utenti possono creare moduli con molti campi di testo, numerici, data e tipi di selezione.

  1. Il modello avrà una tabella forms a cui fa riferimento la tabella responses ;
  2. Ha anche la tabella fields con 'name', 'field_type' - punta anche a forms ;
  3. I dati riempiti punteranno a responses e a fields , ma come dovrei modellarlo:

    • Una tabella per ogni field_type? (tabelle: text_fill, num_fill, date_fill, sel_fill); o
    • Una tabella solo con una colonna per ogni field_type in cui solo uno sarà riempito su ogni record?

Il mio dubbio riguarda le prestazioni, l'utilizzo del disco e gli standard del settore. Qualcuno può chiarirmi con i dati?

Nota 1: Questo non è un duplicato di Creazione di un creatore di database online perché quella domanda riguarda un creatore di database generico e questa domanda riguarda il creatore del modulo, che è limitato a un modello di database esistente, che verrà espanso da quei forms , quelli delimitati o da un singolo utente o da un servizio che utilizza questo database. Inoltre la risposta a questa domanda non risponde alla mia.

    
posta Please_Dont_Bully_Me_SO_Lords 02.12.2018 - 19:21
fonte

1 risposta

2

Dipende da:

  • le ottimizzazioni interne generate dal motore del database.
  • la dimensione relativa, l'indicizzazione, il clustering e lo sharding delle tue tabelle.
  • la potenza del server che hai.
  • quale normalizzazione dei dati viene utilizzata.
  • modelli di utilizzo.

Il tuo attuale design è ben scomposto e sembra avere una bassa impedenza tra il modello di oggetti delle applicazioni e il modo in cui è memorizzato. A seconda della dimensione relativa della tua chiave per il carico utile, la tua efficienza di memorizzazione (in termini di spazio) varierà ma tenderà a essere meno efficiente. In fase di elaborazione, le operazioni orientate sul campo saranno semplici (e molto probabilmente veloci), tuttavia l'elaborazione a livello di astrazione superiore (a livello di modulo o livello di sondaggio) sarà molto più difficile e probabilmente più lenta.

Se invece produci tabelle normalizzate specifiche per moduli, la tua efficienza spaziale migliorerà, e quindi funzionerà a livello di modulo / sondaggio. Tuttavia, renderà il lavoro a livello di campo più difficile e probabilmente più lento.

Ovviamente puoi usare entrambe le tecniche. Ciò ti fornirà entrambe le serie di vantaggi al costo di una maggiore complessità e della necessità di mantenere la parità tra entrambi i gruppi di dati.

Quindi la vera domanda è, cosa è più importante per il successo della tua applicazione? Inoltre, sei che ottimizza prematuramente ?

    
risposta data 03.12.2018 - 03:14
fonte

Leggi altre domande sui tag