Ho lavorato su un sistema che ha implementato un carrello della spesa esattamente in questo modo: i carrelli della spesa "in corso" sono stati serializzati in XML e memorizzati in un singolo campo in una singola tabella nel database.
Il motivo per farlo non è tanto la prestazione quanto la facilità di sviluppo. Sospetto che, una volta, i carrelli della spesa siano stati archiviati solo in stato di sessione, quindi se si è allontanati dal sito e restituiti un'ora dopo, non ci sarebbero più. Sospetto che quando è arrivata una richiesta per farli persistere nei confronti di un utente, il modo più rapido per farlo era semplicemente decorare le varie classi coinvolte con gli attributi di serializzazione XML, serializzare, memorizzare.
Il trabocchetto a cui prestare attenzione è che ciò renderà difficile fare molto con i dati diversi dall'archiviazione e dal recupero dei carrelli degli utenti. Ad esempio, se un determinato prodotto viene rimosso dal catalogo, è possibile rimuoverlo da qualsiasi carrello. Se i tuoi carri temporanei fossero stati archiviati come un mucchio di tabelle, li avresti trovati semplicemente con qualcosa come SELECT * FROM ShoppingCartItems WHERE ProductID=@productIdToDelete
. Se è tutto in blob XML, non sarà semplice e potresti trovare un approccio migliore per convalidare nuovamente tutti i carrelli quando vengono richiamati dal DB e deserializzati.