Salvataggio di set nei campi del database [duplicato]

-1

Sto lavorando a un progetto (con Python, SQL, Javascript) dove i devlopers prima di me hanno iniziato a salvare i set nei campi del database.

Esempio

Quiilcampo"pubblico" può avere degli insiemi come contenuto. E 'davvero un'idea valida e funzionante? Mi chiedo perché mi è stato insegnato a non salvare mai le liste in un campo in un database e mi è stato insegnato a usare le tabelle di connessione invece di liste / insiemi.

    
posta Niklas Rosencrantz 06.11.2017 - 13:36
fonte

1 risposta

3

Questo non è un approccio affidabile e sicuro. Ecco alcuni motivi per cui:

  • lo stesso elemento set può essere inserito più volte nello stesso campo,
  • è difficile verificare che ciascun elemento del set sia valido,
  • sei limitato dalla lunghezza massima del campo
  • trovare le righe con un dato elemento è più lento, perché è necessario utilizzare una ricerca con caratteri jolly, impedire l'uso di indici e forzare il DBMS a passare attraverso tutte le righe
  • se gli oggetti hanno una lunghezza variabile per cercare l'elemento XXX con caratteri jolly potrebbero anche ricevere falsi positivi come l'elemento XXXYYY
  • l'ordine degli articoli nel campo non è controllato, quindi è difficile trovare righe con diversi elementi specifici (perché se si cerca una riga con 3 elementi potrebbero essere memorizzati nell'ordine A, B, C o C, B , A o B, C, A o C, A, B o B, A, C o B, C, A o A, C, B o richiedono 6 query con caratteri jolly intorno agli elementi cercati o 3 query indipendenti e quindi cercando le righe che appaiono nelle tre query)
  • è molto difficile creare query più complesse utilizzando gli elementi impostati (è possibile, ma è un sacco di codice creato a mano e accesso non ottimizzato).

Dall'altro lato, è un approccio facile, veloce e sporco, che potrebbe essere accettabile se gli elementi dell'insieme sono puramente descrittivi e sono solo marginali.

Il modo relazionale di fare ciò sarebbe avere una tabella distinta per rappresentare l'insieme, quindi per un record che ha un ID specifico come chiave primaria, si inserirà la tabella dell'insieme, per ciascuno degli elementi dell'insieme rilevanti un nuovo fila con lo stesso ID specifico e l'elemento impostato.

    
risposta data 07.11.2017 - 00:16
fonte

Leggi altre domande sui tag