Domanda

So che le coppie di valore chiave non sono una buona progettazione del database, non sono normalizzate ecc. Tuttavia, in questo caso credo che siano la soluzione più appropriata.

La mia scusa per questo e un po 'di sfondo: Un ampio set di elementi viene spinto in un set di tabelle e ogni articolo può essere taggato con metadati arbitrari che l'utente può scegliere. L'utente può scegliere i metadati perché sta specificando come desiderano classificare, riferire e visualizzare gli elementi in seguito. Per questo specifico problema aziendale non è il nostro posto (come progettisti di sistemi) dire quali sono queste dimensioni. Non esiste una serie coerente di chiavi utilizzate tra gli articoli e in alcuni casi la presenza di una determinata chiave verrà utilizzata come condizione di filtro.

Un altro pezzo di informazioni di base, le voci verranno inserite, ma non aggiornate. Alla fine verranno eliminati (in sequenza, nello stesso ordine in cui sono stati inseriti).

La domanda "Efficienza di archiviazione": Con questo mi riferisco alle prestazioni di query (leggi). Verranno utilizzati i seguenti tipi di query:

  • Ottieni elementi con la chiave data, qualsiasi valore
  • Ottieni elementi con la chiave e il valore indicati
  • Ottieni elementi con tutti i nomi chiave
  • Ottieni elementi con tutti i nomi e i valori chiave

Fondamentalmente, qual è la scelta migliore date queste opzioni?:

OPZIONE 1

Items table:
item_id (integer, pk)
... item fields ...

ItemFacts table:
item_id (integer, fk)
key_name (nvarchar(64))
key_value (nvarchar(128))

OPZIONE 2

Items table:
item_id (integer, pk)
... item fields ...

Facts table:
fact_id (integer, pk)
key_name (nvarchar(64))
key_value (nvarchar(128))

ItemFacts table:
item_id (integer, fk)
fact_id (integer, fk)

(Potrebbe esserci una terza opzione in cui i nomi dei tasti vengono nuovamente estratti su una tabella separata per ridurre la ridondanza poiché potrebbe esserci un sacco di valori usati/possibili per un determinato nome chiave, potrebbe valere la pena considerare)

In parole povere, ci saranno molte corrispondenze chiave/valore duplicato. Pertanto, dovrebbe esserci un aumento dell'efficienza di archiviazione. Mi rendo conto che questa è un po 'una domanda aperta, ma per quanto riguarda le prestazioni di lettura? Che ne dici se introduco anche questa query:?

  • Ottieni elementi in cui il valore per la chiave indicata inizia con "x"

Se posso fornire ulteriori chiarimenti, per favore fatemelo sapere.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top