Progettazione database per inventario

7

Sto iniziando a progettare un tipico database MySQL basato sul prodotto, ma continuo a girare in cerchio su come progettare le tabelle.

Ho molti tipi di prodotti

  • Jeans
  • magliette
  • Abiti

Che hanno molti degli stessi attributi

  • Dimensioni
  • Prezzo
  • Colore

Ma alcuni prodotti hanno attributi specifici, come lunghezza o logo o pacchetto.

Creo una tabella separata per ogni prodotto anche se molte colonne sono uguali, oppure creo una tabella generale del prodotto e poi ho alcune sottotabelle per prodotti specifici?

    
posta Berry Bonds 3 13.04.2015 - 23:05
fonte

2 risposte

8

Non creare un tavolo per ogni prodotto.

Questo problema è stato risolto in molti modi. Prova questo:

Crea una tabella di prodotti (o prodotti), inserisci i tuoi attributi di prodotto comuni nella tabella del prodotto, quindi crea una tabella di attributi e una tabella di attributi del prodotto, ad esempio:

attribute
---------
attributeId
attributeName
attributeDescription


productattribute
----------------
productId
attributeId
attributeValue

Quindi puoi assegnare attributi arbitrari ai tuoi prodotti.

Puoi prendere lo schema un po 'di più, se lo desideri, usando:

attribute
---------
attributeId
attributeName
attributeDescription
attributeType // [float, int, varchar, etc.]


productAttribute
----------------
productId
attributeId
attributeValueFloat
attributeValueInt
attributeValueVarChar

Questa tecnica complica un po 'lo schema, quindi tieni conto di cosa ti stai immettendo se decidi di utilizzare le colonne aggiuntive per memorizzare i valori in base al tipo di dati.

Un'alternativa che potrebbe soddisfare le tue esigenze un po 'meglio sarebbe utilizzare un negozio NoSQL come MongoDB per i tuoi prodotti. Quindi è possibile memorizzare gli attributi necessari per ogni tipo di prodotto senza ricorrere alla complessità di uno schema di database relazionale.

    
risposta data 14.04.2015 - 05:05
fonte
1

Un approccio sarebbe quello di progettare il tuo database in modo simile a come definiresti una gerarchia di classi, dove definisci le tabelle di base (classi) che forniscono gli attributi comuni, e poi aggiungi tabelle aggiuntive che forniscono attributi specifici da estendere la tabella per i prodotti specifici.

Definisci una tabella di prodotti di base

create table Products_base as
    id
    item
    brand
    model
    description
    size
    color
    price #more about this later

Definisci tabelle aggiuntive per prodotti che differiscono sostanzialmente

create table pants as
    base #foreign key to base product
    waist
    length
    material
    style

create table dress as
    base #foreign key to base product table
    waist
    hemlength
    bust
    material
    belt

Un altro approccio sarebbe definire la tabella del prodotto di base, quindi definire una tabella di attributi e fornire gli attributi per ciascun prodotto aggiuntivo,

create table Products_base as
    id autoincrement
    item
    brand
    model
    description
    size
    color
    price #more about this later

create table attributes as
    id autoincrement
    name
    description

create table product_+attributes as
    product_id #product.id
    attribute_id #attributes.id
    value

Usando i pantaloni come esempio, vorresti aggiungere attributi ai pantaloni (aggiungi alla tabella degli attributi)

"length", "length of item"
"inseam", "length of inseam"
"style", "style of article" #example, "jeans"
#etc

E poi dovresti aggiungere valori per gli attributi

product.id("pants"), attribute.id("inseam"), "32in"
product.id("pants"), attribute.id("waist"), "34in"
product.id("pants"), attribute.id("style"), "jeans"
product.id("dress"), attribute.id("style"), "sundress"
#etc
    
risposta data 14.04.2015 - 21:02
fonte

Leggi altre domande sui tag