Aiuto relazione database

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Aiuto relazione database

Messaggio da darkstaring »

Sera a tutti :D ..
Mi sto incasinando tantissimo su delle associazioni tra tabelle sql.

In pratica ho una tabella UTENTI che deve tenere all'interno (nome, pass) per fare un login...

Poi ho altre 2 tabelle, una con le sedi ed un'altra con i dipendenti;
queste 2 tabelle sono relazionate tra loro con un'altra tabella (DIP_SEDI) poichè alcuni dipendenti possono lavorare in più sedi..

Ora il mio problema e che mi è stato chiesto che sia possibile effettuare il login sia come sede (e vedere quindi tutti i dipendenti di quella sede)
o come singolo dipendente..

Voi come avreste fatto le associazioni???
Non sò a dove collegarli sti dipendenti :D...

Io pensavo ad un'associazione tra DIP_SEDI e UTENTI in modo che ogni dipendente abbia una passowrd per ogni sede dove lavora
ma credo di fare casino...

Consigli???

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Aiuto relazione database

Messaggio da 414N »

Stiamo parlando di argomenti di teoria dei database o stai già lavorando su un database fisico col quale interagisci da codice (Java, C#, C++ ecc.)?
Servirebbe qualche dettaglio in più, secondo me... Per esempio, quali sono le chiavi primarie ed esterne che hai scelto? Come fai a collegare un nome di un utente alle altre tabelle?

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

Sto parlando di un database già creato che sto interfacciando in PHP...
Quest'immagine mostra la struttura del DB per intero, comprese chiavi ecc...
Immagine

Non considerate la tabella utenti_sedi (la avevo creata perchè avevo capito che gli admin potevano gestire più sedi)
Invece ora ho capito che non è così e che
chi deve fare l'accesso è
il dipendente come singolo oppure
l'intera sede e mostrare quindi tutti i dipendenti di quella sede...

Sono ancora in fase testing
non mi prendete in giro :lol:

Io avevo intenzione come dicevo prima di relazionare "DIP_SEDI" ad "UTENTI"..
sò che nell'immagine mancano le chiavi esterne.. ma comunque secondo voi potrebbe funzionare aggiungendole???

Se avete qualsiasi consiglio è ben accetto
Grazie :D

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

Anche oggi mi sto azzuffando :D...

Non mi quadra la relazione per gli utenti..
Relazionando [utenti con dipendenti] & [utenti con sedi]
avrei 2 relazioni 1A1... quindi rindondanza....
Mentre invece collegando gli utenti a dip_sedi metto in relazione solo i dipendenti.....
Mentre ancora, mettendo i campi utente e pass direttamente nelle tabelle utenti e sedi credo di far ancora più casino...

E' il primo login che faccio..
Consigli?

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1212
Iscritto il: gio 27 nov 2008, 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: Aiuto relazione database

Messaggio da lablinux »

Quindi, ci sono gli utenti e le sedi.
Un utente non appartiene a pù sedi, ma ad una sola?
Una persona (fisica) accende il pc e con user e password può vedere tutti gli utenti legati alla sede?
Qaul'è la differenzza tra utente e dipendente? Un dipendete è un utente?
E' questo che vorresti fare?

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

lablinux ha scritto:Quindi, ci sono gli utenti e le sedi.
Un utente non appartiene a pù sedi, ma ad una sola?
Una persona (fisica) accende il pc e con user e password può vedere tutti gli utenti legati alla sede?
Qaul'è la differenzza tra utente e dipendente? Un dipendete è un utente?
E' questo che vorresti fare?
Un utente non appartiene a più sedi, ma ad una sola?
Più o meno, un 'utente dovrebbe poter essere sia una sede che un dipendente... se dipendente vede solo se sesso altrimenti tutti i dipendenti

Una persona (fisica) accende il pc e con user e password può vedere tutti gli utenti legati alla sede?
Se si ci logga come sede si devono vedere tutti i dipendenti di quella sede..

Qaul'è la differenzza tra utente e dipendente? Un dipendete è un utente?
Si...Il dipendente è un'utente come lo è la sede.

....Io stavo pensando ad un flag da usare nel form del login, magari una <select> con il tipo (dipendente o sede) per capire quale tabella deve interrogare
ed inserire nomeutente e passwd direttamente nella tabella del dipendente o della sede....

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1212
Iscritto il: gio 27 nov 2008, 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: Aiuto relazione database

Messaggio da lablinux »

il campo di selezione non mi piace molto. L'informazione se lo user sia solo se stesso o l'azienda dovrebbe trovarsi sulla tabella user, ad esempio in un campo ruoli (roles)
1 = dipendente
2 = sede
3 = entrambe.
Ed in base al ruolo (1 o 2 o 3), mostri i dati.

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

Si.. quello lo avevo già fatto propio come dici tu con il campo admin... Ma non avevo pensato che non ho bisogno di fare nessuna relazione, volevo a tutti i costi fare questa relazione :)
Quindi mi confermi che posso evitare relazioni da UTENTI?...

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1212
Iscritto il: gio 27 nov 2008, 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: Aiuto relazione database

Messaggio da lablinux »

Una relazione serve, utenti (1-n ) sedi.

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

Perchè?non capisco la relazione... una volta che qualcuno si logga, vedo il tipo, vedo chi è
e poi in base al tipo faccio quello che serve..no?
Non posso accedere anche così a i dati?

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Aiuto relazione database

Messaggio da 414N »

Se il problema è solo un problema di visualizzazione non hai bisogno di creare tante associazioni.
Una volta che l'utente (che sia dipendente semplice o sede non importa) ha effettuato il login, tu il suo nome lo sai ed è proprio tramite quello che puoi individuarlo all'interno della tabella dipendenti o sedi, giusto?
Assodato questo e appurato che l'utente attualmente "loggato" sia una sede, puoi ricavare l'ID della sede con una semplice SELECT basata sul nome che conosci, poi ricavare tutti i dipendenti della sede con un join tra dip_sedi e dipendenti dove l'ID della sede è quello che hai ricavato precedentemente.
Ha senso o non ho capito una mazza? :)

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

Direi di si... Anche io adesso sono arrivato a questa conclusione....nessuna relazione da utenti, ma solo un controllo al momento del login.

Stavo cercando di incasinarmi da solo tentando di associarla a le altre tabelle a tutti i costi :).. :oops:
Adesso comunque provo a fare delle prove per vedere su tutto funziona..

Farò sapere come è andata...
Grazie a tutti :o

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1212
Iscritto il: gio 27 nov 2008, 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: Aiuto relazione database

Messaggio da lablinux »

Mi permetto di darti un consiglio.
I dati che devi usare, note utente, id utente, ruoli, id sede, e altri dati che ti servono in modo ricorrente, salvale in una sessione. Altrimenti, ad ogni richiesta di una pagina devi fare una query, e se ci sono tanti utenti collegati, se il server su cui gira il db è lento (magari per elaborazioni batch), rischi di rallentare l'applicativo.

Avatar utente
lablinux
Linux 4.x
Linux 4.x
Messaggi: 1212
Iscritto il: gio 27 nov 2008, 12:23
Desktop: Gnome
Distribuzione: Debian testing
Località: Rho

Re: Aiuto relazione database

Messaggio da lablinux »

lablinux ha scritto:Mi permetto di darti un consiglio.
I dati che devi usare, note utente, id utente, ruoli, id sede, e altri dati che ti servono in modo ricorrente, salvale in una sessione. Altrimenti, ad ogni richiesta di una pagina devi fare una query, e se ci sono tanti utenti collegati, se il server su cui gira il db è lento (magari per elaborazioni batch), rischi di rallentare l'applicativo.
[OT mode]
sicuro di usare php e mysql?
[/OT mode]

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: Aiuto relazione database

Messaggio da darkstaring »

Si, devo usare php.. per adesso...

Sto includendo in ogni pagina, una pagina che ne include molte altre.. tra qui quella che verifica e mantiene aperta la sessione...
Ho fatto questa piccola procedura per vedere se si è loggati..altrimenti si viene reindirizzati alla pagina di login

Codice: Seleziona tutto

session_start();
session_regenerate_id(TRUE);

//Controlla se non è loggato
if(!isset($_SESSION['nome']))
 {
    //se non e' nella pag di login ti ci porta
    if(! preg_match("*INDEX/LOGIN*",$pwd))
    {
	  print ' <script language="JavaScript" type="text/javascript">
		  window.setTimeout ("location.href=(\''.$tmp.'INDEX/LOGIN/login.php\')", 0);
		  </script>';
    }    
  }
else //SE E' LOGGATO
{
/*#####################scrivi chi e loggato###############*/
$logout=$tmp."INDEX/LOGIN/logout.php";
print "Sei loggato come \t".$_SESSION['nome']."<a href=\"$logout\"><input type=\"submit\" value=\"logout\"></a>";

Sono alle prime armi, e non sò quanto possa essere affidabile questo.. comunque ho fatto anche un'altra pagina che fà più o meno quello che fà lo script quì sopra.. solo che questo permette l'accesso a determinate pagine in base a chi è loggato

Codice: Seleziona tutto

/*ESEMPIO PROTEGGE PAGINA  
if( (preg_match("*INDEX/directory_proteggere*",$pwd) ) &&  ($_SESSION['admin'] != $utentente_autorizzato) )
    {
	  print '<h3>Non sei autorizzato a vedere questa pagina<h3>';
	  print "
		<script language=\"JavaScript\" type=\"text/javascript\">
		  window.setTimeout ("location.href=(\''.$tmp.'INDEX/index.php\')", 1500);
		</script>';
    }
*/ 
Se avete consigli sono ben accetti..

Rispondi