Come modellare una risorsa ordinabile nel database sql? [chiuso]

3

Ho riscontrato questo problema durante la creazione dell'API REST.

Non posso dire lo scenario esatto, ma diciamo che è per un sito web che ha categoria e prodotto risorse.

Ogni categoria ha molti prodotti ed entrambi categoria e prodotto sono ordinati.
Originariamente aggiungo un attributo intero incrementale order alle risorse in modo che entrambe le collezioni possano essere visualizzate nell'ordine corretto.

Il problema con il mio approccio originale è quando l'utente trascina e rilascia un prodotto , molti altri attributi di prodotto ordine devono essere cambiato. (Quando si sposta il decimo prodotto nel primo posto 10 gli attributi ordine devono essere aggiornati) Questo è terribile per l'API REST e il database stesso.

C'è un modo per creare un attributo per ordinare prodotto (o modellare la collezione con un altro approccio) in modo che l'ordine di trascinamento e rilascio possa essere eseguito con una risorsa singola (o pochi in modo scalabile) oggetti cambiati?

La risposta alla domanda sopra senza altre condizioni è buona, ma sarebbe bello se funzionasse anche quando l'utente trascina prodotto da una categoria e lo rilascia in un'altra categoria .

    
posta Curious Sam 21.11.2015 - 17:33
fonte

2 risposte

3

Per evitare aggiornamenti su più righe, non memorizzare l'indice esatto nel database. Invece, memorizzare un valore che viene utilizzato solo per l'ordinamento. Quando si riordina l'ordine, fornire all'oggetto inserito un valore a metà tra gli articoli precedenti e successivi. L'utilizzo di un valore in virgola mobile ti offrirà un sacco di "spazi vuoti" tra gli elementi.

Ad esempio, dati tre articoli (A, B, C) valutati 1.0, 2.0 e 3.0. L'utente cambia il terzo elemento (C) per essere il secondo. Aggiorna il valore di ordinamento di C tra A e B, risultando in A, C, B con valore 1.0, 1.5, 2.0, rispettivamente.

Il compromesso qui è che l'indice deve essere calcolato dall'intera lista. Guardando solo un singolo elemento, il valore non ti dice nulla sulla posizione di quell'elemento nell'elenco.

    
risposta data 21.11.2015 - 18:40
fonte
0

Innanzitutto, le risorse prodotto e categoria a cui è possibile accedere / visualizzare tramite l'API REST non devono eseguire il mirroring delle tabelle del database. In particolare, l'ordine dei prodotti non è una proprietà di una singola risorsa prodotto , ma sull'API REST dovrebbe essere una proprietà della raccolta di prodotto s . Ciò significa che dovrebbe richiedere solo una singola chiamata API per modificare l'ordine dei prodotti.

Nel tuo database, puoi quindi utilizzare una colonna di indice di array o una colonna che contiene un collegamento al prodotto successivo. Poiché questo dettaglio di implementazione non è esposto sull'API, puoi anche cambiare idea in un secondo momento e modificare il modo in cui l'ordine viene archiviato nel database senza influenzare i tuoi clienti.

    
risposta data 21.11.2015 - 19:07
fonte

Leggi altre domande sui tag