Miglior prodotto con più tabelle con categorie

2

Stavo cercando di creare una struttura EAV per un sistema di gestione delle scorte. Ma ho letto questa risposta e ho deciso di non farlo. Sto cercando di creare più tabelle per tutti i miei prodotti. Ma ora il problema è che tutti i prodotti avranno categorie e sottocategorie (solo due livelli). Come posso creare tabelle per riflettere le categorie dei prodotti. Creo tabelle per ogni categoria e sottocategoria. Le categorie e le sottocategorie devono essere ricercabili.

Ad esempio Avrò un product table

Product:
str:name
str:description

una tabella di pastella per contenere le informazioni della batteria

Battery:
str:volt
str:size
fr:product_id

Doll:
str:material
str:stuffing
fr:product_id

Ma come gestisco il caso quando la bambola e la batteria hanno categorie e sottocategorie? Anche le sottocategorie e le sottocategorie devono essere riconducibili al particolare prodotto durante l'aggiunta di un prodotto.

Creo doll_categories , doll_sub_categories , battery_categories , battery_categories ? Mi sento come se i prodotti venissero aggiunti. Ogni prodotto dovrebbe avere 3 tabelle e potrebbe crescere fino a un sacco di tavoli.

Qual è il modo migliore per gestire questa situazione?

    
posta developernaren 20.11.2015 - 13:51
fonte

1 risposta

1

Per prima cosa, non sono sicuro di essere d'accordo con la scelta di una tabella per tipo di prodotto. Non sto dicendo che è sbagliato, ma ... Potrebbe causare un sacco di dolore lungo la strada. È uno schema fragile. Tu sai meglio. Riposati e pensaci un po 'di più.

Per quanto riguarda la categoria - > sottocategoria, il piano di attacco più semplice è probabilmente due tabelle con una tabella delle relazioni che collega un prodotto. Usando la tua convenzione:

Category:
int: id
str: name

SubCategory:
int: id
str: name
fk: Category_id

ProductSubCategory:
fk: product_id
fk: SubCategory_id

Quindi, una categoria potrebbe essere un computer. Le sottocategorie sono ultrabook, workstation e tablet. Un prodotto potrebbe essere un tablet Samsung. Assegna detto prodotto alla sottocategoria "compresse" tramite la tabella delle relazioni. Da ciò, puoi determinare che è anche un "computer".

Se sei pigro e sei sicuro al 100% che lo schema non cambierà, puoi semplicemente rilasciare SubCategory_id direttamente su un prodotto. Non è richiesta alcuna tabella delle relazioni. Ciò significa che puoi sempre avere solo una sottocategoria. Non sono sicuro che sia quello che vuoi.

In un altro universo, considera una tabella di categoria autoreferenziale. Ciò consente qualsiasi numero di livelli di sottocategoria:

Category:
int: id
str: name
fk: Category_id (null if top level)

I dati:

id: 1, name: "Computers", Category_id: null
id: 2, name: "Laptops", Category_id: 1
id: 3, name: "Tablets", Category_id: 1
id: 4, name: "Ultrabooks", Category_id: 2
id: 5, name: "Chromebooks", Category_id: 2

Se i prodotti possono trovarsi in più sottocategorie di livello inferiore, utilizzare una tabella delle relazioni. Altrimenti, basta rilasciare l'id sulla tabella del prodotto. Facile spremitura.

    
risposta data 21.11.2015 - 06:34
fonte

Leggi altre domande sui tag