|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Sotto il fuoco incrociato degli xeno
Messaggi: 1095
|
[SQL] Relazioni (2,N)
Salve a tutti.
Sto realizzando un db su una ditta di autotrasporti e ho un dubbio su una relazione fra due entita'. La prima entita' e' LINEA (con codice identificativo id_linea) e la seconda e' FERMATA (con codice identificativo id_fermata). Ora entrambe sono associate ad una relazione COMPOSTA che vede dalla parte di FERMATA una cardinalita' (1,N), mentre dalla parte di LINEA una cardinalita' (2,N). Questo perche' una LINEA dev'essere composta da almeno due fermate (quella d'inizio e quella di arrivo ed eventualmente da delle fermate intermedie). Ora il mio schema logico e' il seguente: LINEA(id_linea,...) FERMATA(id_fermata,...) COMPOSTA(linea, fermata, progressivo). Con vincolo referenziale (fermata->id_fermata) (linea->id_linea) e fin qui non ci piove. Il problema e': quando creo fisicamente le tabelle in sql come faccio con un CONSTRAINT a vincolare il fatto che se non esistono almento due tuple di (linea,fermata,progressivo) con la stessa linea allora quella linea non puo' essere usata come dato? Grazie in aticipo e spero di essere stato chiaro |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: May 2010
Città: fuffahh!!11! land
Messaggi: 10775
|
Quote:
__________________
HwPartialDwnGrade |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2007
Città: Milano
Messaggi: 7103
|
Un database che contiene informazioni organizzate in tabelle e lette secondo relazioni stabilite a propri.
Inviato dal mio HUAWEI U8825-1 con Tapatalk 2
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally + Legion Go |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Sotto il fuoco incrociato degli xeno
Messaggi: 1095
|
Hey mattxx88, non ti preoccupare, siamo qui tutti per imparare e confrontarci, inoltre anch'io sono alle prime armi. Per farti un idea di cosa sia un db ti mando alla risposta di The_ouroboros.
Posso farti un esempio semplice: Ammettiamo, come dici, di avere una ditta di autotrasporti. Per esempio dei camion che portano materiale in vari posti e vorresti tenerne traccia. L'idea più banale sarebbe quella di scrivere Camion1 ha fatto queste fermate alle ore in data ecc.... L'idea di una base di dati (data base, db o come vuoi chiamarlo) e' quella, appunto, di realizzare informazioni organizzate. Quindi potresti modellare l'idea un po' cosi': Una entità CAMION con attributi (Id_camion, Nome, ...) dove ... sono altri campi che vuoi specificare. Questa e' una realizzazione concettuale, quindi ancora tutto su carta, ma sai bene che alla fine avrai una tabella CAMION che avrà come colonne gli attributi e come righe le tuple che vuoi inserire, per esempio (1,Volvo 155,...) e conterra' tutti i tipi di camion che vuoi monitorare (L'id_camion e' la chiave primaria, un indice identificativo che distingue ogni tupla dalle altre, non e' possibile avere ridondanza dei dati, in questo caso e' l'indice 1). Bene ora definiamo l'entita' DESTINAZIONE con attributi (id_destinazione, Indirizzo, ...) e' questa rappresenta la tabella contentente tutte le destinazioni che i miei camion possono percorrere. Ora puoi associare le due entita' attraverso un'associazione; la domanda che devi farti e': Un camion in quante destinazioni può andare? N, e al minimo? Boh, zero o una? Beh diciamo zero se vuoi tenere traccia anche dei camion che stanno fermi a casuccia e uno se invece devono per forza andare da qualche parte. Stessa cosa dalla parte opposta: Data una destinazione, quanti camion possono arrivarci? N, e al minimo? Boh, zero o uno? Se e' zero significa che vuoi mantere anche quelle destinazioni che magari ti sei recato con un camion, ma ora non ci vai piu'. Uno, invece, se necessariamente hai una destinazione comperta da almeno un camion. Ammettiamo sia (1,N) da entrambe le parti, questo significa che avrai un altra tabella PERCORRE con attributi (camion, destinazione,data,ora....) dove camion e destinazione data e ora sono chiavi primarie univoche di questa tabella e camion e destinazione fanno rifermento alle tabelle CAMION e DESTINAZIONE. (tiene traccia degli spostamenti). Bene dopo tutta questo papiro, molto probabilmente avrai gia' finito di scrivere su carta tutti gli spostamenti senza che ti serva un db, ma viene adesso il bello. Un data base, mette a disposizione una serie di interrogazioni. Vorrei sapere per esempio che spostamenti ha fatto il mio camion. Non entrerò in dettaglio, ti dirò solo che con una manciata di milli secondi il tuo computer potrà darti quella lista senza bisogno che tu debba scrivertela a mano. Un po' come quando vuoi vedere l'elenco degli orari del trano, fa tutto lui con la giusta domanda. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2006
Città: Sotto il fuoco incrociato degli xeno
Messaggi: 1095
|
Il mio problema riformulato con camion e' il seguente: E se il camion dev andare per forza in ameno due destinazioni (2,N). Come faccio a vincolarlo in SQL?
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2010
Città: fuffahh!!11! land
Messaggi: 10775
|
ah ok, però bisogna vedere che parco macchine deve gestire sta cosa (io con 50 mezzi a memoria ancora me la cavo) e poi, il camion fa sempre le solite fermate?
forse non ho capito bene che tipo di lavoro fate voi, ma io i miei per tenerli d'occhio ho dei sistemi gps con integrato un sistema "report" so in una determinata data dove è stato, che ordini ha avuto (perche gli mandiamo gli ordini tramite un display installato nel mezzo), che fermate e per quanto tempo è stato fermo ecc ecc. sto data base che vuoi fare non riesco a capire se si basa su eventi passati, o eventuali (futuri)
__________________
HwPartialDwnGrade |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2006
Città: Sotto il fuoco incrociato degli xeno
Messaggi: 1095
|
Quote:
PS: L'esempio della ditta autotrasporti e solo uno dei tanti. Prendi per esempio un negozio di prodotti alimentari. Vorresti tenere traccia dei prezzi dei prodotti, della quantità in magazzino di un prodotto oppure quanti pezzi di un prodotto sono stati comprati in un determinato giorno. Le possibilità sono infinite, ma con un buon db modellato, puoi tener traccia di tutto e di più. Per fare bilanci, statistiche ecc.. Ultima modifica di LumberJack : 07-12-2012 alle 14:18. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2010
Città: fuffahh!!11! land
Messaggi: 10775
|
Quote:
ad ogni modo, molto interessante come cosa, hai un bel lavoro da fare a posteriori cmq! mi sono sempre chiesto se qui dentro qualcuno facesse un lavoro come il mio
__________________
HwPartialDwnGrade |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Di solito queste logiche sono lato applicazione, oppure puoi usare una stored procedure.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2006
Città: Sotto il fuoco incrociato degli xeno
Messaggi: 1095
|
Quote:
|
|
|
|
|
|
|
#11 | |
|
Member
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
|
Quote:
Quello che puoi fare è scorporare la relazione "Composta" in tre relazioni, tutte con cardinalità 1,N dal lato dell'entità "Fermata": relazione "Capolinea A" con cardinalità 1,1 dal lato dell'entità "Linea" relazione "Capolinea B" con cardinalità 1,1 dal lato dell'entità "Linea" relazione "Fermate intermedie" con cardinalità 0,N dal lato dell'entità "Linea" ciao! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:04.



















