.dsy:it. Pages (2): [1] 2 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Basi di dati ~ informatica triennale (http://www.dsy.it/forum/forumdisplay.php?forumid=211)
-- Social network 2010/2011 (http://www.dsy.it/forum/showthread.php?threadid=41459)


Posted by zandrek on 23-01-2011 10:48:

Social network 2010/2011

ciao una domand,io ho già creato il db e inserito qualche decina di giochi e utenti ma non mi è chiara una cosa : i vari permessi degli utenti (vedere profilo degli amici, vedere le classifiche) o piuttosto il non vedere le statistiche (che vede solo analista e admin) lo devo fare nella costruzione del db o fa tutto php? qualcuno nel caso mi indica qualche tutorial/guida di php e postgres?
grazie


EDIT

il fatto che un utente non possa scrivere cavolate tipo mettere che il proprio nome è "via golgi" lo faccio dal db o sempre con php?


Posted by CowBoy on 23-01-2011 11:22:

Se hai già definito i permessi degli utenti del DBMS sulle tabelle, allora ti spiego come avevo risolto io:

1- Definisco sul DBMS un ruolo(utente del DBMS) per ciascuna tipo utente del sistema(login, admin, user, analyser, ecc)

2- Effettuo il login con una connessione tramite php al mio DBMS con utente del DBMS senza permessi per fare altro(ruolo di utenza "login")
, cioè solo un GRANT SELECT sulla tabella con le info di login utente di sistema

3- Dopo di che, per ogni tipo di utente del sistema che desidera consultare il DBMS, creo una connessione diversa tramite php in base al ruolo assegnatoli: admin, user, analyser, ect...


Il punto due si può modificare in base a come hai scelto la/e tabelle di login... se hai più tabelle, una per ogni ruolo, allora scegli subito la connessione adeguata senza dover creare un ruolo di tipo "login"...

P.S: Vedere il profilo o le classifiche di amici non dipende dal ruolo utente, bensì dalla funzione postgres che andrà a fare i controlli vari e dai GRANT che hai dato alla tabelle per il ruolo "user"
Di non vedere le statistiche invece sì.

Se non ho chiarito bene i tuoi dubbi chiedi pure...

Ciao!

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by CowBoy on 23-01-2011 11:25:

Re: Social network 2010/2011


EDIT

il fatto che un utente non possa scrivere cavolate tipo mettere che il proprio nome è "via golgi" lo faccio dal db o sempre con php? [/B]


Non conosco le specifiche di questo progetto, penso che vada controllato l'input in fase iniziale, quindi con php, per poi passarlo al DB.

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by CowBoy on 23-01-2011 11:35:

FATE MOLTA ATTENZIONE - Le tabelle devono avere i permessi necessari per i ruoli definiti in modo da poter eseguire le funzioni su di esse; l'idea è di far sì che le funzioni che andrai ad utilizzare trovino/scrivano/aggiornino/eliminino tutte le informazioni di cui hanno bisogno.

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by zandrek on 23-01-2011 14:45:

Non conosco le specifiche di questo progetto, penso che vada controllato l'input in fase iniziale, quindi con php, per poi passarlo al DB.

si hai ragione che domanda idiota...poi comunque se uno inserisce dati alla c***o oltre un certo limite non è un mio problema.



....e dai GRANT che hai dato alla tabelle per il ruolo "user" Di non vedere le statistiche invece sì.

questo me lo hai chiarito benissimo grazie!!!!


3- Dopo di che, per ogni tipo di utente del sistema che desidera consultare il DBMS, creo una connessione diversa tramite php in base al ruolo assegnatoli: admin, user, analyser, ect...

idem come sopra, finalmente vedo tutto meno fumoso, grazie ancora!
ma sei del terzo anno tu o hai già finito tutto? ciao e buona domenica


Posted by CowBoy on 23-01-2011 14:59:

Sono fuori corso ormai e mi manca lo scritto di basi, reti ed algoritmi... in bocca al lupo e buona domenica anche a te!

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by pirlo21 on 30-01-2011 10:17:

io ho un dubbio sulla gestione delle tipologie...
voi avete creato una sola tabella con un campo che definisce la tipologia (carte, videogioco, da tavola) oppure n tabelle diverse in base al numero di tipologie?
Nel primo caso ci sarebbe l'inconveniente di avere molti campi con valori opzionali e quindi occorre inserire dei controlli per assicurarsi che in base alla tipologia vengano inseriti determinati valori e non altri (ad esempio in gioco di carte non posso inserire piattaforma di videogioco).


Inoltre l'inserimento di nuovi utenti lo avete reso possibile oppure resteranno solo quelli inseriti da noi programmatori?


Posted by Chobeat on 30-01-2011 10:41:

beh un form piccolo piccolo di registrazione dovrebbe esserci. Cioè non è che ci voglia molto a farlo...


Posted by kermit63 on 04-02-2011 10:43:

non ho ben capito in che modo vadano usati i TAG, sono indeciso tra tre possibilita':
1) l'utente puo' inventarsi e inserire nuovi TAG ad un gioco.
2) l'utente prende un TAG tra quelli disponibili e lo attribuisce a un gioco.
3) non ho capito nulla

cmq pensavo di usare semplicemente una tabella gioco-TAG


Posted by Snakethesniper on 04-02-2011 17:01:

Originally posted by kermit63
non ho ben capito in che modo vadano usati i TAG, sono indeciso tra tre possibilita':
1) l'utente puo' inventarsi e inserire nuovi TAG ad un gioco.
2) l'utente prende un TAG tra quelli disponibili e lo attribuisce a un gioco.
3) non ho capito nulla

cmq pensavo di usare semplicemente una tabella gioco-TAG

Premetto che il progetto comincerò a farlo più avanti, ho comunque dato un'occhiata al testo ecc.
Anche io pensavo di usare una tabella TAG in quanto come si evince dalla traccia, TAG sarebbe un attributo multivalore e di conseguenza viene gestito come una tabella, seguendo l'ottimizzazione degli attributi (1,n). Io pensavo cmq di usare un dominio predefinito per il TAG che l'utente può scegliere.


Posted by Snakethesniper on 04-02-2011 17:02:

Originally posted by Snakethesniper
Premetto che il progetto comincerò a farlo più avanti, ho comunque dato un'occhiata al testo ecc.
Anche io pensavo di usare una tabella TAG in quanto come si evince dalla traccia, TAG sarebbe un attributo multivalore e di conseguenza viene gestito come una tabella, seguendo l'ottimizzazione degli attributi (1,n). Io pensavo cmq di usare un dominio predefinito per il TAG che l'utente può scegliere.

Mi son spiegato male alla fine, creare un dominio con valori predefiniti (avventura,azione,strategia ecc.) che l'utente può scegliere.


Posted by pirlo21 on 04-02-2011 18:47:

io sono d'accordo sulla tabella tag-gioco...
per quanto riguarda il dominio invece non vorrei che ti confondi con la tipologia...
io come tag intendo qualsiasi parola che mi viene in mente pensando al gioco, quindi di libera scelta dell'utente...
Piuttosto io sono molto indeciso sulle tipologie, perchè sono predefinite da noi progettisti, quindi ad esempio:
videogioco, gioco da tavola, gioco di carte
però videogioco a sua volta deve contenere il tipo di console che è multivalore (un gioco può uscire per xbox e wii ad esempio)
quindi come pensate di legare gioco a tipologia?


Posted by number15 on 04-02-2011 19:04:

Ho dato un'occhiata molto veloce al primo paragrafo (non devo dare l'esame) però provo a darvi una mano.
Vi scrivo il relazionale.
GIOCO(id_gioco, nome_gioco, tipologia, età, numero_giocatori_richiesto) /* tipologia campo enum(videogioco, gioco da tavola, gioco di carte) */
TAG(id_tag, nome_tag) /* tag per i giochi */
GIOCO_TAG(id_gioco, id_tag)
PIATTAFORMA(id_piattaforma, piattaforma) /* es xbox, wii, ps3*/
PIATTAFORMA_VIDEOGIOCO(id_piattaforma, id_gioco)
GIOCO_DA_TAVOLA(id_gioco, numero_giocatori_suggerito, durata_prevista) /* info aggiuntive sui giochi da tavola; si può anche mettere tutto in gioco, 'accettand' di aver valori null per questi campi nei videogiochi e nei giochi di carte */

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by pirlo21 on 05-02-2011 13:23:

pensavo anche io a una cosa del genere....però bisognerebbe implementare per forza in php i controlli del tipo "se è un videogioco deve avere per forza almeno una console di riferimento"
oppure "se è un gioco da tavola può avere un numero di giocatori suggerito"..............
non c'è un implementazione più efficace per far sì che tutto sia gestito a livello dbms?


Posted by number15 on 05-02-2011 14:14:

Direi di no.

Per risolvere quelle richieste ti basta fare 3 form, una per ogni tipologia, dove per videogiochi metti obbligatorio il campo console, mentre in quella giochi da tavolo metti facoltativo il campo nr. giocatori.

Poi vai a fare le insert nelle rispettive tabelle.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Rocky on 06-02-2011 00:27:

Scusate, vorrei sottoporre un quesito che forse mi sono posto solo io.
Non trovate problematica la gestione dell'utente Amministratore?

Dalle specifiche del progetto si evince che:
1) l'amministratore è l'unico che "può agire come qualsiasi altro utente dell'applicazione"
2) quindi si suppone che i normali Iscritti non possono essere anche Analisti, e viceversa.

Se organizzassimo Utente in una gerarchia, avremmo che:
- per rispettare la condizione 1, dovremmo avere una gerarchia Overlapping (sovrapposta)
- per rispettare la condizione 2, dovremmo avere una gerarchia Esclusiva tra Iscritto e Analista

Tutto ciò porta ad un insieme vuoto.
Come organizzare quindi una gerachia Utente tra le sottoclassi Admin, Iscritto e Analista?


Posted by number15 on 06-02-2011 13:21:

Direi semplice campo enum (normale, analista, admin) in utente.

Ho capito quello intendi tu, cioè che un admin è anche un utente normale, ma nella tabella tu avrai 1 riga per ogni utente quindi è TE.

Poi a livello di programmazione farai una cosa del tipo:

se utente è admin o normale
...

se utente è analista
....

se utente è admin
...

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Rocky on 06-02-2011 14:03:

Io ho capito che Admin è sia utente Iscritto che utente Analista. Giusto?

Per campo enum cosa intendi? A livello di schema ER a cosa corrisponde? a un attributo su Utente?


Posted by number15 on 06-02-2011 16:07:

Ci sta che admin sia anche analista, solitamente admin 'è tutto'.
Le specifiche su ste cose sono un po' vaghe, sta a te scegliere.
Se dovessi farlo io il progetto, ad admin darei tutti i permessi.

ENUM è un tipo di dato.

A livello ER direi che devi disegnare un'entità UTENTE e collegarci le 3 entità specializzate NORMALE, ANALISTA, ADMIN tutte con cardinalità 0,1.

Diventa un attributo su utente nel passaggio successivo, da ER --> a relazionale.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Rocky on 06-02-2011 16:57:

Ma come si fa a dire, in una gerarchia T,E che Admin è un amministratore, ma fa anche l'iscritto e l'analista?


Posted by kermit63 on 06-02-2011 18:09:

dunque, il testo dice che le statitiche per gli analisti devono essere materializzate (immagino tabelle e non viste). ma cosa conviene quindi fare?
tabella REPORT dei giochi (o attributi in GIOCO), con ID gioco come pk e attributi percentuali di proprietari, media voti ecc
tabella PROFILO degli utenti (o attributi in UTENTE) con ID utente come pk e numero di giochi posseduti, provati, votati ecc.
in questo caso ogni aggiornamento/cancellazione di una comporterebbe il far aggiornare entrambe le tabelle (impiegandoci troppo ovviamente).
Quale soluzione quindi?


Posted by number15 on 06-02-2011 18:39:

Originally posted by michele.c
Ma come si fa a dire, in una gerarchia T,E che Admin è un amministratore, ma fa anche l'iscritto e l'analista?


Non si fa. Da un punto di vista ER son entità divise.
L'admin non è un utente normale nè un analista, ma ha pure i loro permessi.
Io la vedo così.

Tra l'altro qua mi pare facile, visto che non ci sono attributi diversi a seconda della tipologia di utente.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by offear on 07-02-2011 14:14:

dbms

Ciao,

il progetto può essere creato con gli strumenti che si preferisce o esistono dei vincoli?

Si può usare Microsoft SQL?

Grazie:D

__________________
My cocktail bar: http://www.facebook.com/bfreemilan
My Blog:
http://thatdaywillcome.com


Posted by Rocky on 07-02-2011 15:38:

Originally posted by number15
Non si fa. Da un punto di vista ER son entità divise.
L'admin non è un utente normale nè un analista, ma ha pure i loro permessi.
Io la vedo così.

Tra l'altro qua mi pare facile, visto che non ci sono attributi diversi a seconda della tipologia di utente.


Già. Perchè a livello di ER secondo me non si può dire che amministratore faccia sia iscritto che analista, e contemporaneamente iscritto e analista sono insiemi disgiunti.
Grazie.


Posted by Rocky on 07-02-2011 15:39:

Re: dbms

Originally posted by offear
Ciao,

il progetto può essere creato con gli strumenti che si preferisce o esistono dei vincoli?

Si può usare Microsoft SQL?

Grazie:D


Non ci sono vincoli sugli strumenti, per quanto ricordi.
Tutti i vincoli sono presenti sulle sul testo del progetto! Se non c'è scritto nulla puoi usare quello che vuoi


Posted by offear on 07-02-2011 15:57:

Re: Re: dbms

Originally posted by michele.c
Non ci sono vincoli sugli strumenti, per quanto ricordi.
Tutti i vincoli sono presenti sulle sul testo del progetto! Se non c'è scritto nulla puoi usare quello che vuoi


k grazie, ma cmq credo che userò postgre alla fine...secondo voi riesco a preparare lo scritto per l'appello di febbraio?
:D

__________________
My cocktail bar: http://www.facebook.com/bfreemilan
My Blog:
http://thatdaywillcome.com


Posted by asgar on 11-02-2011 14:12:

scusate la domanda niubba, ma alla fine quando avrò più utenti registrati la tabella pg_user rimane sempre con admin, utente_normale e utente_analista o oltre a questi vengono memorizzati anche tutti gli altri utenti quindi avrò chessò franco, giacomo, luca ecc..?


Posted by Spedom on 11-02-2011 16:12:

Ciao a tutti,
cito testualmente dal punto 2 delle specifiche:

"Tutte le funzioni di statistica per l'utente analista sono materializzate............Il profilo di ogni utente, comprensivo della lista di amici e dei giochi posseduti e/o votati è realizzata tramite viste"

non capisco se l'ultimo capoverso è relativo alle sole funzioni dell'analista o quando un utente accede occorre creare una vista materializzata con i suoi dati! Come lo avete interpretato/implementato?

Grazie.

__________________
Spedom


Posted by gek on 12-02-2011 16:28:

Originally posted by Spedom
Ciao a tutti,
cito testualmente dal punto 2 delle specifiche:

"Tutte le funzioni di statistica per l'utente analista sono materializzate............Il profilo di ogni utente, comprensivo della lista di amici e dei giochi posseduti e/o votati è realizzata tramite viste"

non capisco se l'ultimo capoverso è relativo alle sole funzioni dell'analista o quando un utente accede occorre creare una vista materializzata con i suoi dati! Come lo avete interpretato/implementato?

Grazie.


Per il momento ho creato 2 viste: una per il profilo utente e raccoglie alcuni dati come n° giochi posseduti o provati, n° di amici, media votazioni,ecc..; l'altra come statistica dei giochi contenente dati sui giochi, sono però delle viste 'totali' riferite cioè a tutti i giochi e a tutti gli utenti, non penso sia una buona scelta creare una vista per ogni utente...a meno che le viste non vengano cancellate...


Posted by Spedom on 12-02-2011 21:10:

Originally posted by gek
Per il momento ho creato 2 viste: una per il profilo utente e raccoglie alcuni dati come n° giochi posseduti o provati, n° di amici, media votazioni,ecc..; l'altra come statistica dei giochi contenente dati sui giochi, sono però delle viste 'totali' riferite cioè a tutti i giochi e a tutti gli utenti, non penso sia una buona scelta creare una vista per ogni utente...a meno che le viste non vengano cancellate...


Grazie per la tua risposta.

Concordo con te circa la pessima idea di una vista per ogni utente....era il motivo per il quale cerco conforto......spero in qualche altro suggerimento e/o interpretazione delle specifiche.

Saluti.

__________________
Spedom


Posted by manux7 on 19-02-2011 11:05:

Dopo l'appello di febbraio, il progetto sarà sempre questo o cambierà?


Posted by CowBoy on 19-02-2011 11:26:

Sarà sempre questo.

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by Snakethesniper on 15-03-2011 17:02:

Premetto che mi sto rimettendo adesso a guardare il progetto, quindi probabilmente sono un po' arrugginito, volevo un parere.
Nel progetto c'è scritto che bisogna avere due liste (giochi provati/posseduti e giochi desiderati) e che per la lista di giochi posseduti l'utente può inserire un voto e una recensione. Ecco, le liste in questo caso vanno gestite come tabelle giusto? Perchè io stavo pensando di fare due tabelle:
- Giochi posseduti : Recensione,Titolo_Gioco(che si collega poi al Titolo dell'entità gioco),Voto.
- Giochi Desiderati: Titolo_Gioco ..ed eventualmente altre cose se mi vengono in mente..

che dite è corretto?


Posted by Chobeat on 15-03-2011 18:12:

La soluzione più ovvia è in realtà avere una sola tabella con un flag che è true se sono posseduti e false se sono provati, o eventualmente più flag se vuoi implementare più stati come avevamo fatto noi.


Posted by Snakethesniper on 15-03-2011 18:21:

Originally posted by Chobeat
La soluzione più ovvia è in realtà avere una sola tabella con un flag che è true se sono posseduti e false se sono provati, o eventualmente più flag se vuoi implementare più stati come avevamo fatto noi.

si mi sembra anche questa una buona soluzione, c'è da dire però che appunto oltre a quelli posseduti/provati c'è da fare un elenco di quelli desiderati, certo anche questo si potrebbe implementare con i flag


Posted by number15 on 15-03-2011 18:29:

Se l'intersezione dei 3 stati è insieme vuoto, puoi anche fare un unico campo enum(provato, desiderato, posseduto)

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 17-03-2011 10:57:

Ho un altro dubbio, la tipologia voi come la state gestendo? Io pensavo di fare un tipo di entità per ogni tipo con i propri attributi...


Posted by asgar on 18-03-2011 14:40:

forse qualcuno ha avuto il mio stesso problema:

accedo con una query php al mio database su postgres: ho una tabella test sul database social, ho un utente testrole sul quale faccio questa grant:

GRANT SELECT ON social.test TO testrole;

la grant va a buon fine e fin qui tutto ok;
da php ho la mia connessione al db:

function test_connection_pgsql() {
$connection = "host=localhost dbname=social user=testrole password=miapwd";
return pg_connect ($connection);
}

e faccio la query in questo modo:

if ($db = test_connection_pgsql()) {
print 'Connessione al DBMS riuscita.<br />';
$sql = "SELECT * FROM social.test";
$resource = pg_query($db, $sql);
$row = pg_fetch_array($resource,NULL,PGSQL_ASSOC);
print_r ($row);
pg_free_result($resource);
pg_close($db);
}

la cosa strana è che la connessione va a buon fine, infatti ottengo:

"Connessione al DBMS riuscita."

però a seguire mi dice che l'utente non ha il permesso di select sulla tabella(anche se l'ho precedentemente grantato):

Warning: pg_query(): Query failed: ERROR: permission denied for schema social LINE 1: SELECT * FROM social.test ^

dove sbaglio?

ubuntu 10.10
postgresql 8.4
php 5


Posted by Stefano2912 on 18-03-2011 14:52:

Guarda io non ho creato gruppi utenti e permessi (non erq richiesto) e ho preso +3.. Non stare a complicarti la vita.. :D


Posted by asgar on 18-03-2011 17:43:

Originally posted by Stefano2912
Guarda io non ho creato gruppi utenti e permessi (non erq richiesto) e ho preso +3.. Non stare a complicarti la vita.. :D

cioè ti connettevi sempre col tuo utente postgres?


Posted by Stefano2912 on 19-03-2011 08:04:

Si. Tanto era in localhost :D


Posted by asgar on 19-03-2011 09:29:

ottimo allora.. mi risparmio di salvare il tipo utente nella sessione e di controllarlo :)


Posted by Stefano2912 on 19-03-2011 12:23:

:D


Posted by Chobeat on 19-03-2011 14:11:

idem, anche noi +3. se fai bene il resto, quello non serve.


Posted by Snakethesniper on 20-03-2011 16:57:

Qualcuno sa darmi una mano riguardo la tipologia? Sto cercando di capire come implementarla nello schema ER. Cioè in linea di massima ho già trovato come metterle, il problema mi viene quando penso poi alla realizzazione, in particolare se viene eseguita una query che richiede le informazioni di un gioco e bisogna segnalarne la tipologia.
Una soluzione sarebbe quella di inserire un attributo "tipo" in gioco che si collegherà all'attributo "nome_tipo" in tipologia dove ci saranno tutti gli attributi delle varie tipologie con cardinalità (0,1). Però questa non mi sembra la soluzione ideale, più che altro perchè penso che in una query come quella descritta sopra poi compaiano campi vuoti con gli attributi che non c'entrano niente con la tipologia selezionata, io preferivo avere una cosa più "pulita" e avere solo gli attributi di quel determinato tipo.
L'altra soluzione era appunto tenere sotto le sottoclassi di tipologia e quindi avere 3 entità : videogioco, giochi da tavolo, giochi di carte. Il problema però sarebbe poi visualizzare in una query il nome del tipo, per il semplice fatto che mi sembra stupido inserire in queste entità un attributo "nome_tipo" che si ripete per ogni tipo di entità (ovvero in Videogioco, nome_tipo sarà sempre videogioco ecc.).
Qualcuno può aiutarmi a chiarirmi le idee? Anche perchè ho la sensazione che sto facendo parecchia confusione xD


Posted by Snakethesniper on 20-03-2011 17:01:

Per dare un'idea di quello che ho scritto sopra, copio qui lo schema logico di un esercitazione presente sul sito:
Proprietario (codice, telefono, indirizzo)
• PersonaFisica (codice, CF, nome, cognome)
• PersonaGiuridica(codice, PI, denominazione)

Con codice in Proprietario come chiave primaria e Codice in PersonaFisica e PersonaGiuridica come chiave primaria e chiave esterna.
Ora, se volessi fare una query che, dato un codice di un proprietario mi venga segnalato se è una persona fisica o una giuridica come potrei fare?


Posted by zandrek on 20-03-2011 20:22:

Non ho letto i tuoi messaggi precedenti comunque con questa query trovi i nomi dei proprietarifisici
SELECT nome
FROM Proprietario, PersonaFisica
WHERE Proprietario.codice = PersonaFisica.codice

ovviamente se tu inserissi sta roba in un db o in un progetto potresti fare una funzione che se la query precedente non torna nulla allora sul "sito" fai comparire qualche avviso o roba simile...


Posted by number15 on 20-03-2011 20:30:

Originally posted by Snakethesniper
Per dare un'idea di quello che ho scritto sopra, copio qui lo schema logico di un esercitazione presente sul sito:
Proprietario (codice, telefono, indirizzo)
• PersonaFisica (codice, CF, nome, cognome)
• PersonaGiuridica(codice, PI, denominazione)

Con codice in Proprietario come chiave primaria e Codice in PersonaFisica e PersonaGiuridica come chiave primaria e chiave esterna.
Ora, se volessi fare una query che, dato un codice di un proprietario mi venga segnalato se è una persona fisica o una giuridica come potrei fare?


Non sto capendo il tuo problema.

Quell'implementazione dell'esempio è fatto ad minchiam.

Aggiungi nella tabella proprietario un campo tipo, che realizzi con un enum(persona fisica, persona giuridica, entrambi) (nomi decenti e, se esclusiva, 'entrambi' va via).

A quel punto hai l'informazione che ti serve nella tabella, senza if, join e robe strane.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 20-03-2011 20:45:

Originally posted by number15
Non sto capendo il tuo problema.

Quell'implementazione dell'esempio è fatto ad minchiam.

Aggiungi nella tabella proprietario un campo tipo, che realizzi con un enum(persona fisica, persona giuridica, entrambi) (nomi decenti e, se esclusiva, 'entrambi' va via).

A quel punto hai l'informazione che ti serve nella tabella, senza if, join e robe strane.

Si ci avevo pensato infatti. Allora da questo una domanda, se io nel progetto creo 3 entità per le 3 tipologie di giochi (collegate all'entità Gioco tramite l'id_gioco per esempio) e metto all'entità gioco il campo Tipo, se dovessi fare una query che dato il nome di un gioco ne richiede tutte le informazioni, dovrei fare un'inner join con tutte e 3 le entità giusto? E in tal caso è considerata una cosa fattibile oppure troppo incasinata? Dico a livello di analisi del progetto da parte del professore


Posted by Snakethesniper on 20-03-2011 20:53:

Uhm forse ho detto una mezza cavolata...
In pratica, quello che vorrei realizzare è fare in modo che se viene fatta una query su un gioco vengano visualizzate tutte le informazioni relative, quindi per esempio se è un videogioco voglio che vengano visualizzate solo le informazioni relative a quella tipologia e non anche quelle delle altre. Per questo motivo volevo un campo che specificasse la tipologia in modo che poi venivano visualizzate solo gli attributi di quella determinata tipologia e non quelli delle altre... Non so se si capisce cosa intendo


Posted by number15 on 20-03-2011 20:56:

Allora, da quanto ho capito tu avrai una tabella GIOCO che si specializza in 3 tabelle, una per ogni tipologia di gioco, con una gerarchia, immagino, di tipo totale esclusivo.

A quel punto, una volta che tu hai l'id, fai la join tra gioco e la tabella specializzata che ti interessa in base al tipo del gioco.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 20-03-2011 21:22:

Originally posted by number15
Allora, da quanto ho capito tu avrai una tabella GIOCO che si specializza in 3 tabelle, una per ogni tipologia di gioco, con una gerarchia, immagino, di tipo totale esclusivo.

A quel punto, una volta che tu hai l'id, fai la join tra gioco e la tabella specializzata che ti interessa in base al tipo del gioco.

ecco, esattamente! Ma si può fare? Premetto che php non l'ho ancora guardato e l'esame l'ho fatto a gennaio quindi sono un po' arrugginito a riguardo, ma è possibile fare un confronto tra il valore di un attributo e il nome di un'entità?


Posted by number15 on 20-03-2011 21:39:

edit: esempio del cazzo, penso a qualcosa di meglio

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by number15 on 20-03-2011 21:58:

Abbiamo questa situazione:
gioco(id_gioco, gioco, tipo, genere)
videogioco(id_gioco, console, v.m.)
gioco_di_società(id_gioco, durata, nr._giocatori_minimo)

Vuoi stampre una tabella con l'elenco dei giochi generale.

-Esegui questa query:
(select id_gioco,gioco, tipo, genere from gioco)

-crei una tabella con 3 campi: icona tipologia del gioco (basata sul valore del campo tipo), nome del gioco, genere.

-al click sul nome del gioco, vuoi mostrare le informazioni aggiuntive del gioco.

Facciamo che hai cliccato su Nba2k11:
if tipo = videogioco
select console, vm
from videogioco
where id_gioco = '$id_gioco'

-stampi i valori dei campi


Questa è proprio un'applicazione base.

Un altro esempio, per cui ti è fondamentale il campo tipo, è:
'Mostrami i nomi di tutti i videogiochi".
Ti basta fare:
select gioco
from gioco
where tipo ='videogioco'

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 20-03-2011 22:24:

Originally posted by number15
Abbiamo questa situazione:
gioco(id_gioco, gioco, tipo, genere)
videogioco(id_gioco, console, v.m.)
gioco_di_società(id_gioco, durata, nr._giocatori_minimo)

Vuoi stampre una tabella con l'elenco dei giochi generale.

-Esegui questa query:
(select id_gioco,gioco, tipo, genere from gioco)

-crei una tabella con 3 campi: icona tipologia del gioco (basata sul valore del campo tipo), nome del gioco, genere.

-al click sul nome del gioco, vuoi mostrare le informazioni aggiuntive del gioco.

Facciamo che hai cliccato su Nba2k11:
if tipo = videogioco
select console, vm
from videogioco
where id_gioco = '$id_gioco'

-stampi i valori dei campi


Questa è proprio un'applicazione base.

Un altro esempio, per cui ti è fondamentale il campo tipo, è:
'Mostrami i nomi di tutti i videogiochi".
Ti basta fare:
select gioco
from gioco
where tipo ='videogioco'

ok finalmente mi sono schiarito le idee, grazie!
un'ultima puntualizzazione, nello schema ER basta che semplicemente credo una associazione tra Gioco e le varie tipologie giusto? Tipo:
Gioco <-- --> Videogioco
Gioco <-- --> Gioco da tavola
Gioco <-- --> Gioco di carte


Posted by number15 on 20-03-2011 22:27:

Si, e indichi la cardinalità.

La parte delle generalizzazioni/specializzazioni mi ricordo che è fatta molto bene sulle slide della prof.
C'è sia come rappresentarle nel diagramma ER sia come passarle in relazionale.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 20-03-2011 22:40:

Originally posted by number15
Si, e indichi la cardinalità.

La parte delle generalizzazioni/specializzazioni mi ricordo che è fatta molto bene sulle slide della prof.
C'è sia come rappresentarle nel diagramma ER sia come passarle in relazionale.

sisi, quelle me le ricordo, era appunto per avere una conferma. Ti rigrazio moltissimo, sei stato di grande aiuto :-D


Posted by blue_tech on 21-03-2011 15:48:

Dunque sto iniziando ora a preparare il progetto ma non mi son chiare varie cose... Primo il discorso delle viste:

dice che il profilo con amici e giochi deve essere fatto tramite viste materializzate. Ora qui nasce il primo problema.

1) come materializzo effettivamente le viste? cioè se faccio una create view creo la vista ok ma come la materializzo?

2) anche le statistiche vanno fatte con viste materializzate e qui il problema al punto 3

3) tutto va tenuto aggiornato con i trigger quindi dovrei aggiornare le viste che però vengono fatte su più tabelle e quindi praticamente è infattibile perchè un aggiornamento è fattibile su viste fatte su una sola tabella

Chi mi chiarisce un pò sto discorso delle viste?

EDIT: tolto il PS avevo sbagliato a digitare un nome nel comando :P

Grazie a chi mi schiarirà un pò le idee...


Posted by number15 on 21-03-2011 16:25:

Dai un'occhiata qua, dovrebbe aiutarti.
http://blog.fl3x.de/2005/10/26/mate...views-in-mysql/

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 21-03-2011 16:41:

Una delucidazione sui giochi degli utenti.
Visto che il risultato finale che devo ottenere è un'entità "Giochi_Utente" con attributi ID_Gioco,ID_Utente, Tipo,Voto*,Recensione* (o almeno io l'ho pensata così, ovvero tenendo la superclasse e mettendo l'attributo Tipo), nello schema ER posso creare un'associazione chiamata appunto "giochi utente" con i suoi 3 attributi che collega le entità gioco e utente? In questo modo poi con il passaggio a schema logico verrà fuori la relazione/entità decisa prima no?


Posted by number15 on 21-03-2011 16:50:

In serata ti rispondo per bene.
Comunque leggendo veloce direi che nell'er devi creare solo un 'rombo' tra utente e gioco.

Poi in relazionale si creerà utente_gioco.
L'attributo tipo va solo in gioco, non te lo porti dietro.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 21-03-2011 17:01:

Originally posted by number15
In serata ti rispondo per bene.
Comunque leggendo veloce direi che nell'er devi creare solo un 'rombo' tra utente e gioco.

Poi in relazionale si creerà utente_gioco.
L'attributo tipo va solo in gioco, non te lo porti dietro.

si, parlavo proprio del "rombo". L'attributo tipo serve per indicare se è posseduto/provato oppure desiderato, quindi penso debba rientrare nell'entità Gioco_Utente


Posted by number15 on 21-03-2011 17:05:

Ah ops, pensavo tipo di gioco. ;)

Allora direi tutto giusto

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 21-03-2011 17:26:

Un'altra cosa, che sto andando in confusione, riguarda sempre i tipi di gioco. Io nello schema avevo fatto appunto Gioco e sotto le sottoclassi Videogioco, gioco di carte, gioco da tavolo. Ho deciso di tenere sia superclasse che sottoclasse, di conseguenza ho creato le associazioni 1:1 tra la superclasse e le sottoclassi. Ora il mio dubbio è, so che in questo caso bisogna per forza farle 1:1, ma è corretto in questo caso? Nel senso, per esempio, Videogioco non dovrebbe avere cardinalità 1,n con gioco?


Posted by number15 on 21-03-2011 17:36:

La cardinalità è 0,1 (un gioco può essere 1 videogioco O un gioco di carte O un gioco da tavolo).

Facciamo che id_gioco = 1 sia nba 2k11.

Ad nba2k11 corrisponderà 1 e una sola tupla in videogioco e l'id_gioco = 1 in videogioco corrisponderà esclusivamente ad nba2k11.

Quindi ricapitolando avrai:
gioco (0,1) videogioco
videogioco (1,1) gioco

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Snakethesniper on 21-03-2011 17:44:

Originally posted by number15
La cardinalità è 0,1 (un gioco può essere 1 videogioco O un gioco di carte O un gioco da tavolo).

Facciamo che id_gioco = 1 sia nba 2k11.

Ad nba2k11 corrisponderà 1 e una sola tupla in videogioco e l'id_gioco = 1 in videogioco corrisponderà esclusivamente ad nba2k11.

Quindi ricapitolando avrai:
gioco (0,1) videogioco
videogioco (1,1) gioco

Edit: non riesco a capire bene una cosa, perchè 1,1? nel senso, ad una tipologia non possono far parte più giochi? In questo caso quindi non ci dovrebbe essere N ?


Posted by blue_tech on 21-03-2011 18:21:

Talking

Originally posted by number15
Dai un'occhiata qua, dovrebbe aiutarti.
http://blog.fl3x.de/2005/10/26/mate...views-in-mysql/


grazie mi sembra già un ottimo passo in avanti... proverò, vediamo cosa salta fuori :)


Posted by gab217 on 22-03-2011 15:26:

Ciao a tutti volevo chiedervi voi cosa intendete e come trovate il valore numerico il valore numerico proporzionale alla similarità tra utenti?


Posted by Snakethesniper on 22-03-2011 16:21:

Originally posted by gab217
Ciao a tutti volevo chiedervi voi cosa intendete e come trovate il valore numerico il valore numerico proporzionale alla similarità tra utenti?

Se non erro sul testo parlava di numero dei giochi posseduti/provati che si hanno in comune, ma potrei sbagliarmi, al momento non ho il testo sotto mano.

Avrei invece una domanda sulla questione amicizie, io ho fatto un'associazione ricorsiva in Utente visto che appunto l'amicizia è tra due entità di tipo utente, dite che è corretto?


Posted by gab217 on 22-03-2011 16:59:

allora nessun numero?
Per quanto riguarda l'amicizia ankio ho ragionato nel tuo stesso modo quindi mi sembra corretto.
Come hai gestito invece dove chiedeva di realizzare tramite viste il profilo comprensivo di amici e di giochi posseduti/votati?


Posted by Snakethesniper on 22-03-2011 17:08:

Originally posted by gab217
allora nessun numero?
Per quanto riguarda l'amicizia ankio ho ragionato nel tuo stesso modo quindi mi sembra corretto.
Come hai gestito invece dove chiedeva di realizzare tramite viste il profilo comprensivo di amici e di giochi posseduti/votati?

io sto finendo ora di fare lo schema logico quindi non ho ancora affrontato il problema xD


Posted by Snakethesniper on 23-03-2011 14:57:

Qualcuno che ha già fatto e consegnato il progetto mi saprebbe dire se il tipo ENUM è accettato anche se non è uno standard?


Posted by antares85 on 23-03-2011 16:31:

Ciao a tutti!
Domandona: la/le tabelle usate ad hoc per le materialized views sono da includere nello schema ER???


Posted by Snakethesniper on 23-03-2011 18:18:

Visto che le slide del prof riguardo la connessione al database e il passaggio dei parametri la trovo incompleta e poco chiara, qualcuno sa consigliarmi dove trovare queste informazioni? Magari relative a postgresql


Posted by Snakethesniper on 24-03-2011 18:20:

Qualcuno mi sa dire (se usa apache e php) che versione usa di questi?
Continuo ad avere l'errore:

Fatal error: Call to undefined function pg_connect()

nonostante abbia decommentato l'estensione che punta a pgsql.dll e seguito TUTTO quello che c'era da seguire...
sono su windows 7

edit: risolto, a quanto pare era un problema della dll nell'ultima versione


Posted by zandrek on 25-03-2011 12:09:

qualcuno mi sa dire una cosa: devo realizzare la funzione/trigger che cancella giochi troppo vecchi e non considerati da nessuno: so fare funzioni che si attivano in seguito ad una insert o delete o robe simili, ma come faccio ad attivare una funz/trigger in base al tempo???????
(cioè tipo far partire il trigger/funzione ogni giorno o ogni settimana)


Posted by number15 on 25-03-2011 12:12:

Di solito si usa cron, ma mi sembra difficile che sia richiesto in un progettino

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by zandrek on 25-03-2011 13:17:

di cron ho letto qualcosa ma non ho la minima idea di come usarlo ...
comunque

Entro pero un periodo di tempo stabilito dall'amministratore, i nuovi
gioci inseriti devono essere scelti come posseduti/provati e/o desiderati da un numero minimo di
utenti, altrimenti vengono automaticamente eliminati. Questa procedura ha lo scopo di evitare
l'inserimento di un numero eccessivo di giochi inesistenti.


se l'utente zandrek esempio segnala starcraft 2 ma rimane l'unico per due mesi a commentare/votare di starcraft 2 io toglierei starcraft2 ma come faccio a toglierlo in automatico?


Posted by number15 on 25-03-2011 13:27:

Non vedo alternative all'usare cron.

Per far qualcosa di simile potresti sennò fare un trigger/procedura che si attiva ad ogni inserimento di un gioco, andando a controllare se c'è qualcosa di inutilizzato da tot tempo e cancellarlo.

Non è la stessa cosa ovviamente, però è l'unica che mi viene in mente senza schedulare

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by zandrek on 25-03-2011 13:47:

riguardo la seconda parte del tuo messaggio :

Per far qualcosa di simile potresti sennò fare un trigger/procedura che si attiva ad ogni inserimento di un gioco, andando a controllare se c'è qualcosa di inutilizzato da tot tempo e cancellarlo.

era venuto in mente anche a me: cioè se un utente qualsiasi fa un'azione qualsiasi (intendo una registrazione di un nuovo utente piuttosto che l'inserimento di un gioco o voto) faccio attivare il trigger. ho solo un dubbio: se il database non viene toccato per 6 mesi non succede nulla e nessun gioco verrà mai cancellato....

per il cron ok posso fare uno script .sh ad esempio e farlo partire
code:
00 00 * * * /usr/bin/cancella.sh
ogni giorno a mezzanotte però
1) dove salvo lo script sh? cioè sul mio pc ok ma come faccio a consegnarlo assieme al progetto??
2) nello script dovrei collegarmi al DB attrraverso "psql" ?


intanto grazie per le risposte...


Posted by gab217 on 25-03-2011 13:50:

Come gestite questa richiesta "il profilo di ogni utente comprensivo della lista amici e dei giochi posseduti e/o votati è realizzato tramite viste".
Grazie


Posted by zandrek on 25-03-2011 14:03:

Originally posted by gab217
Come gestite questa richiesta "il profilo di ogni utente comprensivo della lista amici e dei giochi posseduti e/o votati è realizzato tramite viste".
Grazie



io ho inteso cosi: quando sei nella pagina del tuo profilo faccio fare alla pagina php delle query sul database ma non vado nelle tabelle ma cerco nelle viste; faccio create view e poi select id_u2 from amicizia where id_u1=gab217...


edit: ovviamente nella view devono essere presenti non solo gli amici ma anche i giochi provati ecc......


Posted by number15 on 25-03-2011 15:34:

Originally posted by zandrek
riguardo la seconda parte del tuo messaggio :

era venuto in mente anche a me: cioè se un utente qualsiasi fa un'azione qualsiasi (intendo una registrazione di un nuovo utente piuttosto che l'inserimento di un gioco o voto) faccio attivare il trigger. ho solo un dubbio: se il database non viene toccato per 6 mesi non succede nulla e nessun gioco verrà mai cancellato....

per il cron ok posso fare uno script .sh ad esempio e farlo partire
code:
00 00 * * * /usr/bin/cancella.sh
ogni giorno a mezzanotte però
1) dove salvo lo script sh? cioè sul mio pc ok ma come faccio a consegnarlo assieme al progetto??
2) nello script dovrei collegarmi al DB attrraverso "psql" ?


intanto grazie per le risposte...


Si, ovviamente se usi un trigger e nessuno utilizza il sito, non verrà mai cancellato niente.

Per cron no idea, se ne occupa il mio collaboratore di quello :D

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by zandrek on 25-03-2011 16:28:

Talking

proverò a sentire il prof Ferrara se ritiene accettabile il trucchetto o vuole una roba seria tipo cron o similia...intanto grazie...se poi il tuo "collaboratore" ha voglia di scrivere qua due righe è il benvenuto :D:D:D:D:D:D:D


Posted by pirlo21 on 25-03-2011 18:08:

vi chiedo un dubbio credo banale che mi è venuto in quanto sono poco pratico di php...
Voi come implementate le varie funzioni degli utenti? Create una pagina php per ognu funzione a sua disposizione oppure riuscite a svolgere tutto sulla stessa pagina? Ad esempio dopo il login il mio utente accede alla sua pagina utente.php
Per richiedere l'amicizia di qualcuno andrà su amici.php, per vedere la lista dei giochi andrà su giochi.php ecc ecc...
Credete sia giusto oppure c'è una soluzione per svolgere le funzioni sulla stessa pagina?


Posted by zandrek on 25-03-2011 18:24:

io lascerei come hai fatto tu, magari è più carino avere meno pagine ma sono 3 punti...e ho fatto più o meno uguale....


Posted by blue_tech on 26-03-2011 11:35:

ma le viste per il profilo vanno ricreate ogni volta che richiamo il profilo di un utente? (sennò non si aggiornano) mmm

cioè la sequenza in teoria è:

1) richiamo il profilo
2) creo o sostituisco la vista (per esempio che raccoglie gli amici)
3) faccio la select sulla vista per tirare fuori gli amici dell'utente in questione

che ne dite?


Posted by number15 on 26-03-2011 11:38:

Che viste dovete creare?

Con vista non aggiornabile si intende che non puoi aggiornare le tabelle su cui opera la vista facendo un'update sulla vista.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 26-03-2011 12:04:

le specifiche dicono che il profilo dell'utente deve essere fatto tramite viste (per mostrare gli amici, i giochi posseduti/desiderati ecc...) ora considerando che per aggiornare i dati di una vista bisogna sostanzialmente ricrearla mi chiedevo se la sequenza indicata sopra vi sembrava valida...


Posted by number15 on 26-03-2011 12:28:

La vista (NON materializzata) non è altro che una query.
Non necessita di nessun aggiornamento, visto che ogni volta che la chiami riesegue la query in quel momento.

Es. tu crei questa vista che ti estrae le varie coppie gioco/utente

create view giochi_utenti as
select g.id_gioco, gioco, u.id_utente, utente
from utente u, gioco g, gioco_utente gu
where u.id_utente = gu.id_utente and g.id_gioco = gu.id_gioco


Ora quando la chiami con
select * from giochi_utenti

viene eseguita semplicemente la query contenuta nella vista.


Il concetto di vista non aggiornabile (solitamente quando formata da join tra più tabelle) è che NON puoi fare:
update giochi_utenti set gioco = 'nba 2k11' where id_gioco = 10

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 26-03-2011 17:18:

ok questo lo so però le viste vengono usate come fossero tabelle in modo che le operazioni vengano fatte su un sottoinsieme di tutti i possibili dati...

questo mi fa pensare che se io devo visualizzare qualcosa:

1) creo la vista che corrisponderà al risultato della query in quel momento
2) faccio le query che mi servono sui dati nella vista invece che su tutte le tabelle complete

3) quando eseguo un aggiornamento del database (quindi delle tabelle principali -> per esempio aggiungo un amico) le viste non si aggiornano in automatico ma continuano a mostrare i dati di quando le ho create (quindi l'amico appena aggiunto non risulta nella vista) e quindi ogni volta che io chiamo la pagina devo ricreare le viste per aggiornare i dati che queste contengono.

Voglio capire se questa mia visione delle cose è giusta o no.


Posted by number15 on 26-03-2011 17:27:

Allora stai parlando di viste materializzate ed è tutt'altro discorso.

Qualche post prima se ne parlava e ho postato un link ad un altro ragazzo su come gestirle.

Prova a darci un'occhiata

Edit: eri tu :D

Comunque mi sfugge il senso di tutto ciò: dove sta il vantaggio a materializzare quella vista, se devi sempre ricrearla ad ogni aggiornamento?

Ho dato un'occhiata al progetto: per me intende altro.

Originally posted by progetto

L'utente analista ha funzioni di monitoraggio della comunita. Egli ha accesso a un insieme di statistiche. In particolare, per ogni utente e possibile calcolare un profi lo che
riporta il numero di giochi posseduti/provati in relazione al numero medio dei giochi posseduti/provati da tutti gli utenti.

Tutte le funzioni di statistica per l'utente analista sono materializzate e memorizzate in opportune tabelle nella base di dati. E' pertanto necessario realizzare gli opportuni trigger che
mantengano aggiornate tali informazioni a seguito dell'inserimenti di nuovi giochi, dell'acquisizione di nuovi voti e opinioni sui giochi esistenti, e della de nizione di nuove relazioni di amicizia
fra utenti.


Secondo me intende tipo che il numero di giochi posseduti lo devi salvare in una tabella, cioè metti un campo giochi/posseduti in utente e fai un trigger che ad ogni 'associazione' ti aumenta di 1 il campo.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 26-03-2011 18:09:

no no allora se vedi l'ultima frase del punto 2 che viene dopo quello che hai riportato, parla del profilo dell'utente.

in sostanza lui vuole che siano usate viste materializzate per le funzioni di statistica e (ho parlato col prof) le informazioni devono proprio essere salvate come tabelle su DB. Quindi lui mi ha detto fai la vista con una select e la salvi su db come fosse una tabella.

poi l'ultima frase dice: "Il profilo di ogni utente comprensivo della lista di amici, dei giochi posseduti e/o votati è realizzato tramite viste"

e qui presumo si intendano viste normali e non materializzate.

la differenza sta solo nel fatto che i dati non vengono fisicamente salvati in una tabella su db ma le viste all'atto pratico vengono usate come fossero tabelle anche se sono virtuali.

per quello penso che per aggiornare una vista l'unico sistema sia ricrearla ogni volta (come viene poi fatto anche nell'articolo che mi hai linkato)

EDIT: è proprio perchè anche a me sfugge il senso di ricreare ogni volta le viste che sto cercando di capire se sto ragionando bene oppure no.


Posted by number15 on 26-03-2011 18:22:

Se te l'ha detto il prof, allora fai come dice lui e copia dal link il procedimento. Mi pare sia fatto bene.

Ad ogni inserimento/aggiornamento (trigger) richiami la cancellazione e creazione della tabella con i dati che ti servono e poi le query del profilo le fai su questa nuova tabella.

In pratica riflettendoci il vantaggio sarebbe che esegui la query 'pesante' solo in caso di aggiornamento di quelle tabelle e non ogni volta che devi visualizzare il profilo.

Il poco senso è che sarà una query con 3 join quindi....

Edit: non pensarle come viste, pensale come tabelle di analisi (report), sennò fai confusione.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 26-03-2011 18:53:

ok ma a questo punto mi comporto così sia con le viste materializzate che con quelle non materializzate giusto? o meglio più che giusto, ti sembra sensato? :P


Posted by number15 on 26-03-2011 19:05:

no, le non materializzate una volta che le hai create si aggiornano da sole, non son altro che una scorciatoia: al posto di riscrivere la query con le join ogni volta, fai una select * sulla vista.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by asgar on 03-04-2011 13:37:

io ho un dubbio ancora più generale.. a che servono le viste per il profilo?
non si fa prima a mettere sulla pagina i dati dell'utente ed i giochi che possiede/vorrebbe facendo una query su quelle tabelle?
cioè, non saprei proprio che dati mettere nella vista senza creare ridondanza, voi come lo gestite?


Posted by number15 on 03-04-2011 14:49:

Crei la vista che fa le query che ti servono e utilizzi quella nella pagina.

Ovviamente a sto livello le viste servono a poco, però pensa se al posto di avere 'il sito' dove vedere i profili, dovresti controllarli da phpmyadmin, sqlyog o simili.
Dovresti ogni volta riscriverti la query con le join, mentre se ti sei fatto la vista è tutto già pronto.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by asgar on 04-04-2011 09:41:

ok proverò ad implementarle così :)
il fatto di cancellare un gioco che non è stato aggiunto da nessuno invece come lo gestite?


Posted by pirlo21 on 12-04-2011 20:16:

qualcuno mi saprebbe dire dove metterebbe i trigger nel progettino? non ne vedo molta necessità...
e poi nel testo c'è scritto che le amicizie e il profilo degli utenti sono gestiti tramite viste, mentre le statistiche in tabelle (aggiornate con trigger)

questo vuol dire che dobbiamo creare delle tabelle apposite x contenere i dati delle statistiche e le viste x ciò che riguarda l'utente?
Oppure vuol dire che i dati per le statistiche li estrapoliamo direttamente dalle tabelle, mentre per gli utenti passiamo tramite le viste?


Posted by asgar on 13-04-2011 12:45:

Originally posted by pirlo21
[B]
questo vuol dire che dobbiamo creare delle tabelle apposite x contenere i dati delle statistiche e le viste x ciò che riguarda l'utente?

questa


Posted by pirlo21 on 13-04-2011 12:58:

non ne capisco molto il senso...cioè ok per le viste, ma che senso ha creare una tabella con gli stessi dati delle tabelle di partenza? Le statistiche non posso calcolarle con delle query direttamente dalle tabelle di partenza?

Dovrei quindi farmi la tabella:
gioco, numero di utenti che lo possiedono (ad esempio) e tenerla aggiornata con dei trigger ad ogni modifica? Cosa che io farei con una query senza creare un altra tabella


Posted by number15 on 13-04-2011 13:08:

Prova a leggere nei post precedenti che si parlava di viste materializzate (non ricordo se era questo il caso).

Teoricamente avresti delle query molto più leggere da eseguire visto che non servirebbero le join.

Di contro c'è che sta tabella va continuamente aggiornata.

Conviene? Dubito in un progettino del genere, ma se è richiesto...

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by Guccio on 19-05-2011 14:52:

Utenti

Scusate ho un dubbio riguardo le categorie di utenza: devo crearle nel database, assegnandogli i relativi permessi, e poi far connettere dall'applicazione gli utenti che appartengono a questa categoria attraverso questo account? Oppure devo creare un account per ogni utente della categoria con i relativi permessi?


Posted by Guccio on 19-05-2011 18:16:

Un'ultima cosa...le tabelle che contengono le statistiche vanno inserite nel modello e/r?
essendo entità a sè stanti mi chiedevo se non sia inutile


Posted by fcaridi on 25-05-2011 16:43:

Sviluppo Php

Qualcuno sa suggerire eventuali tools di supporto allo sviluppo in php?
Cakephp puo' tornare utile?
Ve ne sono altri ...?
Grazie


Posted by *°§_-??? on 29-05-2011 11:46:

Re: Sviluppo Php

Originally posted by fcaridi
Qualcuno sa suggerire eventuali tools di supporto allo sviluppo in php?
Cakephp puo' tornare utile?
Ve ne sono altri ...?
Grazie


Se hai familiarità con eclipse io mi ero trovata bene con PDT http://www.eclipse.org/pdt/

__________________
:pccrash::pccrash:


Posted by blue_tech on 08-09-2011 18:31:

ho un problema... ho una procedura che esegue due comandi:

fa il DROP di una tabella se esiste;
Crea la tabella precedentemente eliminata;

poi ho il trigger che richiama la procedura quando accade un evento.

Il problema è che a fronte dell'evento io ottengo l'errore:

"Explicit or implicit commit is not allowed in stored function or trigger. "

Cosa c'è che non va? La procedura è così:

code:
DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `procedura`() BEGIN drop table if exists tabella; CREATE TABLE tabella SELECT a FROM b WHERE c AND d; END


help :(


Posted by number15 on 08-09-2011 18:46:

Se sposti il codice della procedura dentro il trigger che la chiama?

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 08-09-2011 18:49:

non mi permette nemmeno di crearlo segnalandomi lo stesso errore... :/


Posted by number15 on 08-09-2011 19:02:

Credo che il problema sia la drop nel trigger che non vuole.
Col truncate e la insert hai provato?

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 08-09-2011 19:14:

mi da l'errore anche solo con la create table...

io devo eliminare la tabella se già esiste e subito dopo crearla.

truncate e insert non agiscono sulla tabella ma sulle righe... sbaglio?
e poi ho letto questo che sconsiglia il truncate http://inderpreetsingh.com/2010/09/...ion-or-trigger/


Posted by number15 on 08-09-2011 19:17:

Credo si riferisca a myisam, visto che su innodb la truncate non cancella la tabella e la ricrea.

Intendevo qualcosa del tipo:
CREATE TABLE tabella SELECT a FROM b WHERE c AND d if not exists tabella;
truncate table tabella;
INSERT INTO tabella SELECT a FROM b WHERE c AND d;

Edit: nella create potresti usare il like o l'as (controlla)

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by number15 on 08-09-2011 19:21:

Se rompe ancora il cazzo, prova a creare la tabella fuori dal trigger e dentro al trigger metti solo la truncate e la insert

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 08-09-2011 19:36:

provo così e vediamo cosa succede per ora grazie ;)


Posted by number15 on 08-09-2011 19:44:

Nel caso puoi usare REPLACE al posto di truncate+insert.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 08-09-2011 19:44:

dunque confermo che la TRUNCATE provoca lo stesso messaggio di errore...

Per risolvere basta seguire il consiglio dell'articolo che ho linkato sopra

in sostanza al posto di:

TRUNCATE TABLE nometabella

bisogna mettere:

DELETE FROM nometabella
(senza l' * )

In sostanza:
1) creo la tabella la prima volta a mano
2) creo la procedura che svuota la tabella e la riempie di nuovo con i dati aggiornati

Così sembra funzionare tutto.

Grazie :D


Posted by number15 on 08-09-2011 20:05:

Ottimo.

Ma è innodb la tabella su cui esegui la truncate?
Perché truncate = delete from senza where, quindi non capisco perché non vada.

Edit: ecco la spiegazione:
For an InnoDB table before version 5.0.3, InnoDB processes TRUNCATE TABLE by deleting rows one by one. As of MySQL 5.0.3, row by row deletion is used only if there are any FOREIGN KEY constraints that reference the table. If there are no FOREIGN KEY constraints, InnoDB performs fast truncation by dropping the original table and creating an empty one with the same definition, which is much faster than deleting rows one by one.

Si vede che non hai fk allora.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 09-09-2011 12:05:

si è innodb... il problema stando all'articolo nasce da questa osservazione:

Depending on version and storage engine, TRUNCATE can cause the table to be dropped and recreated. This provides a much more efficient way of deleting all rows from a table, but it does perform an implicit COMMIT. You might want to use DELETE instead of TRUNCATE.


In pratica la TRUNCATE fa una commit implicita mentre la delete no e quindi ecco la differenza.


Posted by number15 on 09-09-2011 12:08:

Si si, infatti ti ho postato la spiegazione. Dalla versione 5.0.3 la truncate è diventata una drop + una create, mentre prima era una semplice delete.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 09-09-2011 12:12:

già ;)

oggi provo ad implementare tutto e faccio tutte le prove del caso ma da quel che ho visto ieri direi che funziona tutto :)


Posted by blue_tech on 09-09-2011 17:12:

confermo che funziona tutto... ho implementato 3 viste materializzate con i relativi trigger e procedure e nell'utilizzo ho verificato che funziona tutto correttamente :)


Posted by number15 on 09-09-2011 17:32:

;-)

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 10-09-2011 18:05:

abbiate pazienza sto sistemando gli ultimi punti mancanti e ho un problema con il punto dove chiede che i giochi che dopo un tot di tempo non vengono presi da un numero di utenti, vengano cancellati in automatico... sinceramente non saprei come fare... ho sentito parlare di cron, sto guardando gli eventi in mysql ma non capisco bene come farlo...

so che ad ogni inserimento dovrei far partire un timer che controlli al suo scadere se qualcuno ha usato il suddetto gioco e se non tovo nessuno devo cancellare il gioco...

ma tecnicamente come cribbio lo faccio? :/


Posted by number15 on 10-09-2011 18:17:

Guarda qualche pagina fa che ne avevo discusso con un altro ragazzo.

Per cron non so aiutarti nello specifico, ma, ripeto, mi sembra 'complesso' per un progettino.

Puoi sennò fare col trigger che avevo consigliato all'altro ragazzo.

Comunque sentirei il prof per capire bene cosa vuole

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 10-09-2011 19:01:

gli ho già scritto per chiedere una delucidazione su una richiesta ma non mi ha ancora risposto -_-' quasi non ci spero che mi possa aiutare...


Posted by blue_tech on 10-09-2011 19:02:

ma un trigger cmq non basta... nel senso che sicuramente sarà un trigger a far partire il timer, ma il controllo e l'eventuale eliminazione deve farlo qualcos'altro...


Posted by number15 on 10-09-2011 20:21:

Puoi fare un trigger che fai partire dopo una qualche azione e dentro gli fai fare il controllo sulle date.

Con cron non è una azione a far partire un trigger, ma Ad esempio fai che ogni giorno alle 5 di mattina va eseguita una query di delete controllando le date e fine

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 12-09-2011 17:21:

ok credo di aver risolto però una cosa non mi viene... come gli dico in un trigger:

modifica il dato di una tabella quando la primarykey è uguale a questo codice che ho appena inserito in pippo?

il trigger si attiva after insert on PIPPO

EDIT:

spiego meglio con un esempio:

1) inserisco in PIPPO la coppia cod1,cod2
2) si attiva il trigger
come gli dico:

Aggiorna cod3 in PLUTO dove PLUTO.cod1= cod1 che ho appena inserito

???


Posted by number15 on 12-09-2011 17:30:

Non ho capito.
La pk è sempre in pippo?

Prova a far un esempio.

Il costrutto potrebbe essere:
IF NEW.codice = (SELECT xxx FROM xxx)
THEN
UPDATE tabella

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by blue_tech on 12-09-2011 17:35:

mmm ho appena risolto bypassando il problema...

riaggiorno lo stato del campo in PLUTO per tutte le righe facendo un normale confronto... così funziona ;)


Posted by Guccio on 25-09-2011 19:25:

Lightbulb Tabelle delle statistiche

Raga ma voi le tabelle delle statistiche le avete rapresentate anche nel diagramma e/r? se si come?


Posted by pirlo21 on 30-09-2011 14:32:

qualcuno ha consegnato in questa sessione 26-30 settembre?


Posted by blue_tech on 30-09-2011 16:20:

si ho portato ieri il mio e c'erano già altre buste sulla scrivania... non erano molte ma non so se erano tutte...


Posted by Gnappo89 on 30-09-2011 20:18:

Anche io ieri!


Posted by pirlo21 on 30-09-2011 23:52:

anche io ieri ma ho trovato chiuso e l'ho lasciato nella posta :)
calendario orali?? sapete più o meno quanto ci vuole prima che esca?


Posted by Gnappo89 on 01-10-2011 08:46:

non ne ho idea...


Posted by blue_tech on 01-10-2011 10:46:

sul sito diceva solo che l'avrebbe pubblicato dopo il 30... teniamo d'occhio il sito e vediamo un pò... :/


Posted by drakess81 on 01-10-2011 20:48:

Prova

Ciao,

anche io ho consegnato ieri ma purtroppo ho fatto un pasticcio dell'ultimo minuto: tentando di mettere i CSS non mi compilava più nulla. Ho consegnato una versione che compila ma cecchia di 3 giorni quindi con pochi dati nel network e qualche bug.
Che voi sappiate la prova avverrà caricando il CD consegnato e quindi sarò valutato sulla versione zoppa oppure posso sistemare le cose per la prova e caricare tutto on line?

Qualcuno può descrivere come avverrà/quanto dura?


Posted by number15 on 02-10-2011 14:37:

Io portai il mio portatile con il quale feci vedere il progetto.

Loro avevano in mano solo lo schema ER e il dump per guardare i trigger e la struttura.

__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com


Posted by antares85 on 03-10-2011 15:24:

è uscito il calendario delle discussioni.
ognuno dovrebbe vedere il suo giorno ed il suo orario collegandosi alla solita piattaforma accessibile dal link postato dal prof.


Posted by blue_tech on 03-10-2011 16:19:

potrebbero anche fare le cose un pò meglio...

dovete loggarvi e poi a sinistra andare su iscrizione esami per vedere il tutto e anche lì ci si trova davanti ad una schermata con mille info contrastanti... -_-'

nella mia dice:

data esame -> 12/10/11
iscrizione esame -> 03/10/11
info esame -> 19/10/11 ore 10.30

Non gli viene in mente che magari data esame e info esame sono un pò ambigue? mi presento il 12 o il 19? XD vabbè tengo buono il 19 visto che c'è anche l'ora, che dite?


Posted by pirlo21 on 03-10-2011 16:53:

anche a me è scritto come te ma alle ore 11 quindi credo che vada bene il 19...

A proposito di date, spero che questa cosa sia flessibile perchè io ho superato lo scritto a settembre 2010 e in teoria questo appello è quello di settembre 2011, non ottobre (per la regola che il risultato di un esame è valido per un periodo massimo di un anno)...speriamo


Posted by drakess81 on 03-10-2011 17:47:

Pirlo: Per quanto riguarda l'aver fatto l'esame a settembre 2010 ti posso tranquillizzare: sono nella stessa situazione ed il prof. mi ha scritto che va bene questa sessione ma non oltre.

Purtroppo io mi sono iscritto ma sotto "info" non vedo nessun orario. A qualcun'altro è capitato?


Posted by blue_tech on 03-10-2011 17:57:

non dovresti iscriverti... devi andare a sinistra nella sezione iscrizione esami e dovrebbe già esserci la riga del tuo appello...


Posted by drakess81 on 03-10-2011 19:52:

Avevo l'appello sotto "applli disponibili" e mi sono iscritto... ora è sotto "info appello" ma non c'è indicazione di orario...


Posted by blue_tech on 03-10-2011 20:11:

ti conviene mandare una mail al prof


Posted by pirlo21 on 14-10-2011 10:36:

voi vi state preparando qualcosa per la discussione?? vengono fatte anche domande di teoria?


Posted by drakess81 on 15-10-2011 20:07:

Discussione

Tranquillo, la discussione a me non l'ha fatta il professore ma una ragazza (non so chi fosse).

1) Analisi schema concettuale: Non devono essere violate el forme normali, se c'è qualcosa di anomalo può chiderti se viene violate una forma normale e quale. Se c'è qualche gerarchia magari ti può venir chiesto il tipo ma non ci sono quesiti di teoria.

2) Si passa poi a provare l'applicazione sul vostro PC ed in particolare si osserva la funzione per l'affinità degli amici e gli altri quesiti principali. Eventuali registrazioni utente o elementi grafici hanno peso basso o nullo quindi non vale la pena perderci tempo.

Il tutto dura meno di 20 minuti; non so se anche il professore operi così.

Se il sito è malfunzionante si conferma il voto dello scritto, se qualcosa non va (come a me) si aggiunge 1 o 2 punti.

In bocca al lupo!


Posted by blue_tech on 15-10-2011 21:57:

Ma verbalizzano direttamente il voto finale su libretto?


All times are GMT. The time now is 19:42. Pages (2): [1] 2 »
Show all 151 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.