Per la tabella del carrello ti consiglio di mantenere:
1) ID_SESSIONE (visto che il carrello potrebbe appartenere ad un cliente non registrato)
2) ID_CARRELLO
3) ID_PRODOTTO
4) QUANTITA
5) PREZZO
6) DATA
anche se io sarei più propenso ad utilizzare un sistema che gestisca con la stessa tabella i carrelli e gli ordini ed usare un'altra tabella per avere il dettaglio dei prodotti associati ad un carrello, una cosa di questo tipo:
codice:
CREATE TABLE carrello (
id_carrello,
id_sessione,
codice_fiscale,
data,
ordine,
stato
);
CREATE TABLE prodotto_carrello (
id_carrello,
id_prodotto,
quantita,
prezzo
);
Dove gli attributi "ordine" e "stato" della tabella carrello servono a:
1) "ordine" se impostato ad 1 indica che è un ordine realmente effettuato, altrimenti è un semplice carrello (da cancellare dopo tot tempo)
2) "stato" serve ad indicare, per gli ordini reali, lo stato in cui si trovano (in attesa di pagamento, in spedizione, evaso, ...)
Credo sia una buona struttura