Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-11-2015, 11:59   #1
_Mara_
Junior Member
 
Iscritto dal: Apr 2015
Messaggi: 15
Struttura database: dubbio su relazioni

Buongiorno a tutti,
ho 2 tabelle: 'Manager' e 'Agenti' (ciascuno di questi fa riferimento a un determinato manager) legate nel modo seguente:
SELECT * FROM Agenti INNER JOIN Manager ON Agenti.fk_manager = Manager.pk_manager
Struttura
[Manager]
id_manager
(...)

[Agenti]
id_agente
fk_manager
(...)

Ora devo tenere conto anche delle vendite di ciascuno di loro quindi pensavo 2 possibili strade:
Aggiungo nelle rispettive tabelle un campo 'numero_vendite' (datatype: int)
oppure
creo tabella 'Vendite' dove inserirò campo numerico e un generico campo persona dove inserisco id_manager o fk_agente?

Ultimo dubbio: nel primo caso se mi chiedesseo uno storico degli aggiornamenti del numero vendite come potrei fare?

Grazie
Mara
_Mara_ è offline   Rispondi citando il messaggio o parte di esso
Old 09-11-2015, 15:31   #2
-MiStO-
Senior Member
 
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2287
ho qualche dubbio: le vendite le fanno solo gli agenti o anche i manager?
perchè vedo che vorresti inserire nell ipotetica tabella vendite o l'id dell'agente o quello del manager...

num. vendite concettualmente non è un attributo di agente quindi per me è sbagliato modellarlo all interno della tabella agente

in ogni caso, a mio modo di vedere la soluzione piu pulita è fare una tabella vendite separata, contenente tutti i dati relativi alla singola vendita, tra cui suppongo importo e data (fondamentale per poter pensare ad uno storico) e con chiave esterna l'id dell'agente che l'ha effettuata.

lo storico in questo modo ti viene "gratis": query su vendite per data e via felice

sul tuo dubbio: devi per forza avere una data a cui fare riferimento per avere uno storico, quindi agente dovrebbe avere due nuovi campi ad esempio "num vendite" e "anno vendite"(o mese/anno a seconda del dettaglio che ti serve), ma francamente lo trovo brutto perchè duplicheresti gli agenti per ogni nuova entry di vendita (num vendite, data)
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante...


Ultima modifica di -MiStO- : 09-11-2015 alle 15:36.
-MiStO- è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2015, 09:46   #3
_Mara_
Junior Member
 
Iscritto dal: Apr 2015
Messaggi: 15
Quote:
Originariamente inviato da -MiStO- Guarda i messaggi
ho qualche dubbio: le vendite le fanno solo gli agenti o anche i manager?
perchè vedo che vorresti inserire nell ipotetica tabella vendite o l'id dell'agente o quello del manager...
Esatto, sia manager che agenti fanno N vendite per cui devo tenere traccia dei valori.
Infatti pensavo alla tabella 'Vendite' dove in un generico campo 'id_persona' inserisco id_venditore oppure fk_agente con i suoi attributi.

Non l'avevo scritto ma avevo pensato al discorso data per poi gestire lo storico... grazie del suggerimento :-)

Grazie
Mara
_Mara_ è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2015, 11:19   #4
_Mara_
Junior Member
 
Iscritto dal: Apr 2015
Messaggi: 15
Quote:
Originariamente inviato da -MiStO- Guarda i messaggi

in ogni caso, a mio modo di vedere la soluzione piu pulita è fare una tabella vendite separata, contenente tutti i dati relativi alla singola vendita, tra cui suppongo importo e data (fondamentale per poter pensare ad uno storico) e con chiave esterna l'id dell'agente che l'ha effettuata.
Ho un dubbio nella realizzazione:
tab. 'Vendite' (con dati di esempio)
IDvendite | IDpersona |
1 | 1 -- ID di un manager |
2 | 2 -- ID di un agente |
.. | ..
Come faccio a discriminare se l'ID nel campo IDpersona si riferisce a manager o agente?
Lavoro con SQL Server e studio management come tool per creare relazioni e query.

Graficamente posso utilizzare tabella 'Vendite' 2 volte dovendola mettere in relazione sia con id_manager e id_agente?
In pratica: creo 1^ relazione 'Vendite'/'Manager' e poi 2^ relazione 'Vendite_1'/'Agenti': è un'operazione lecita?

Grazie!
Mara
_Mara_ è offline   Rispondi citando il messaggio o parte di esso
Old 10-11-2015, 17:13   #5
cdtux
Member
 
L'Avatar di cdtux
 
Iscritto dal: Nov 2015
Messaggi: 67
In una situazione del genere, ho risolto inserendo un campo TIPO nella tabella utente (assegnando ad es. 0 per il manager e 1 per l'agente) per distinguere le varie tipologie.

Non so se è la soluzione migliore, comunque nel mio caso ha funzionato perfettamente.
cdtux è offline   Rispondi citando il messaggio o parte di esso
Old 11-11-2015, 12:44   #6
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
La soluzione è la normalizzazione: crei una tabella "anagrafica" nella quale inserisci tutte le persone indipendentemente dal loro ruolo, in questo modo la tabella vendite potrà referenziare indifferentemente i manager e gli agenti. Per distinguere il ruolo delle persone puoi utilizzare un semplice campo enum nella tabella anagrafica; se i due ruoli necessitano di campi distinti non usare il campo enum, crea invece due tabelle - agenti e manager - con i soli campi differenziati e vi inserisci una relazione con l'anagrafica.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2015, 09:47   #7
-MiStO-
Senior Member
 
Iscritto dal: May 2005
Città: Trieste
Messaggi: 2287
han già detto quasi tutto

la soluzione di cdtux è la più rapida e funzionale se non hai bisogno di altre query

Daniels118 invece propone bene di suddividere ulteriormente la base di dati, più flessibile come soluzione:avere un anagrafica "persona" e le tabelle "agente" e "manager" per discriminare sul tipo ti permette, quasi aggratis aggiungendo la relazione tra agenti e manager, tutta una serie di query come "tutti gli agenti di un manager", "tutte le vendite degli agenti di un manager" ecc ecc

come sempre, dipende dal grado di dettaglio desiderato
__________________
neo mini v2 / asus strix z490i / 10600k@? / uh12s / rx6700xt / 32gb ddr4@3200 / sandisk 250 + asenno 1tb / lenovo g34w
trattative concluse : tante...

-MiStO- è offline   Rispondi citando il messaggio o parte di esso
Old 12-11-2015, 10:39   #8
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Aggiungo che, visto che c'era la possibilità che venisse chiesto uno storico, si potrebbe ulteriormente normalizzare la base dati anche nella dimensione del tempo, ovvero trasformare le tabelle agente e manager in un'unica tabella denominata rapporto_di_lavoro, avente i seguenti campi:
- id_anagrafica
- tipo_rapporto (enum: {agente, manager})
- data_inizio_rapporto
- data_fine_rapporto
Invece che referenziare direttamente l'anagrafica, le vendite potrebbero puntare al rapporto di lavoro, in questo modo se una persona cambia ruolo puoi facilmente distinguere se le vendite di quella persona sono state fatte in qualità di manager o di agente e in quale periodo (senza necessariamente escludere la possibilità di avere un campo data_vendita nella tabella vendite). Avere una tabella unica ti consente inoltre di poter aggiungere in futuro eventuali nuovi ruoli senza modificare lo schema del database.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 13-11-2015, 11:49   #9
_Mara_
Junior Member
 
Iscritto dal: Apr 2015
Messaggi: 15
Preziosissimi!

A presto per altre domande.
Mara
_Mara_ è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Poste Italiane lancia un'Opas su TIM: la...
La crisi delle memorie potrebbe durare a...
Epic non ha alcuna intenzione di smetter...
MacBook Neo: la scommessa economica di A...
Addio elio-3? La scoperta cinese che pot...
OpenAI punta a 8.000 dipendenti entro il...
Democratici all'attacco di NVIDIA: l'acc...
Elon Musk ha annunciato TeraFab: fabbric...
Tutte le migliori offerte Amazon del wee...
Assassin's Creed: iniziate le riprese de...
TV 4K in super offerta: 75'' Mini-LED Hi...
iPad Air in offerta: 11'' con chip M3 a ...
Garmin Instinct 2X Solar Tactical a 259€...
Crimson Desert: Intel ha cercato di coll...
MacBook Air M4 da 899€ su Amazon, ma non...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v