|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Messaggi: n/a
|
[DB] normalizzazione
Ciao a tutti,
cerco di spiegarmi al meglio su una situazione di normalizzazione DB che vorrei chiarire. In pratica ho un sito che si occupa di pubblicare inserzioni relative a macchine da cucire industriali e non, usate e non. In questo contesto abbiamo: Inserzionisti => utenti (aziende) che si registrano per poter pubblicare le loro inserzioni. Generalmente si tratta di piccole aziende (concerie, stirerie, ecc.) del settore che cercano di "piazzare" il loro usato. Marche => sono i nomi dei produttori dei modelli di macchinari che sono presenti nelle inserzioni, come se avessi l'inserzione di una Punto 1.2 del '98, la marca ovviamente è FIAT. Fin qui direi tutto senza problemi se non fosse che volendo una marca (FIAT) potrebbe essere anche inserzionista (raro), oppure ancora un'entità generica AZIENDA che, sul sito, può beneficiare di alcuni spazi sponsor per avere visibilità. In pratica potremmo riassumere che esistono delle generiche entità AZIENDE (che sono i clienti del sito) che possono essere 1 o + delle situazioni qui sotto: - Inserzionisti - Marche - Aziende "in evidenza" (spazio pubblicitario Il punto è che dati generici come: nome azienda, tel., fax, sito, indirizzo ecc. potrebbero riguardare i dati di registrazione di un inserzionista. Oppure ancora i dati delle aziende "segnalate" tra gli spazi pubblicitari. Sperando di aver dato un'idea sufficiente, vi chiedo, mi conviene: Creare un'unica tabella AZIENDA che contempli - tutti i dati di registrazione dell'inserzionista - un flag che mi indichi se lo stesso inserzionista è anche un'azienda "segnalata" o meno - un flag che mi indichi che lo stesso inserzionista è una MARCA o meno oppure separare le 3 cose in tabelle diverse? Generalmente un INSERZIONISTA è un piccolo privato che pubblica ciò che vuole vendere ed è diverso dalle MARCHE (Produttori), tuttavia la possibilità che un soggetto "AZIENDA" possa essere contemporaneamente diverse entità mi lascia il dubbio su come procedere Sapreste consigliarmi? Grazie in anticipo. |
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ti fai una tabella chiamata Anagrafica che contiene i riferimenti a tutte le aziende. Usi l'id della tabella Anagrafica come chiave esterna delle altre tabelle.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Se la cosa non ti soddisfa puoi valutare il pattern di specializzazione. Una tabella di entita' Azienda generica, con tutti i dati principali comuni alle 3 entita'. 3 tabelle in relazione 1:1 con la tabella azienda, con la stessa chiave primaria di azienda, ciascuna con i dati supplementari privati di ciascuna entita' (Es: gli inserzionisti potrebbero avere il numero di telefono di riferiemento per l'inserzione, le aziende per insersione pubblicitaria potrebbero avere dati relativi alle Pubbliche relazioni). Il record in una delle tabelle di specializzazione avra' lo stesso identico valore di chiave primaria dell'analogo record (sicuramente esistente) della tabella generica Il fatto che un'azienda sia di un tipo o di un altro (o di entrambi o di tutti) e' dato dall'esistenza o meno del record nella specifica sotto-tabella di specializzazione. Le foreign key puntano tipicamente alle tabelle di specializzazione e non alla tabella generale delle aziende. Questo e' il pattern tipicamente usato quando si vuole modellare il comportamento dell' Inheritance dei linguaggi ad oggetti nei database per la memorizzazione permanente della base dati.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 09-02-2009 alle 20:57. |
|
|
|
|
|
|
#4 |
|
Messaggi: n/a
|
Perfetto era proprio quello che mi era venuto in mente stamattina mentre ci pensavo sotto la doccia.
Non ricordavo più il concetto di tabelle di specializzazione Grazie ancora. Ultima modifica di anonimizzato : 10-02-2009 alle 10:19. |
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:19.




















