Pagina 1 di 2

Aiuto relazione database

Inviato: mar 16 ott 2012, 16:13
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???

Re: Aiuto relazione database

Inviato: mar 16 ott 2012, 16:29
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?

Re: Aiuto relazione database

Inviato: mar 16 ott 2012, 16:57
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

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 9:57
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?

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 12:32
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?

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 13:05
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....

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 14:57
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.

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 15:42
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?...

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 15:47
da lablinux
Una relazione serve, utenti (1-n ) sedi.

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 15:59
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?

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 16:28
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? :)

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 17:27
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

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 17:45
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.

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 17:46
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]

Re: Aiuto relazione database

Inviato: mer 17 ott 2012, 18:12
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..