creazione tabelle

salve

sto progettando un nuovo database, e avrei dei dubbi.

caso semplice: c'è una relazione n a n fra le tabelle A e B; la tabella centrale non ci interessa. una delle due tabelle A o B, dovrebbe racchiudere oggetti con diversi attributi ma che hanno la medesima relazione con l'altra tabella.

Ad esempio, un catalogo di penne, quaderni e matite (hanno attributi diversi e allo stesso tempo hanno medesime relazioni e importanza dentro al db).

come risolvo?

a primo impatto pensai di inserire per ogni oggetto i suoi attributi dentro la tabella, anche non mi sembra granchè come risoluzione...

grazie

inviato 8 anni fa
larchitetto
X 0 X

Penne, quaderni e matite sono tutti prodotti, pertanto avranno caratteristiche condivise. D'altro canto ciascun prodotto ha delle caratteristiche particolari.

Le caratteristiche condivise vanno messe in una tabella "Prodotto", mentre quelle particolari in tante tabelle "Penna", "Quaderno", ecc.

La tabella A sarà legata direttamente alla tabella Prodotto mentre questa sarà legata, di volta in volta, ad una delle tabelle Penna, Quaderno, ecc.

La tabella Prodotto potrà contenere anche un campo "tipo_prodotto" che specifica a quale tabella particolare fa riferimento un record.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

indi "prodotto", in questo caso, avrebbe pk, caratteristiche condivise, fk verso una tabella per completare con caratteristiche particolari ed infine "tipo_prodotto" (indi sarebbe un flag che identifica la tabella), giusto?

così facendo assomiglia molto alla struttura di una super classe o astratta con le relative classi figlie...

grazie

risposto 8 anni fa
larchitetto
X 0 X

le FK partono dalle tabelle Penna", "Quaderno", ecc. e arrivano su "Prodotto"

così facendo assomiglia molto alla struttura di una super classe o astratta con le relative classi figlie...

non è che assomiglia, è esattamente quel modello!

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
le FK partono dalle tabelle Penna", "Quaderno", ecc. e arrivano su "Prodotto"

ehm non ho ben capito...

la relazione sarebbe:

prodotto 1 - n quaderno | penna | etc ?

La tabella Prodotto potrà contenere anche un campo "tipo_prodotto" che specifica a quale tabella particolare fa riferimento un record.

allora non ho ben capito a che serve tipo_prodotto, se è la tabella figlia a mantenere il riferimento alla tabella padre...

grazie

risposto 8 anni fa
larchitetto
X 0 X

la relazione sarebbe:

prodotto 1 - n quaderno | penna | etc ?

si

allora non ho ben capito a che serve tipo_prodotto, se è la tabella figlia a mantenere il riferimento alla tabella padre...

il tipo_prodotto serve alla tabella padre per sapere quale tabella figlia è legata al singolo record

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

bon, penso d'esserci...

grazie

risposto 8 anni fa
larchitetto
X 0 X

ehm, ho ripreso un po' questa situazione e mi son venuti altri dubbi =D

dunque, tornando all'esempio, mi trovo nella situazione che in prodotto comunque elenco tutti i prodotti del catalogo. ad esempio:

insert into prodotto (id, tipologia, prodotto, quantita, prezzo_unario)
(10, penna, biro, 50, 1),
(20, penna, staedtler, 50, 1),
(30, quaderno, pigna, 100, 2),
(40, quaderno, pigna, 100, 2),
...

successivamente mi ritrovo due tabelle (penna e quaderno) definite, ad esempio, così:

insert into penna (id, prodotto, penna, attributi_specifici)
(1, 10, biro nera, attributi),
(2, 20, staedtler rossa, attributi);

insert into quaderno (id, prodotto, quaderno, attributi_specifici)
(1, 30, bloc notes, attributi),
(2, 40, quaderno quadri, attributi);

così facendo, la somma del numero dei record delle tabelle figlie (penna, quaderno) daranno il totale dei record presenti nella tabella padre (prodotto).

io so che se devo lavorare con i prodotti (ma che in quel momento non mi servono gli attributi specifici), posso benissimo chiamare in causa la tabella prodotto, in quanto conterrà tutto l'elenco di tutti i prodotti presenti nel mio magazzino. qualora mi servissero eventuali descrizioni dettagliate, in base a prodotto.tipologia risalirei alla tabella figlia, dopodichè cercherei il valore di prodotto.id in <tabella_figlia>.prodotto.

è altrettanto vero che, potrei sempre avere l'attributo prodotto.tipologia ed avere indi anche un altro campo che referenzi la relativa tabella figlia; la mia ricerca degli attributi specifici indi avverrebbe confrontando prodotto.tipologia e, preso il valore prodotto.id_tabella_figlia, cercando tale valore fra le pk della tabella figlia.

così facendo accadrebbe che nelle tabelle figlie però si perderebbe ogni traccia del prodotto a cui si riferiscono (avrebbero solo gli attributi specifici e la relativa pk), visto che tale informazione viene conservata nella tabella prodotto (e sento puzza di sovracarico di responsabilità per quest'ultima).

che ne dite della mia piccola analisi del problema?

se qualcosa non è chiaro, basta chiedere...

grazie

risposto 8 anni fa
larchitetto
X 0 X

la chiave primaria della tabella "prodotto" è la stessa delle diverse tabelle particolari dei singoli prodotti, quindi ad esempio da prodotto si può raggiungere "penna" e viceversa, usando la stessa chiave primaria.

Quindi non è vero che l tabelle figlie perdono ogni traccia del prodotto a cui fanno riferimento.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
la chiave primaria della tabella "prodotto" è la stessa delle diverse tabelle particolari dei singoli prodotti, quindi ad esempio da prodotto si può raggiungere "penna" e viceversa, usando la stessa chiave primaria.

indi come nell'esempio, in cui nelle tabelle figlie appariva la fk che referenziava la tabella prodotto; cioè al primo caso da me ipotizzato (e quello maggiormente corretto):

io so che se devo lavorare con i prodotti (ma che in quel momento non mi servono gli attributi specifici), posso benissimo chiamare in causa la tabella prodotto, in quanto conterrà tutto l'elenco di tutti i prodotti presenti nel mio magazzino. qualora mi servissero eventuali descrizioni dettagliate, in base a prodotto.tipologia risalirei alla tabella figlia, dopodichè cercherei il valore di prodotto.id in <tabella_figlia>.prodotto.

ciao & grazie

risposto 8 anni fa
larchitetto
modificato 8 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda