Newsgroup: it.comp.www.php
Titolo: [OT] Relazioni 'a molti' - Strutture SQL

Premessa:
Esistono aziende dette Clienti
Per ogni azienda è probabile avere contatti con più persone, dette Contatti,
con le quali si avranno relazioni durante lo studio/realizzazioni di
servizi/progetti
Per ogni Cliente è possibile realizzare più progetti/servizi detti Progetti
Per ogni Progetto sono associati programmatori/grafici/esecutori detti Staff
Ogni Progetto è costituito da Elementi costitutivi alla realizzazione del
progetto detti Elementi
Ogni Elemento è a sua volta costituito da gradi di completamento successivi,
fino alla conclusione di ogni Elemento, detti Step
Funzionamento:
Acquisito un nuovo Cliente, si definisce per esso il/i possibile Contatto.
Per il Cliente viene studiato il Progetto, assegnato ad un insieme di
progettisti facenti parte dello Staff
Il Progetto viene suddiviso in Elementi costitutivi, realizzati dai
progettisti (un progettista può realizzare più elementi costituitivi)
Ogni elemento costitutivo è a sua volta suddiviso in step successivi che
tengono traccia del grado di completamento dell'Elemento costitutivo
Completato ogni elemento costitutivo il progetto viene chiuso.
Tra i progetti costitutivi esiste sempre un Elemento costitutivo detto "di
quadratura" che assicura la completezza ed omogeneità del progetto.
Terminato il progetto esso viene fatturato.
Come realizzereste la struttura logica di un database di questo tipo ?
(vedere sotto le tabelle "tipo" base per
Clienti,Contatti,Progetti,Elementi,Step,Staff)
PS: Vedere sotto per le mie idee
Informazioni base tabelle:
Clienti
------
Ragione sociale
P.Iva
...
Contatti
--------
Cognome
Nome
Telefono
....
Progetto
---------
Nome del progetto
Descrizione
Scopo
...
Elemento
---------
Descrizione
Scopo
Step
-----
Descrizione
Scopo
Eventuali file costituenti lo step (campo testo)
Staff
-----
Cognome
Nome
Email
Interno telefonico
Postazione (indirizzo IP di intranet)
Le mie idee:
Dovendo collegare ad ogni cliente più contatti, in una tabella Contatti
definirei una colonna chiamata "appartiene a Cliente" che assumerebbe il
valore della chiave primaria del cliente di appartenenza.
Access consiglia però la creazione di una "terza" tabella di servizio per
creare la relazione "molti-a-molti" tra Clienti i loro Contatti in modo da
poter associare in una unica schermata tutti i clienti ed i loro specifici
contatti.
Questo potrebbe essere fatto per ogni relazione del database discusso in
alto. Io personalmente preferisco inserire la relazione direttamente nella
tabella.
La differenza è che utilizzando la mia tecnica, se voglio associare, per
esempio, più programmatori allo stesso Elemento di Progetto, dovrei creare
più elementi di progetto identici con specificato una chiave primaria
relativa allo staff oppure creare un "set" limitando il numero di
progettisti a 30 elementi.
Per qualunque chiarimento sono qui :-)
Aspetto consigli, idee, suggerimenti e nuove idee di strutture
J

Ciao, non capisco perchč hai una avversione verso l'introduzione di
altre tabelle.	Le relazioni molti a molti si risolvono SEMPRE con
l'introduzione di una terza tabella che contiene le chiavi delle 2 che
sono relazionate (magari con qualche altro campo per esempio nel tuo
caso la data del contatto).  Quando parli di una colonna su contatti che
contiene la chiave di cliente ("appartiene a cliente")risolvi una
relazione zero a molti non una a molti.  Consiglio: usa nomi tutti al
singolare o al plurale per le tabelle (in genere i testi consigliano di
usare il singolare ).