.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)
-- Progetto Basi 2011/2012 (http://www.dsy.it/forum/showthread.php?threadid=42537)


Posted by pintu on 17-12-2011 13:29:

Progetto Basi 2011/2012

Apro questo thread nella speranza che sia di aiuto per tutti quelli che devono fare il progetto di basi di dati! Magari scambiandoci info, conoscenze ecc possiamo aiutarci tutti quanti a finire questo benedetto progetto! Qualcuno lo ha già iniziato?? Domanda stupida...se ho la presenza di 3 categorie (utente reg, utente nonreg, admin) dovrò avere una tabella anche per questi nel mio database o è una cosa completamente a parte legata solo al php???


Posted by SanJuanWolf89 on 18-12-2011 10:24:

certo!!per amministratore e per utente registrato sicuramente , per quanto riguarda l ultente non registrato no perche non deve esserci login..in poche parole l ultente non registrato è il visitatore occasionale quindi non deve esseere identificato da nulla


Posted by xSharKMaNx on 19-12-2011 09:26:

quanto tempo si ha a disposizione per fare il progetto?

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by zack1988 on 19-12-2011 11:00:

1 anno


Posted by xSharKMaNx on 19-12-2011 11:46:

dove trovo la traccia del progetto?
mentre per quanto riguarda l'orale ?

Grazie Maddy

__________________
Perché, mentre il manganello può sostituire il dialogo, le parole non perderanno mai il loro potere; perché esse sono il mezzo per giungere al significato, e per coloro che vorranno ascoltare, all'affermazione della verità. E la verità è che c'è qualcosa di terribilmente marcio in questo paese. (V)

I popoli non dovrebbero aver paura dei propri governi, sono i governi che dovrebbero aver paura dei popoli. (T.J)


Posted by pintu on 19-12-2011 14:14:

Originally posted by SanJuanWolf89
certo!!per amministratore e per utente registrato sicuramente , per quanto riguarda l ultente non registrato no perche non deve esserci login..in poche parole l ultente non registrato è il visitatore occasionale quindi non deve esseere identificato da nulla



Mmmm non mi è chiaro :( nel senso...io nel mio database avrò per esempio una tabella UTENTI con attributi: nome (es: pippo) e tipoUser (es: admin)...ma in che modo la tabella è collegata alle altre nel database??


Posted by number15 on 21-12-2011 15:26:

Hai fatto il diagramma ER?
Da lì vedi i collegamenti tra le varie tabelle.
A livello logico le tabelle saranno poi 'collegate' dalla chiavi esterne.

A livello applicativo la tabelle utente ti servirà anche per mostrare/offrire funzionalità diverse a seconda della tipologia di utente

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


Posted by SanJuanWolf89 on 23-12-2011 10:33:

Allora:
tabella utenti registrati(
dati.. (id login e password)
)

taabella amministratore(
dati...
)

tabella annuncio(
dati tra cui riferimento all'utente che l ha pubblicato, ovvero riferimento alla tabella utente registrato
)

in poche parole ogni annuncio viene pubblicato da un utente nella tabella annuncio avrai una colonna utente


Posted by number15 on 23-12-2011 14:08:

Che dati andresti a mettere in AMMINISTRATORE?

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


Posted by pintu on 23-12-2011 19:37:

Ma (ai fini del progetto) io dovrei creare degli utenti fittizi nella mia base di dati oppure devo poter aggiungere degli utenti? Nel senso...ok un utente registrato pubblica un annuncio e quindi quel determinato annuncio si riferisce all'utente che l'ha pubblicato. Ma per gli utenti che visitano semplicemente la base di dati ( e che quindi non hanno nessun riferimento alla tabella annunci) deve essere creata una tabella a parte?? Nella tabella amministratore io metterei semplicemente la mia user e la mia password dato che presuppongo di essere l'unico amministratore del mio DB o no?


Posted by number15 on 23-12-2011 21:59:

La popolazione del database viene ovviamente fatta 'a monte'.
Il fase di discussione del progetto però il prof. può chiedere l'iscrizione di un utente al sito attraverso il form di registrazione.
A quel punto ovviamente l'utente andrà salvato.
Non so se son previsti pannelli per poter inserire annunci. Il tal caso potrebbe chiederti di inserire un annuncio e di associarlo ad un utente.

Per i visitatori, quindi utenti NON registrati, che dati andresti a salvare in una tabella?

Per quale motivo per salvarti la user e la password dell'admin creeresti una tabella amministratore?

Ps. sto cercando di farti(vi) ragionare. Se preferisci risposte più dirette e 'concrete' dimmelo ;)

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


Posted by pintu on 24-12-2011 10:15:

Gentilissimo :) Comunque in effetti io non creerei una tabella amministratore, era per rispondere alla domanda che hai rivolto a SanJuanWolf89! Io creerei una tabella UTENTE con attributi nomeUser, password, tipoUser. nomeUser diventerebbe chiave esterna per il collegamento con la tabella ANNUNCIO, mentre tipoUser (che avrebbe dominio: user, admin) servirebbe per individuare il ruolo dell'utente all'interno del database. Può essere una soluzione sensata?


Posted by pintu on 24-12-2011 10:16:

PS: comunque appena terminerò lo schema ER lo posto e approfitterò nuovamente della tua pazienza per eventuali consigli :)


Posted by number15 on 24-12-2011 10:56:

È ovviamente la soluzione corretta ;-)

Un consiglio: utilizza sempre un campo intero (int, smallint ecc) AUTO INCREMENT come identificativo/chiave primaria ed eventualmente metti come UNIQUE username o mail o entrambi (non la coppia).
Quando devi poi creare delle chiavi esterne, avrai degli int da confrontare e non delle stringhe.
Come prestazioni c'è un abissso!

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


Posted by pintu on 24-12-2011 13:30:

quindi aggiungo alla tabella UTENTE un campo id (integer) che fa riferimento alla tabella annunci?


Posted by number15 on 24-12-2011 15:44:

Si.
TI faccio un esempio ("pseudocodice"):
UTENTE(id_utente, username, password, email, tipo_utente);
id_utente MEDIUMINT AUTO_INCREMENT;
PK(id_utente);
UNIQUE(email);
UNIQUE(username);

ANNUNCI(id_annuncio, xxx,xxx, id_utente);
FK(id_utente) REFERENCES utente(id_utente);

E' l'id_utente in annunci che fa riferimento ad utente e non il contrario ;)

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


Posted by pintu on 27-12-2011 19:54:

Come sempre grazie per le risposte e la pazienza :) Mi potresti spiegare che differenza ci sarebbe se fosse il contrario??

PS: ho scaricato e installato apache sul mio portatile. Ora per completare l'opera dovrei scaricare php , postgres e phppgadmin per poter lavorare nello stesso ambiente del laboratorio di DB. Qualcuno riesce a trovare un link decente per scaricare php?? Non riesco a trovare nessun installer, solo file zip pieni di cartelle e altri file php e sinceramente non so cosa farne -.-


Posted by number15 on 27-12-2011 22:41:

Semplicemente tu la chiave esterna la metti su una chiave peimaria di un altra tabella. Quindi tu crei id_utente in Utente come chiave primaria mentre id_utente in Annunci è chiave esterna riferita a id_utente in Utente. Questo garantisce che ogni annuncio sia associato ad un utente esistente nella base di dati.

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


Posted by CowBoy on 27-12-2011 22:48:

Non riesco a trovare nessun installer, solo file zip pieni di cartelle e altri file php e sinceramente non so cosa farne -.-
Scarica il zip e leggi con attenzione il README... prima di aprirlo libera un paio di chakra. Io avevo usato php 5.3.

Per scaricare php vai su http://www.php.net/downloads.php
Se usi WinOS vai su http://windows.php.net/download/

Ogni versione ha delle piccole accortezze, ma una volta letto con calma il README (meglio se due volte) l'installazione e l'integrazione dell'intero sistema(apache+postgres) dovrebbe essere facile ed immediata.

Ciao

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


Posted by pintu on 27-12-2011 23:47:

@number15: tutto chiaro grazie :)

@cowboy: apache è installato e funzionante. Avevo gia scaricato lo zip di php per windows, estratto i file all'interno di una cartella che ho chiamato php, e messo la cartella in C:\ . Ho trovato una guida sull'installazione di apache-php-postgres..secondo questa all'interno del mio zip dovrei avere un file php5ts.dll (che manca) che va messo nella cartella WINDOWS. C'è scritto poi di editare il file httpd.conf (nella cartella apache) inserendo 3 righe di codice. Seguo tutte le istruzioni alla lettera ma il mio simpaticissimo portatile mi dice che non posso editare il file httpd.conf perchè non riesce a trovare il path :( :( penso di essere vicino all'esaurimento!


Posted by CowBoy on 28-12-2011 13:17:

hehe... te l'ho detto di liberare un paio di chakra :)

L'installazione all'inizio sembra complicata, dagli un'altra chance. Nel frattempo vedo se riesco a trovare il materiale del progetto dove ho tenuto un diario dell'istallazione ;)

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


Posted by CowBoy on 28-12-2011 13:45:

Il file httpd.conf lo trovi (normalmente, per la versione 2.2) sotto:

C:\Programmi\Apache Software Foundation\Apache 2.2\conf\

Quindi vai sul Prompt, posizionati sulla cartella conf e scrivi:

notepad httpd.conf > invio

Al file di configurazione io ho aggiunto le seguenti 5 righe:

LoadModule php5_module "PHPinstallDIR/php5apache2.dll"
AddType application/x-httpd-php .php
PHPIniDir "PHPinstallDIR"
DocumentRoot "C:/prog"
LoadFile C:/Programmi/PostgreSQL/8.4/bin/libpq.dll

La riga Document root era dove io avevo i file del mio progetto. Attenzione anche alle cartelle nominate secondo le versioni, le mie e le tue non coincidono.

Se, come me, hai estratto i file di php sotto C:\php allora:

1- copia il file php.ini-recommended (del zip) nella cartella di estrazione
2- copia le seguenti librerie nella cartella di estrazione(ricontrollare le versioni):
- fdftk.dll
- libmysql.dll
- php5apache2_2.dll
- php5ts.dll

3- copiare il contenuto della cartella ext nella cartella [/b]extensions[/b]
4- modificare il contenuto di php.ini (il file al punto 1, rinominato) come segue, alcune voci sono presenti nel file:

include_path = "PHPinstallDIR\includes"
extension_dir = "PHPinstallDIR\extensions"
extension = php_mysql.dll
extension = php_pgsql.dll
extension = php_xsl.dll

5- riavvia il sistema (anche se fai delle modifiche minori)

Buon progetto!

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


Posted by pintu on 29-12-2011 00:10:

Grazie per la spiegazione CowBoy! :)


Posted by SanJuanWolf89 on 29-12-2011 10:03:

Rispondo a pintu...se fosse il contrario ogni utente sarebbe collegato a un solo annuncio invece ogni utente puo pubblicare qnt annuncio vuole..


Per quanto riguarda gli utenti non registrati io nn ho fatto alcuna tabella xk nn sn necessarie credenziali per verificarne l'accesso.
Per l amministratore invece si perche cmq l amministratore anche se uno solo ha un login e una password

Infine rispondo a number15..non sono daccordo sulla tua decisione d mettere come primary key l'id utente..io ho messo come primary key il nome dell'utente proprio cm succede qnd t registri da qualche parte...quello che è unico è il nome dell'utente e se e gia occupato da qlkn altro risulta non disponibile


Posted by pintu on 29-12-2011 18:20:

Dal testo del progetto:

"Utente registrato. Ha accesso al sistema mediante credenziali e può pubblicare annunci. Gli utenti registrati possono essere privati o agenzie. Il contatto dell'utente registrato che ha pubblicato l'annuncio è sempre visibile mentre l'insieme completo dei dati di registrazione di un utente è disponibile per la consultazione solo da parte degli amministratori del sistema."

1) "Gli utenti registrati possono essere privati o agenzie."

E' una richiesta che comporta le opportune modifiche al dbms o no? Nel senso...nella mia tabella UTENTE potrò avere 'gli utenti pinco pallino' e 'azienda srl' senza preoccuparmi del fatto che uno sia un privato e l'altro un azienda o secondo voi è necessario aggiungere alla tabella l'attributo 'tipoUtente' con dominio (privato, azienda)??

2)"Il contatto dell'utente registrato che ha pubblicato l'annuncio è sempre visibile mentre l'insieme completo dei dati di registrazione di un utente è disponibile per la consultazione solo da parte degli amministratori del sistema."

Ciò significa che un (utente registrato e non) può sapere solo che un certo annuncio è stato pubblicato da 'pincopallino' mentre l'amministratore può vedere tutte le info come nome, cognome, password?

So che sono domande banali ma prima di mettermi a smanettare volevo avere delle certezze su come impostare le tabelle :)


Posted by number15 on 29-12-2011 18:37:

Originally posted by SanJuanWolf89

Infine rispondo a number15..non sono daccordo sulla tua decisione d mettere come primary key l'id utente..io ho messo come primary key il nome dell'utente proprio cm succede qnd t registri da qualche parte...quello che è unico è il nome dell'utente e se e gia occupato da qlkn altro risulta non disponibile


Ciao, è ovviamente giusto anche la tua scelta ma pensa all'alla gestione/ottimizzazione di un database.
Ad esempio con la tua scelta la chiave esterna in annuncio sarà un varchar(20) mentre potrebbe essere uno smallint unsigned.
Quindi le join saranno molto più 'pesanti'.
Per indicare come unico un campo si usano gli indici Unique: in questo caso puoi farne due, uno per username e uno per email.
In ogni caso i controlli saranno gestiti dall'applicazione web e non dal database, cioè prima del db sarà l'applicazione a dirti che esiste già un utente con quello username.

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


Posted by number15 on 29-12-2011 18:45:

Originally posted by pintu
Dal testo del progetto:

"Utente registrato. Ha accesso al sistema mediante credenziali e può pubblicare annunci. Gli utenti registrati possono essere privati o agenzie. Il contatto dell'utente registrato che ha pubblicato l'annuncio è sempre visibile mentre l'insieme completo dei dati di registrazione di un utente è disponibile per la consultazione solo da parte degli amministratori del sistema."

1) "Gli utenti registrati possono essere privati o agenzie."

E' una richiesta che comporta le opportune modifiche al dbms o no? Nel senso...nella mia tabella UTENTE potrò avere 'gli utenti pinco pallino' e 'azienda srl' senza preoccuparmi del fatto che uno sia un privato e l'altro un azienda o secondo voi è necessario aggiungere alla tabella l'attributo 'tipoUtente' con dominio (privato, azienda)??

2)"Il contatto dell'utente registrato che ha pubblicato l'annuncio è sempre visibile mentre l'insieme completo dei dati di registrazione di un utente è disponibile per la consultazione solo da parte degli amministratori del sistema."

Ciò significa che un (utente registrato e non) può sapere solo che un certo annuncio è stato pubblicato da 'pincopallino' mentre l'amministratore può vedere tutte le info come nome, cognome, password?

So che sono domande banali ma prima di mettermi a smanettare volevo avere delle certezze su come impostare le tabelle :)


1) attributo tipo mettilo sempre: guarda poi se in base al tipo di utente ci sono informazioni diverse.
2) direi che non c'entra con db ma con applicazione. Comunque direi che psw non la vede neanche l'admin. Contatto credo sia email o telefono.

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


Posted by pintu on 29-12-2011 18:59:

Non avevo minimamente pensato a "contatto" in quel senso ahah xD Comunque volevo lasciarla visibile all'admin così se un utente l'ha dimenticata in qualche modo si recupera :D


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

Se scegli di non criptare allora sì, altrimenti ne dovresti creare una nuova in caso di dimenticanza.

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


Posted by SanJuanWolf89 on 02-01-2012 08:41:

Originally posted by number15
Ciao, è ovviamente giusto anche la tua scelta ma pensa all'alla gestione/ottimizzazione di un database.
Ad esempio con la tua scelta la chiave esterna in annuncio sarà un varchar(20) mentre potrebbe essere uno smallint unsigned.
Quindi le join saranno molto più 'pesanti'.
Per indicare come unico un campo si usano gli indici Unique: in questo caso puoi farne due, uno per username e uno per email.
In ogni caso i controlli saranno gestiti dall'applicazione web e non dal database, cioè prima del db sarà l'applicazione a dirti che esiste già un utente con quello username.



hai ragione hhahah anke s nn ho voglia d rimodificare tutto


cmq ho una domanda ..nel testo viene detto che ogni categoria puo avere caratteristiche ..in che senso???


Posted by number15 on 02-01-2012 09:58:

Guarda tipo attico.it che ha tipologie/categorie. Probabilmente ti aiuta.

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


Posted by SanJuanWolf89 on 02-01-2012 17:35:

Originally posted by number15
Guarda tipo attico.it che ha tipologie/categorie. Probabilmente ti aiuta.


Si ma c sono i nomi ma non caratteristiche..io nel mio progetto ho creato semplicemente una tabella categoria con attributo nome categoria con una decina d tuple..


Posted by number15 on 02-01-2012 18:14:

Ho riguardato meglio ed in effetti la prof divide diversamente rispetto al sito.

Non mi viene in mente nessuna caratteristica che avrebbe senso tabellare referita a categoria.

Dato che non è chiaro dalle specifiche io farei la divisione come attico.it usando categoria come categoria e tipologia come caratteristiche

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


Posted by SanJuanWolf89 on 02-01-2012 18:30:

Originally posted by number15
Ho riguardato meglio ed in effetti la prof divide diversamente rispetto al sito.

Non mi viene in mente nessuna caratteristica che avrebbe senso tabellare referita a categoria.

Dato che non è chiaro dalle specifiche io farei la divisione come attico.it usando categoria come categoria e tipologia come caratteristiche


Cmq ho pensato alla questione di creare una tabella solo x l'amministratore..se aggiungo una colonna a utente per identificarne il tipo vuol dire che ogni tupla di utente avra un attributo in piu..quindi in termini di spazio è molto piu pesante secondo me in quanto devo memorizzare tutti gli attributi tipo_utente invece se creo una sola tabella x l'amministratore risparmio in spazio no??


Posted by number15 on 02-01-2012 18:39:

La tua idea era di fare due tabelle identiche divise, una UTENTE e UNA ADMIN?

No, creeresti una tabella con n campi in più 'inutili'.
In ogni caso parliamo di sottigliezze, un campo in più o in meno non cambia assolutamente niente.
Il problema è che è strutturalmente sbagliato crearti due tabelle.

Tra l'altro a livello applicativo per estrarre le informazioni di un utente, non sapendo se è admin o utente normale, dovresti andarlo a cercare in due tabelle diverse?

Ragiona a livello concettuale: se i tipi di utenti fossero 4 (utente, admin, moderatore, gestore) faresti 4 tabelle?

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


Posted by SanJuanWolf89 on 03-01-2012 08:21:

Originally posted by number15
La tua idea era di fare due tabelle identiche divise, una UTENTE e UNA ADMIN?

No, creeresti una tabella con n campi in più 'inutili'.
In ogni caso parliamo di sottigliezze, un campo in più o in meno non cambia assolutamente niente.
Il problema è che è strutturalmente sbagliato crearti due tabelle.

Tra l'altro a livello applicativo per estrarre le informazioni di un utente, non sapendo se è admin o utente normale, dovresti andarlo a cercare in due tabelle diverse?

Ragiona a livello concettuale: se i tipi di utenti fossero 4 (utente, admin, moderatore, gestore) faresti 4 tabelle?


Amministratore e utente nn sn identiche, t lo scrivo in pseudocodice

table utente(
id_login, password, data registrazione, nome, cognome, email)

table amm(
id_login, password, email)

il fatto e che qnd l'amministratore vuole loggarsi l'applicazione va direttamente a cercare nella tabella amministratore (select * from amministratore) mentre se c si logga cm utente si cerca nella tabella utenti (select * from utente) mentre per l'utente non reg saremo senz'altro daccordo sul fatto che non servono credenziali.. cmq la mia idea è quella d creare due tabelle proprio per scindere i due ruoli e inoltre ora che m c hai fatto pensare si risparmi anke spazio in memoria a causa dui quell' attributo tipoUtente mentre con due tabelle non servirebbe piu..forse mi sbaglio di brutto ed e importante che c stiamo ragionando ma nn capisco proprio perchè dici che e concettualmente sbagliato creare due tabelle......se servono percjè nn crearle...


Posted by number15 on 03-01-2012 09:00:

È concettualmente sbagliato perché admin è sempre un utente.
Guardati il concetto di generalizzazione/specializzazione su slide o libro.
Puoi dividerle, ma devi tenere una stessa tabella i base. Puoi fare così se hai molti campi diversi:
UTENTE (id_utente, username, email, password, tipo_utente)
UTENTE_INFO(id_utente, nome, cognome, telefono, data_registrazione)
Dove id_utente nella seconda tabella è fk su id_utente nella prima.

Quello che vuoi far tu in fase di login non è fattibile: non sai a monte dove cercare l'utente, ma devi ogni volta cercarlo in due tabelle.
Idem per registrazione, dovrai prima cercare in entrambe le tabelle se esiste o meno un utente con quella email.

Ps: lascia perdere attualmente il discorso della memoria perché prima deve essere corretto logicamente e poi ottimizzi. Tra l'altro si potrebbe discutere se occupa di più un campo aggiuntivo in una grossa tabella rispetto ad una nuova tabella da 3 campi con molte meno righe.

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


Posted by pintu on 03-01-2012 11:06:

Originally posted by number15


Quello che vuoi far tu in fase di login non è fattibile: non sai a monte dove cercare l'utente, ma devi ogni volta cercarlo in due tabelle.
Idem per registrazione, dovrai prima cercare in entrambe le tabelle se esiste o meno un utente con quella email.



Secondo me è proprio questo il fulcro della discussione (lasciando perdere costi, ottimizzazioni ecc). Avendo un unica tabella, con attributo tipoUser, quando verrà affettuato il login la SELECT verrà fatta per forza sull'unica relazione UTENTE. Penso che la imposterò cosi..


Posted by number15 on 03-01-2012 11:17:

E' sicuramente la scelta corretta.
Ti permette anche di fare cose del tipo:
if (tipo_user == 'admin')
......
else echo('non hai permessi per vedere la pagina');

Poi puoi scegliere se splittare le informazioni non comuni ad entrambe le tipologie di utente in un'altra tabella, ma dato il rapporto utenti/admin direi che un'unica tabella con alcuni valori NULL è la scelta migliore.

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


Posted by SanJuanWolf89 on 03-01-2012 11:43:

mmmm..forse avete ragione..cmq provero a chiedere anche al prof cosa ne pensa..intanto provo a modificarlo cm avete detto...
un altra domanda..
x il tipo contratto ovvero affito o vendita avete creato una tabella??


Posted by pintu on 03-01-2012 11:46:

quindi secondo te è meglio cosi..

UTENTE(id_utente, username, password, tipoUtente, nome, cognome, email)

di cosi per esempio?

UTENTE(id_utente, username, password, tipoUtente)

INFO_UTENTE(id_u, nome, cognome, email, telefono)

[id_u FK on id_utente]

??


Posted by number15 on 03-01-2012 11:51:

Originally posted by SanJuanWolf89
mmmm..forse avete ragione..cmq provero a chiedere anche al prof cosa ne pensa..intanto provo a modificarlo cm avete detto...
un altra domanda..
x il tipo contratto ovvero affito o vendita avete creato una tabella??


Hai fatto lo schema ER? Queste scelte si prendono in base allo schema quando vai poi a trasformarlo in relazionale.

Ps. non sto facendo il progetto io, quindi non riesco ad essere più specifico.

Originally posted by pintu
quindi secondo te è meglio cosi..

UTENTE(id_utente, username, password, tipoUtente, nome, cognome, email)

di cosi per esempio?

UTENTE(id_utente, username, password, tipoUtente)

INFO_UTENTE(id_u, nome, cognome, email, telefono)

[id_u FK on id_utente]

??


Si, sicuramente.
Come detto il rapporto tra utenti/admin non vale la creazione di una nuova tabella.
Diciamo che su 100 utenti avrai a dir tanto 3 admin (e il rapporto sarà sempre inferiore al crescere degli utenti), quindi puoi tranquillamente mettere a NULL i campi nome, cognome, telefono agli admin (nulla comunque ti vieta di compilarli anche agli admin).

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


Posted by pintu on 03-01-2012 11:52:

@SanJuanWolf89: io ho messo l'attributo "contratto" nella tabella annuncio e ho creato la tabella CONTRATTO con due attributi...codice_contratto e tipo_contratto. Però non so mi sembra uno spreco..Alla fine i tipi di contatto sono solo affitto e vendita..Quindi magari sarebbe più sensato dare all'attributo contratto quel dominio! Io ne ho creata una a parte per la categoria


Posted by pintu on 03-01-2012 11:59:

Infatti! Anzi in qualche caso potrebbe anche essere comodo sapere nome-cognome dell'admin! Guardando il progetto come un applicazione per tutti e non solo per il buon esito dell'esame!


Posted by SanJuanWolf89 on 03-01-2012 12:04:

Originally posted by pintu
@SanJuanWolf89: io ho messo l'attributo "contratto" nella tabella annuncio e ho creato la tabella CONTRATTO con due attributi...codice_contratto e tipo_contratto. Però non so mi sembra uno spreco..Alla fine i tipi di contatto sono solo affitto e vendita..Quindi magari sarebbe più sensato dare all'attributo contratto quel dominio! Io ne ho creata una a parte per la categoria


Guarda è vero che puo sembrare uno spreco xo nella parte realtiva ai raggruppamenti se fai cm ho fatto io ovvero raggruppare x tipologia contratto e costo ti torna parecchio utile..nn saprei come farlo senza una tabella apposta quindi vada x la tabella tipocontratto


Posted by number15 on 03-01-2012 12:05:

Originally posted by pintu
@SanJuanWolf89: io ho messo l'attributo "contratto" nella tabella annuncio e ho creato la tabella CONTRATTO con due attributi...codice_contratto e tipo_contratto. Però non so mi sembra uno spreco..Alla fine i tipi di contatto sono solo affitto e vendita..Quindi magari sarebbe più sensato dare all'attributo contratto quel dominio! Io ne ho creata una a parte per la categoria


Prendilo con le pinze perché come detto non sto facendo il progetto, quindi ho una visione relativa dell'insieme, però potrebbe essere uno spunto.

Direi che la tabella contratto per la tipologia di annuncio è superflua, visto che non ha attributi particolari. Lo vedrei più come un equivalente di tipo_utente (quindi campo enum('affitto', 'vendita').

ANNUNCIO(id_annuncio, titolo, descrizione, tipo_contratto, id_pubblicatore_annuncio, id_unita_immobiliare, prezzo, data_pubblicazione, data_scadenza)
Eventualmente:
AFFITTO(id_annuncio, attributi_esclusivi_di_affitto)
VENDITA(id_annuncio, attributi_esclusivi_di_vendita)

Ripeto, solo a fini di discussione, non so poi se i campi son corretti (cardinalità ecc).

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


Posted by pintu on 03-01-2012 12:08:

Aspè non ho capito..ti riferisci alla parte dei criteri di similarità?


Posted by number15 on 03-01-2012 12:11:

No, parlo in generale.

Ps. mandami pm con msn o skype che se vuoi dopo pranzo ti aggiungo e ti chiarisco un paio di cose, così velocizziamo la discussione (oggi pomeriggio devo per forza mettermi a far progetto di algo :( )

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


Posted by pintu on 03-01-2012 16:20:

la domanda era riferita a SanJuanWolf89 :D Per quello che gli hai risposto tu sono d'accordo sul fatto che sia abbastanza inutile la tabella CONTRATTO anche se io l'ho fatta all'inizio.. Cmq una volta terminato lo schema er e concettuale provo a fartelo vedere cosi magari uso i tuoi preziosi consigli :)

PS: è già uscito il progetto di algoritmi??


Posted by number15 on 03-01-2012 16:29:

Ah ok :D

Comunque se sei ancora alla schema ER basta che ci metti una croce sopra a CONTRATTO e bon :D
In generale comunque lo schema ER cerca di tenerlo il più semplice possibile... esplichi poi tutto meglio effettuando le dovute trasformazioni nel relazionale

Se ho tempo ti aiuto volentieri, è l'unico esame che mi è piaciuto e ho trovato utile.

PS: si, ultimo appello di Torelli per i fuoricorso. Il nuovo appello deve ancora uscire e prevede mi pare dei compitini.

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


Posted by SanJuanWolf89 on 04-01-2012 09:19:

sisi cmq lo so k e abbastanza inutile xo mi e servita x la questione dei cluster..perchè ho deciso di raggruppare per tipo contratto e costo immobile quindi per definire i parametri mi serviva una tabella tipo contratto..


Posted by number15 on 04-01-2012 09:31:

Tecnicamente cosa intendete con cluster? SOn delle 'viste materializzate'?

In ogni caso mi sfugge come una tabella CONTRATTO, usata per specificare le tipologie di contratto possibili, ti possa risolvere di problemi... dovrai sempre avere una chiave esterna in ANNUNCIO per specificare il tipo di contratto su cui joinnare la tabella CONTRATTO.

A quel punto tanto vale usare un campo enum tipo_contratto in annuncio e arrivi alla stessa situazione.

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


Posted by Shaper on 04-01-2012 20:08:

Ciao a tutti, mi aggiungo anch'io a questa conversazione e riporto l'attenzione sulla questione "categorie"

Non mi è molto chiaro cosa intende il testo quando scrive "Le categorie possono avere caratteristiche specifiche"
Per esempio la categoria "condominio" avrà la caratteristica "presenza del portiere", mentre quella "ufficio" avrà la caratteristica "numero di prese ethernet" (sto sparando a caso)?
Quindi in pratica la categoria influenza il numero e tipo di attributi di un annuncio?
Anche voi l'avete interpretata così? E nel caso come si descrive questa situazione mediante un diagramma ER o relazionale?

__________________
Eidolon64|Blog


Posted by number15 on 04-01-2012 20:57:

Ciao, dai un occhio alla pagina precedente in cui se n'è discusso un minimo.

La questione è spinosa. Io risolverei 'adattando' le specifiche (senza senso) ad una implementazione più sensata.

Dato che non è chiaro dalle specifiche io farei la divisione come attico.it usando categoria come categoria e tipologia come caratteristiche


Un paio di domande (sperando di non incasinarti ancora di più le idee :D)
Tu hai creato un'entità 'IMMOBILE' o fai tutto dentro ANNUNCIO?

Ad esempio se dovessi farlo io penserei ad una struttura del tipo:
IMMOBILE(id_immobile, lat, lon, indirizzo, id_città, id_categoria, ecc)
ANNUNCIO(id_annuncio, id_immobile, data di pubblicazione, titolo, descrizione, id_pubblicatore_annuncio, prezzo ecc)

Quindi io già di base molto probabilmente categoria la assocerei ad IMMOBILE e non ad ANNUNCIO.

Detto questo, per farlo come lo stai pensando tu valuterei queste possibilità:
- specializzazione di IMMOBILE in diverse tipologie, quindi vai a creare altre entità del tipo MONOLOCALE, BILOCALE, ATTICO, UFFICIO ecc oppure raggruppando mono, bilo, tri ecc sotto un'entità del tipo APPARTAMENTO con poi all'interno un campo tipo_appartamento.
In queste nuove tabelle ci saranno gli attributi esclusivi per le varie tipologie di immobile.

- unica tabella IMMOBILE con id_categoria e tutti i campi per le eventuali caratteristiche aggiuntive (che saranno NULL per le categorie non interessate).
Faccio esempio va: IMMOBILE(......, id_categoria, ha_ascensore(Y, N, NULL), ha_portineria(Y,N,NULL) ecc)

In più avrai la tabella CATEGORIA(id_cat, categoria), una tabella CARATTERISTICHE(id_cara, caratteristica) e una tabella che associa le caratteristiche alle opportune categorie (che puoi usare per vedere quali caratteristiche mostrare nel form a seconda della categoria)


Tutto comunque dipende da quali caratteristiche aggiuntive sensate si riescono a trovare e poi decidere:
1) se sono tante ed esclusive valuterei la prima opzione
2) se sono poche e/o comuni valuterei la seconda


Spero di essere stato abbastanza chiaro e che il tutto abbia senso :D

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


Posted by Shaper on 04-01-2012 21:23:

Grazie, sei stato molto chiaro! :D
A naso io preferirei la seconda opzione, alla fine non dovrebbero venire fuori tante categorie diverse, né cambiare molto col tempo (pensando all'espandibilità)

__________________
Eidolon64|Blog


Posted by number15 on 04-01-2012 21:30:

Si, direi che è la scelta più sensata. ;)

Vedi tu se associarla ad annuncio o ad immobile, anche se le specifiche sembrano abbastanza propense verso annuncio, ma per me è sbagliato :D

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


Posted by Shaper on 04-01-2012 21:32:

Originally posted by number15
Si, direi che è la scelta più sensata. ;)

Vedi tu se associarla ad annuncio o ad immobile, anche se le specifiche sembrano abbastanza propense verso annuncio, ma per me è sbagliato :D


Sì, infatti io ero partito con l'idea di fare tutto dentro ANNUNCIO, ma in effetti ora che mi ci fai pensare ha molto più senso dividere ANNUNCIO e IMMOBILE!

__________________
Eidolon64|Blog


Posted by number15 on 04-01-2012 21:41:

Nelle specifiche non sembra esser richiesto, ma mi sembra scelta saggia :D

Già solamente nel caso decidessi di mettere in vendita e in affitto lo stesso immobile oppure di rimettere in vendita lo stesso immobile dopo la scadenza del primo annuncio dovresti riscrivere in annuncio tutti i campi (che saranno una decina) relativi a quell'immobile (tra l'altro a rischio violazione della 3° forma normale)

Ma poi proprio concettualmente sono entità diverse!

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


Posted by SanJuanWolf89 on 06-01-2012 10:58:

Ha tutto molto senso xo scusa quando un utente inserisce un annuncio cosa succede..si va a inserire una tupla sia in IMMOBILE, sia in ANNUNCIO??

La tua idea quindi e di tenere due relazioni,una x gli annunci visibili (ANNUNCIO) e una per tutti gli immobili..ma non si crea un po d confusione cosi??Soprattutto per quanto riguarda le funzioni di ricerca e di clustering. X me esce un po dagli schemi anke xk il testo parla esplicitamente di annuncio, cioe la fa mooolto piu facile di cosi anche se è un ottima idea.


Posted by SanJuanWolf89 on 06-01-2012 11:03:

Guarda t propongo una soluzione
tabella annuncio(
id, titolo, citta, categoria, lat, lon, costo, prezzo, ecc ecc)

tabella caratteristiche(
id_annuncio, portineria, giardino, ecc ecc
)

in questo modo non suddividi troppo annuncio da immobile


Posted by number15 on 06-01-2012 11:24:

Si, ovviamente si complica il tutto, ma è strutturalmente molto più corretto. Per le funzioni da implementare in questo progetto probabilmente non ti serve nè ti porta alcun vantaggio, però se progetti pensando a futuri sviluppi non si può tralasciare questo aspetto.

Dato che non è richiesto dalle specifiche, puoi tranquillamente non farlo, così eviti di incasinarti troppo se non hai troppa padronanza con la materia.

Nel caso lo facessi ovviamente in fase di inserimento devi inserire nelle due tabelle, associando ad annuncio la chiave dell'immobile inserito.
Se l'immobile è già presente invece devi solamente inserire in annuncio.

Con una semplice join arrivi allo stesso punto di avere un'unica tabella, quindi per le funzioni di ricerca ti cambia relativamente.
Tra l'altro leggo che richiede viste materializzate, quindi a maggior ragione cambia nulla.

Mi dite cosa intende per clustering? Oltre che concettualmente, proprio tecnicamente vorrei sapere come andrebbero implementati questi raggruppamenti.
Perché se è quello che intendo io, va fatto con tecniche di partizionamento che mi sembra tutt'altro che semplice.

Per quanto riguarda la tua soluzione per me è 'scorretta' per due motivi:
1) come vedi avrebbe più senso legarla ad immobile e non ad annuncio (è l'appartamento ad avere la portineria, non l'annuncio: lo stesso appartamento avrà la portineria in tutti gli annunci che gli associ)
2) non c'è motivo di dividere in due tabelle quegli attributi che saranno sempre da esplicare per ogni annuncio, dato che non splitti in base alla categoria di immobile.

Guarda qualche post sopra che se ne è discusso. Direi che ad occhio quelle son le uniche due opzioni valutabili.

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


Posted by SanJuanWolf89 on 06-01-2012 11:32:

Raggruppamento per similarita. Gli annunci possono essere raggruppati in cluster sulla
base di criteri di similarita. Un cluster e un gruppo di annunci che risultano simili rispetto
a un dato criterio. Ad esempio, utilizzando la vicinanza geogra ca come criterio di simila-
rita, si otterranno cluster che raggruppano annunci di immobili collocati in aree vicine. Il
1Lo studente decide a priori e documenta le tipologie disponibili.
2
criterio di similarita puo essere dotato di parametri che ne in
uenzano il comportamento2.
Un esempio di parametro e la tolleranza che stabilisce la soglia entro la quale considerare
simili due annunci. Ad esempio, utilizzando la vicinanza geogra ca come criterio, la tolle-
ranza puo essere di 10km per fare in modo che gli annunci di immobili nel raggio di 10km
vengano raggruppati nel medesimo cluster. Il sistema deve supportare ALMENO 2 criteri
di similarita di erenti. Il criterio per vicinanza geogra ca deve essere obbligatoriamente
supportato dalla base di dati. Gli utenti registrati e non registrati possono visualizzare gli
annunci raggruppati in cluster secondo un criterio di similarita prede nito scelto dall'am-
ministratore dell'applicazione. L'amministratore puo cambiare la visualizzazione in cluster
selezionando un diverso criterio di similarita tra quelli supportati dall'applicazione. Nella
realizzazione del progetto, si consideri che l'inserimento, la modi ca e la cancellazione di
annunci richiede l'aggiornamento dei cluster.

io l'ho implementato cn le viste materializzate con opportuni trigger :)


Posted by number15 on 06-01-2012 11:36:

Si, avevo capito a cosa servissero, ma non mi era ben chiaro come volesse che fosse realizzato il tutto.

Spero vivamente che dobbiate farlo con le viste materializzate, ma il dubbio mi era sorto perché sopra parla chiaramente di viste materializzate

E’ pertanto necessario realizzare gli opportuni trigger che mantengano aggiornate tali viste in relazione all’inserimento
o alla modifica di annunci.

mentre qua altrettanto chiaramente parla di cluster
Nella realizzazione del progetto, si consideri che l'inserimento, la modi ca e la cancellazione di annunci richiede l'aggiornamento dei cluster.

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


Posted by SanJuanWolf89 on 06-01-2012 11:40:

Gia ma dato k alle lezioni ci siamo concentrati soprattutto sullòe viste m. e dato che il partizionamento in laboratoriomanco l abbiamo fatto io l'hoimplementato cosi :) e x questo per nn rendere troppo complesso il tutto ho usato una sola tabella annuncio..cmq è un ottima soluzione anke la tua


Posted by number15 on 06-01-2012 11:51:

Come ti ho detto credo e spero che voglia viste materializzate :D

Usare solo la tabella annuncio rispetta le specifiche quindi è senz'altro corretto.

Quando diedi io l'esame era espressamente richiesto che fosse tutto in terza forma normale.
Ora nel testo non lo vedo scritto, ma dateci un occhio comunque che potrebbero chiedervelo in fase di discussione del progetto.

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


Posted by SanJuanWolf89 on 06-01-2012 11:53:

sISI poi cmq il prof ha dtt k c possono essere diverse soluzioni quindi io l ho implementato cosi..inoltre a me ha dtt espressamente che vogliono vedere cm facciamo i trigger quindi penso si concentrino su quello sopratutto:)


Posted by number15 on 06-01-2012 11:57:

Se ti vengono i trigger sei già a buon punto, dato che spesso è la cosa più ostica da gestire, o meglio, si sbaglia sempre qualcosa nella sintassi agli inizi.

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


Posted by spikey on 08-01-2012 15:11:

Ragazzi ma per quanto riguarda il raggruppamento di similarità della vicinanza geografica, io ho trovato questa formula:

Siano x1, y1, x2, y2 la latitudine (x) e la longitudine (y) rispettivamente dei punti A e B; sia DELTA1 la differenza tra le due longitudini e DELTA2 la distanza angolare tra i due punti considerati (A,B).
La distanza angolare tra A e B è data dalla formula:

DELTA1 = y1 - y2
DELTA2 = arccos(sin(x1)*sin(x2) + cos(x1)*cos(x2)*cos(DELTA1))

Sia R il raggio della terra arrotondato e D la distanza in Km tra A e B.
La distanza in Km tra A e B è data dalla formula:

R = 6360
D = DELTA2*R

Qualcuno ha fatto così?
Inoltre usando questa formula, dovrei basarmi su una coppia di coordinate "prestabilite" per verificare la vicinanza con tutte le altre coppie. Quale coppia di coordinate "prestabilite" scegliere?

Fatemi sapere, grazie!


Posted by Shaper on 08-01-2012 16:02:

Originally posted by spikey

Inoltre usando questa formula, dovrei basarmi su una coppia di coordinate "prestabilite" per verificare la vicinanza con tutte le altre coppie. Quale coppia di coordinate "prestabilite" scegliere?

Fatemi sapere, grazie!


Io pensavo di implementare in PHP questo algoritmo qua: Dbscan
A prima vista non mi sembra complicato e fa tutto quello che serve e gli unici parametri che gli devi dare sono la soglia e il numero minimo di elementi in un cluster (che può tranquillamente essere 1), quindi non hai nessun problema di scelta delle coordinate "prestabilite"

Ovviamente se qualcuno ha già trovato in rete un'implementazione già fatta ben venga! :P

__________________
Eidolon64|Blog


Posted by number15 on 08-01-2012 19:46:

@Spikey
Io in altri progetti utilizzo questa formula:
SELECT ROUND(((ACOS(SIN($lat * PI() / 180) * SIN(t.lat * PI() / 180) + COS($lat * PI() / 180) * COS(t.lat * PI() / 180) *
COS(($lon - t.lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515 $unit), 2) AS distance
FROM table t
$unit = '*1.609344' per i km
$lat e $lon sono le coordinate dell'oggetto che si prende come riferimento.

Questo però non fa quello richiesto dal progetto, perché i raggruppamenti vanno fatti a monte e soprattutto non rispetto ad un punto sulla mappa, ma rispetto ai vari punti sulla mappa.

@Shaper
Credo possa essere una buona soluzione: l'unico dubbio è che solitamente non sono richieste particolari algoritmi a livello di programmazione, e in questo caso non mi pare proprio semplicissimo.

Onestamente non saprei proprio aiutarvi su sta cosa.
Tra l'altro è una funzione di cui non capisco l'utilità.

Boh boh, mi vien da pensare però che ci voglia per forza un punto di riferimento.

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


Posted by pintu on 09-01-2012 18:16:

Scusate una cosa che non centra niente..qualcuno sa se per lo scritto di basi c'è il salto appello?


Posted by Shaper on 09-01-2012 19:26:

Originally posted by pintu
Scusate una cosa che non centra niente..qualcuno sa se per lo scritto di basi c'è il salto appello?


Per quello di settembre c'era, presumo anche per questo.. :(

__________________
Eidolon64|Blog


Posted by basettoni on 15-01-2012 10:39:

Ciao a tutti.
Anche io sono in procinto di consegnare il progetto ma ancora non ho trovato un modo logico di risolvere la questione della divisione in cluster... Ho pensato di "farla sporca" e implementare una funzione che ritorni, usando la funzione distanza, tutti gli annunci entro un raggio di N Km da un dato annuncio. Funzione che poi andrei ad usare nella visualizzazione del singolo annuncio dove visualizzerei tutti gli annunci che distano al massimo N Km dall'annuncio visualizzato.

Questa cosa però non mi convince perchè sembra dal testo che la divisione in cluster vada fatta quando si inserisce un nuovo annuncio e tutto vada salvato nel db. Ma come si può suddividere gli annunci in distanza senza avere un punto da cui calcolare le distanze?

Quanlcuno di voi ha avuto qualche idea in merito?


Posted by Shaper on 15-01-2012 10:45:

Originally posted by basettoni
Ciao a tutti.
Anche io sono in procinto di consegnare il progetto ma ancora non ho trovato un modo logico di risolvere la questione della divisione in cluster... Ho pensato di "farla sporca" e implementare una funzione che ritorni, usando la funzione distanza, tutti gli annunci entro un raggio di N Km da un dato annuncio. Funzione che poi andrei ad usare nella visualizzazione del singolo annuncio dove visualizzerei tutti gli annunci che distano al massimo N Km dall'annuncio visualizzato.

Questa cosa però non mi convince perchè sembra dal testo che la divisione in cluster vada fatta quando si inserisce un nuovo annuncio e tutto vada salvato nel db. Ma come si può suddividere gli annunci in distanza senza avere un punto da cui calcolare le distanze?

Quanlcuno di voi ha avuto qualche idea in merito?


Come ho detto qualche post fa, l'algoritmo Dbscan fa proprio questo: divide un insieme di punti in cluster, senza la necessità di fornirgli nessun parametro a parte il numero minimo di punti che deve avere un cluster per essere considerato tale e la soglia.
Io lo sto implementando e credo di avere quasi finito: è un po' una rottura, ma è fattibile, con un po' di manipolazione di array.

Più che altro, ma poi il risultato dev'essere memorizzato nel database? Se faccio in modo che venga eseguito l'algoritmo ogni volta che si vogliono visualizzare i cluster non va bene lo stesso? Ok, come efficienza non sarà il massimo, ma non stiamo parlando di algoritmi poi così eterni..

__________________
Eidolon64|Blog


Posted by basettoni on 15-01-2012 10:56:

Originally posted by Shaper
Come ho detto qualche post fa, l'algoritmo Dbscan fa proprio questo: divide un insieme di punti in cluster, senza la necessità di fornirgli nessun parametro a parte il numero minimo di punti che deve avere un cluster per essere considerato tale e la soglia.
Io lo sto implementando e credo di avere quasi finito: è un po' una rottura, ma è fattibile, con un po' di manipolazione di array.

Più che altro, ma poi il risultato dev'essere memorizzato nel database? Se faccio in modo che venga eseguito l'algoritmo ogni volta che si vogliono visualizzare i cluster non va bene lo stesso? Ok, come efficienza non sarà il massimo, ma non stiamo parlando di algoritmi poi così eterni..


A pagina 3 dice:
"... si consideri consideri che l'inserimento, la modifica e la cancellazione di annunci richiede l'aggiornamento dei cluster."

Comunque se ho capito bene questo algoritmo in sostanza aggiunge un punto a un dato cluster se la distanza tra lui e un punto del cluster è minore di una data soglia imposta giusto?


Posted by number15 on 15-01-2012 10:59:

Se si parla di cluster nel vero senso, si, la divisione va memorizzata.
Cerca tecniche di partitioning in mysql su Google e ci dovrebbero essere alcuni esempi di cluster: in pratica diciamo che divide una tabella in n tabelle sulla base di un campo. Ad esempio dividi per anno di nascita gli utenti e in inserimento la persona finirà nella tabella del suo anno.

Per me la richiesta è complicatissima, costosissima e senza senso.
Io penserei o ad una divisione a zone o alla distanza dal punto prescelto, conscio del fatto che non sia quello richiesto nelle specifiche.
Avete provato a sentire la prof.?

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


Posted by Shaper on 15-01-2012 11:00:

Originally posted by basettoni
A pagina 3 dice:
"... si consideri consideri che l'inserimento, la modifica e la cancellazione di annunci richiede l'aggiornamento dei cluster."


Sì, ma il concetto è che la clusterizzazione dev'essere dinamica e rispecchiare i cambiamenti del DB (cioè non lo faccio una volta all'inizio e poi basta), non dice esplicitamente che bisogna SCRIVERE fisicamente i cluster nel DB...
Come al solito la specifica lascia tantissimo all'interpretazione

__________________
Eidolon64|Blog


Posted by number15 on 15-01-2012 11:08:

Per questo motivo sostengo quanto scritto sopra, perché essendo un cluster basato su confronti ad ogni inserimento dovresti ricreare le tabelle, perché la posizione di un nuovo immobile ti cambia tutte le distanze. Inoltre vuole la possibilità di cambiare il numero della distanza.

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


Posted by Shaper on 15-01-2012 11:12:

Originally posted by number15
Per questo motivo sostengo quanto scritto sopra, perché essendo un cluster basato su confronti ad ogni inserimento dovresti ricreare le tabelle, perché la posizione di un nuovo immobile ti cambia tutte le distanze. Inoltre vuole la possibilità di cambiare il numero della distanza.


Sì, ma se io mi faccio una funzione clusterizza() e la invoco, a partire dallo stato attuale del DB, ogni volta che ho bisogno dei cluster (sia utenti normali sia amministratori), per l'utente il risultato è identico.

__________________
Eidolon64|Blog


Posted by Shaper on 15-01-2012 11:13:

In ogni caso concordo sul fatto che, messa così come nelle specifiche, è una funzione costosa, complessa e completamente inutile!

__________________
Eidolon64|Blog


Posted by basettoni on 15-01-2012 11:14:

E poi per quanto ho capito, chiede di creare cluster di "dimensione di 10km" mentre tutti gli algoritmi di clustering che ho visto parlano di "soglie tra punto e punto".


Posted by number15 on 15-01-2012 11:23:

Originally posted by Shaper
Sì, ma se io mi faccio una funzione clusterizza() e la invoco, a partire dallo stato attuale del DB, ogni volta che ho bisogno dei cluster (sia utenti normali sia amministratori), per l'utente il risultato è identico.


Sì, ho capito, ma non è un cluster :-D
Il cluster è la livello di db, non di applicazione.
Per questo ti avevo detto che poteva essere un metodo corretto quell'algoritmo, ma mi sembrava troppo complesso per un esame di database.

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


Posted by Shaper on 15-01-2012 11:29:

Originally posted by number15
Sì, ho capito, ma non è un cluster :-D
Il cluster è la livello di db, non di applicazione.
Per questo ti avevo detto che poteva essere un metodo corretto quell'algoritmo, il ma mi sembrava troppo complesso per un esame di database.


Ah ho capito cosa intendevi: realizzare una clusterizzazione che possa essere fatta solo a livello di database con dei trigger, giusto?

Ha senso sicuramente (anche e soprattutto per un esame di database), ma in questo modo non è possibile realizzare quello che chiede la specifica (oddio, tutto è possibile, ma non ho la minima intenzione di mettermi a implementare quell'algoritmo in SQL!!! :shock: )

__________________
Eidolon64|Blog


Posted by number15 on 15-01-2012 11:48:

Si, cioè il clustering è proprio quello. Serve quando hai tabelle enormi per velocizzare le query. Dividi la tabella in più tabelle sulla base di un campo e tutti le query andranno fatte sulle corrispondenti tabelle, quindi quando fai una select dall'applicazione devi eseguirla sulla tabella corretta.

Detto ciò, in questo caso non è fattibile perché il tuo partizionamento non è fisso, ma varia ad ogni inserimento dato che le distanze sono calcolate tra immobili e non rispetto ad un punto stabilito.

Edit: questo Link spiega bene come funziona il partizionamento : http://www.stardata.it/le-novita-di-mysql-5-1-186/

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


Posted by Shaper on 15-01-2012 13:51:

Originally posted by number15
Si, cioè il clustering è proprio quello. Serve quando hai tabelle enormi per velocizzare le query. Dividi la tabella in più tabelle sulla base di un campo e tutti le query andranno fatte sulle corrispondenti tabelle, quindi quando fai una select dall'applicazione devi eseguirla sulla tabella corretta.

Detto ciò, in questo caso non è fattibile perché il tuo partizionamento non è fisso, ma varia ad ogni inserimento dato che le distanze sono calcolate tra immobili e non rispetto ad un punto stabilito.

Edit: questo Link spiega bene come funziona il partizionamento : http://www.stardata.it/le-novita-di-mysql-5-1-186/


Grazie del link, non avevo nemmeno preso in considerazione questa opzione. Ormai temo sia tardi per rifare tutto (devo ancora fare la ricerca), quindi per quanto mi riguarda lo terrò così com'è e spiegherò le ragioni nella documentazione, speriamo bene!
Che voi sappiate, sono molto fiscali nella correzione o accettano scelte un po' alternative, se ben documentate?

__________________
Eidolon64|Blog


Posted by SanJuanWolf89 on 16-01-2012 09:37:

Scusate ma sulla consegna parla chiaro "annunci di immobili nel RAGGIO di 10 km" quindi ne deduco che per forza bisogna considerare un punto centrale. Quindi il parametro che influenza il fatto che un annuncio sia raggruppato o meno è proprio la distanza da questo punto centrale non la distanza tra un annuncio e l'altro. Questo proprio perchè sul testo parla di raggio


Posted by SanJuanWolf89 on 16-01-2012 09:45:

Talking

Originally posted by Shaper

Che voi sappiate, sono molto fiscali nella correzione o accettano scelte un po' alternative, se ben documentate?


Dei miei amici l 'hanno sostenuto l anno scorso e hanno detto di non sbattersi piu di tanto..sta di fatto che è cmq meglio fare le cose ben fatte per evitare inconvenienti..cmq la cosa che piu guardano da quello che ho capito è il diagramma ER


Posted by miccio.87 on 25-01-2012 09:38:

ciao a tutti
ma per quanto riguarda le viste materializzate come le avete svolte?


Posted by thirdmoon030 on 06-02-2012 13:09:

Io avrei un po di domande a carattere generale sul progetto anche perchè è da un po che l'ho iniziato ma non riesco a venire a capo di alcune cose.

Inizierei dalle tabelle:
bisogna mettere + tabelle possibile o generalizzare al massimo?
una tabella x utenti, annunci e immobili bastano?
(dove l'id dell'utente è chiave esterna dell'annuncio e l'id dell'annuncio è chiave esterna dell'immobile)

poi i raggruppamenti che nel link qui sopra vengono spiegati x MySQL sono da fare nello stesso modo x PostgreSQL? (è meglio usare MySQL rispetto a PostgreSQL?)
i raggruppamenti alla fine non sono viste? se no qual'è la differenza?


Posted by marco91 on 07-02-2012 11:42:

Ciao a tutti! Mi aggiungo anche io...

Per la vicinanza geografica credo ci si debba basare su un punto, perchè se io ho come raggruppamento gli immobili che sono a 10km l'uno dall'altro (con il metodo suggerito da number15), avendo una sufficiente densità di immobili avrei che tutti gli immobili sono nello stesso cluster! Ad esempio se il sito si occupa di vendere case in lombardia, avendo una casa a milano, una a sesto, una a monza, una a lissone ecc... avrei che tutti questi annunci sono nello stesso cluster perchè messi in quest'ordine sarebbero ognuno entro 10km all'altro. A lato pratico questa funzione sarebbe inutile, se io sto cercando una casa a milano non mi va bene una a lissone, o sbaglio?

Il problema rimane scegliere il punto di riferimento... il primo annuncio del database? il centro dell'italia? Oppure devo lasciar scegliere all'utente l'origine (magari con un pulsante specifico "cerca nei dintorni" vicino all'annuncio nella pagina web) e poi ricaricare la pagina con l'annuncio scelto in cima e poi tutti gli altri in cascata. Ma questo sarebbe una funzione a livello di php che non influenza minimamente il database. (E aggiungo che mi sembra la soluzione più sensata).

Per gli altri parametri sarebbe più semplice. Ad esempio per la suddivisione in base al contratto io fare una vista che replica la tabella immobile (io ho semparato annuncio e immobile) ma con un ordinamento a livello del campo "contratto" (GROUP BY) Nella visualizzazione scorrerei la tabella e ogni volta che cambia il valore di "contratto" (ma può essere anche un qualsiasi altro parametro, tipo la categoria) stampo una linea nella pagina a segno che cambia il tipo di paramentro.


Posted by number15 on 07-02-2012 12:04:

Ciao marco,
il problema è sempre lo stesso: non si capisce la richiesta! :D

Come hai giustamente spiegato il primo metodo non ha senso o meglio non ha nessuna utilità nella pratica oltre ad essere di complicatissima realizzazione per me (mi pare che Shaper avesse linkato l'algoritmo da implementare).

Anche scegliere un punto di riferimento fisso non ha molto senso. Se sono a Milano sicuramente non mi interessa cercare gli immobili a 10km da Roma e idem per il viceversa.

L'unico che ha senso è appunto il 'cerca nei dintorni', ma non è una tecnica di cluster.

Io rinnovo il consiglio di chiedere ai prof o di sperare che qualcuno che abbia già discusso il progetto dia delucidazioni su questo punto.

Non mi è chiaro invece cosa vuoi fare per gli immobili.
Anche qua comunque la richiesta è un po' 'fumosa': cosa te ne fai di più viste materializzate!?
Io al max ne creerei una e studierei quali campi indicizzare.

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


Posted by number15 on 07-02-2012 12:19:

Originally posted by thirdmoon030
Io avrei un po di domande a carattere generale sul progetto anche perchè è da un po che l'ho iniziato ma non riesco a venire a capo di alcune cose.

Inizierei dalle tabelle:
bisogna mettere + tabelle possibile o generalizzare al massimo?
una tabella x utenti, annunci e immobili bastano?
(dove l'id dell'utente è chiave esterna dell'annuncio e l'id dell'annuncio è chiave esterna dell'immobile)

poi i raggruppamenti che nel link qui sopra vengono spiegati x MySQL sono da fare nello stesso modo x PostgreSQL? (è meglio usare MySQL rispetto a PostgreSQL?)
i raggruppamenti alla fine non sono viste? se no qual'è la differenza?


Devi rispettare il più possibile la 3NF per cui 3 tabelle in tutto sicuramente non bastano :D

Per PostgreSQL non so aiutarti, non l'ho mai utilizzato.

Ora non so a che link ti riferisci, se è quello per la spiegazione dei cluster lascialo perdere per ora che è piuttosto complesso e dubito sia richiesto ai fini del progetto.

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


Posted by thirdmoon030 on 07-02-2012 12:40:

quante dovrebbero essere le tabelle?
bisogna dividere le tipologie di annunci es affitto e vendita? o le categorie di immobili? es monolocale, bilocale ecc... oppure no?


Posted by number15 on 07-02-2012 13:12:

Il numero di tabelle non so dirtelo, in quanto non ho fatto, ne sto facendo, il progetto.

Prova a guardare nelle pagine indietro che qualcosa si è discusso.

Così su due piedi non so dirti cosa devi dividere.
Prova a fare ed eventualmente postare lo schema ER e poi decidi come implementare il tutto.

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


Posted by marco91 on 09-02-2012 11:23:

Originally posted by number15
Ciao marco,
il problema è sempre lo stesso: non si capisce la richiesta! :D

Come hai giustamente spiegato il primo metodo non ha senso o meglio non ha nessuna utilità nella pratica oltre ad essere di complicatissima realizzazione per me (mi pare che Shaper avesse linkato l'algoritmo da implementare).

Anche scegliere un punto di riferimento fisso non ha molto senso. Se sono a Milano sicuramente non mi interessa cercare gli immobili a 10km da Roma e idem per il viceversa.

L'unico che ha senso è appunto il 'cerca nei dintorni', ma non è una tecnica di cluster.

Io rinnovo il consiglio di chiedere ai prof o di sperare che qualcuno che abbia già discusso il progetto dia delucidazioni su questo punto.

Non mi è chiaro invece cosa vuoi fare per gli immobili.
Anche qua comunque la richiesta è un po' 'fumosa': cosa te ne fai di più viste materializzate!?
Io al max ne creerei una e studierei quali campi indicizzare.


Io ho suddiviso le tabelle così: annuncio (con ID, titolo data utente ecc.... e riferimento a immobile, riferimento a files e a utenti), immobile (con ID e tutte le caratteristiche della casa e riferimento a categorie), categorie(ID, nome e descrizione), utenti (nome, tipo email ecc....), files(ID e BLOB x la foto)

Faccio un esempio, devo implementare la visualizzazione cluster con criterio di similarità "contratto". Quindi creo una vista di questo tipo:
CREATE VIEW similarita_contratto AS
SELECT (campi utili)
FROM annuncio NATURAL JOIN immobili NATURAL JOIN categorie NATURAL JOIN utenti
GROUP BY contratto

In questo modo, quando viene scelto il cluster "per contratto" e fatta una ricerca, prelevo le righe che mi servono e che sono già in ordine di modo che nella visualizzazione compaiano prima gli affitti e poi le vendite. Creando una divisione (grafica) tra un tipo e l'altro di contratto.

Oppure nella similarità per prezzo:

CREATE VIEW similarita_prezzo AS
SELECT (campi utili)
FROM annuncio NATURAL JOIN immobili NATURAL JOIN categorie NATURAL JOIN utenti
GROUP BY Prezzo ASC

Così prelevando le righe risultanti dalla ricerca dell'utente sono già in ordine di prezzo crescente.

Io la clusterizzazione l'ho intesa così. Quella per per vicinanza geografica non può proprio essere implementata a livello di database in quanto per ogni immobile non c'è come per i prezzi uno più piccolo e uno più grande ma ci sono infinite direzioni su cui concentrarsi per definire chi c'è prima e chi c'è dopo e soprattutto serve un riferimento che non può essere deciso a priori. Per cui sia usando viste, tabelle o qualsiasi altro metodo non si riesce comunque ad ottenere la clusterizzazione, a meno di creare una vista per ogni latitudine/longitudine di ogni immobile inserito: soluzione assurda.

Per cui io la faccio a livello di php, faccio una funzione "cerca nei dintorni" e via... perchè è la soluzione più logica e sesata.

Soprattutto mi fa paura leggere "i cluster devono essere aggiornabili" ma sia utilizzando le viste, sia utilizzando il php non dovrei aggiornare un bel niente dei cluster... =S


Altra domanda:
quanto deve essere lungo il manuale tecnico e quello utente? Ne ho visto qui uno sul dsy da 60 pag...


Posted by number15 on 09-02-2012 14:42:

Ad occhio direi che ti manca una tabella città, il cui id diventa fk in immobile.
Per la tabella files non utilizzerei un campo blob, ma un normale varchar (guarda il topic sotto a questo).

Poi mancano le tabelle che si creano dalle relazioni n a n, tipo tra immobile e files o tra annuncio e files (in base a cosa vuoi associarle).

Comunque andrebbe visto lo schema ER ed il relazionale completo.

GROUP BY non fa quello che vuoi. Non è che ti stai confondendo con ORDER BY?

Per i cluster ti ripeto non so cosa voglia. Dubito però intenda una semplice vista. Una vista è semplicemente una query. Quando operi sulla vista, semplcimente viene prima eseguita la query della vista e poi eseguita la query sulla vista.

Quindi una query del tipo

code:
SELECT (campi utili) FROM (tabelle join) ORDER BY contratto

è identica
code:
SELECT * FROM vista

dove vista è quella sopra.
Non cambia niente.

Come minimo vorrà delle viste materializzate.

Concordo che non abbia senso per le distanze.
Io metterei dei campi lat e lon in immobile e poi mostrerei gli immobili che distano xkm dal punto selezionato (ho postato una funzione che utilizzo per trasformare in km le distanze tra coordinate).

Conscio del fatto che lei parla di tutt'altro però.

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


Posted by marco91 on 10-02-2012 10:36:

Originally posted by number15
Ad occhio direi che ti manca una tabella città, il cui id diventa fk in immobile.
Per la tabella files non utilizzerei un campo blob, ma un normale varchar (guarda il topic sotto a questo).

Poi mancano le tabelle che si creano dalle relazioni n a n, tipo tra immobile e files o tra annuncio e files (in base a cosa vuoi associarle).

Comunque andrebbe visto lo schema ER ed il relazionale completo.

GROUP BY non fa quello che vuoi. Non è che ti stai confondendo con ORDER BY?

Per i cluster ti ripeto non so cosa voglia. Dubito però intenda una semplice vista. Una vista è semplicemente una query. Quando operi sulla vista, semplcimente viene prima eseguita la query della vista e poi eseguita la query sulla vista.

Quindi una query del tipo
code:
SELECT (campi utili) FROM (tabelle join) ORDER BY contratto

è identica
code:
SELECT * FROM vista

dove vista è quella sopra.
Non cambia niente.

Come minimo vorrà delle viste materializzate.

Concordo che non abbia senso per le distanze.
Io metterei dei campi lat e lon in immobile e poi mostrerei gli immobili che distano xkm dal punto selezionato (ho postato una funzione che utilizzo per trasformare in km le distanze tra coordinate).

Conscio del fatto che lei parla di tutt'altro però.


Per le distanze farò come hai detto anche tu, per la città io ho fatto semplicemente nella tabella immobile un campo città, uno latitudine e uno longitudine. All'inizio avevpo creato una tabella città ma mi sembrava inutile per solo due campi in più.

Ma se uso varchar metterei l'url dell'immagine giusto? Io uso BLOB, anzi il LONGBLOB, giusto per usare un po' il database :D Ho già preparato la procedura di upload, funziona bene per cui penso terrò questa :)

GROUP BY "campo" ASC/DESC fa la funzione di GROUP BY assieme a quella di ORDER BY riferito a quel campo. :)

Mi sono accorto che non ho usato nessun trigger, ma sono indispensabili? Perchè a me funziona tutto ugualmente. Anche le stored procedure non le ho usate...


Posted by number15 on 10-02-2012 10:52:

Originally posted by marco91
Per le distanze farò come hai detto anche tu, per la città io ho fatto semplicemente nella tabella immobile un campo città, uno latitudine e uno longitudine. All'inizio avevpo creato una tabella città ma mi sembrava inutile per solo due campi in più.


Magari però di città ti servono altre informazioni, tipo se fa o meno provincia, in che provincia sta, regione, nazione ecc.

Originally posted by marco91

Ma se uso varchar metterei l'url dell'immagine giusto? Io uso BLOB, anzi il LONGBLOB, giusto per usare un po' il database :D Ho già preparato la procedura di upload, funziona bene per cui penso terrò questa :)


Si, dovresti semplicemente mettere il percorso dell'img (o parte del percorso) e poi salvare l'immagine in una cartella del sito.
Comunque usa pure il BLOB.

Originally posted by marco91

GROUP BY "campo" ASC/DESC fa la funzione di GROUP BY assieme a quella di ORDER BY riferito a quel campo. :)


In che linguaggio?
Di sicuro non MySQL, ma dubito pure in altri linguaggi.

In ogni caso la GROUP BY raggruppa, quindi se raggruppi per tipologia di contratto avrai come risultato 2 righe, una per affitto e una per vendita.

Originally posted by marco91

Mi sono accorto che non ho usato nessun trigger, ma sono indispensabili? Perchè a me funziona tutto ugualmente. Anche le stored procedure non le ho usate...


I trigger servono per modificare il contenuto delle tabelle a seguito di una qualche azione.
Puoi solitamente ottenere lo 'stesso risultato' usando delle query a livello applicativo, ma in un esame di database solitamente sono richiesti.

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


Posted by marco91 on 12-02-2012 17:39:

Originally posted by number15
Magari però di città ti servono altre informazioni, tipo se fa o meno provincia, in che provincia sta, regione, nazione ecc.



Si, dovresti semplicemente mettere il percorso dell'img (o parte del percorso) e poi salvare l'immagine in una cartella del sito.
Comunque usa pure il BLOB.



In che linguaggio?
Di sicuro non MySQL, ma dubito pure in altri linguaggi.

In ogni caso la GROUP BY raggruppa, quindi se raggruppi per tipologia di contratto avrai come risultato 2 righe, una per affitto e una per vendita.



I trigger servono per modificare il contenuto delle tabelle a seguito di una qualche azione.
Puoi solitamente ottenere lo 'stesso risultato' usando delle query a livello applicativo, ma in un esame di database solitamente sono richiesti.


Bo a me il GROUP BY riordina anche :)

I trigger ho già trovato dove inserirli, mi ero dimenticato delle viste materializzate (che su MySQL non sono supportate) per cui devo gestirle manualmente! :(


Posted by number15 on 12-02-2012 17:55:

Riordina per il campo del group by, ma il 'problema' è che raggruppa.

Se tu hai questa tabella
ANNUNCIO(id_annuncio, contratto, id_utente, ecc)
con queste tuple:
1, vendita, 4
2, affitto, 2
3, vendita, 5
4, affitto, 10
5, affitto, 15
6, vendita, 8

La query SELECT * FROM annuncio GROUP BY contratto
restituirà
2, affitto, 2
1, vendita, 4

e non quello che vuoi far tu.


Per le viste materializzate dai un occhio qua: http://blog.fl3x.de/2005/10/26/mate...views-in-mysql/

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


Posted by marco91 on 15-02-2012 14:40:

Originally posted by number15
Riordina per il campo del group by, ma il 'problema' è che raggruppa.

Se tu hai questa tabella
ANNUNCIO(id_annuncio, contratto, id_utente, ecc)
con queste tuple:
1, vendita, 4
2, affitto, 2
3, vendita, 5
4, affitto, 10
5, affitto, 15
6, vendita, 8

La query SELECT * FROM annuncio GROUP BY contratto
restituirà
2, affitto, 2
1, vendita, 4

e non quello che vuoi far tu.


Per le viste materializzate dai un occhio qua: http://blog.fl3x.de/2005/10/26/mate...views-in-mysql/


Già infatti faceva casini! :D Ora ho sistemato. Per le viste, visto materializzate che non sono supportate da mysql, ne ho creata una io facendo una tabella e poi mantenendola aggiornata tramite vari trigger.

Ora devo solo finire i manuali, speriamo solo che il progetto le vada bene dopo 20 giorni di lavoro ininterrotto!!


Posted by paolos on 02-03-2012 14:12:

ciao a tutti,
riguardo al discorso dei cluster e criteri di similarità,

io pensavo di fare cosi:

cominciamo dai piu semplici,
se volessi fare un criterio di similarità per metri quadrati.

creo una vista materializzata con codice annuncio e id_annncio
e creo un indice con su id_annuncio.
Indice cluster (con file ordinati) se ne puo avere solo uno per tabella (correggetemi se sbaglio) quindi ha senso
creare una vista materializzata.

quindi nel caso di un database con moltissimi record si risparmierebbe tempo
nella select.


il mio dubbio é che é vero che si risparmia tempo nelle select, pero'
dopo bisogna fare il join tra id_annuncio e l'annuncio,
quindi mi chiedevo se ne valesse la pena

altrimenti si potrebbe fare una view con tutti le colonne che sono nella tabella
degli annunci, (praticamente una copia della tabella) e mettere semplicemente
un indice su mq, ma in questo caso il mantenimento sarebbe più complesso,
e il db peserebbe di più

voi che dite? vi sembrano strade percorribili?


Posted by number15 on 02-03-2012 14:55:

Ciao Paolos,
non ho mai capito cosa volessero i professori quando parlavano di cluster... bisognerebbe sentire i ragazzi che hanno già discusso il progetto.

Il concetto di cluster vero e proprio è la suddivisione di una tabella in più tabelle più piccole.
Quindi per applicare realmente la clusterizzazione potresti creare n tabelle ANNUNCIO divise per range di metratura in cui copi gli annunci.

Ti faccio un esempio:
ANNUNCIO(tabella contenente tutti gli annunci)
ANNUNCIO_0_40(tabella contenente gli annunci con metratura fino a 40mq)
ANNUNCIO_41_60(tabella contenente gli annunci con metratura maggiore di 40mq e minore di 60)
ecc

Tu inserisci normalmente in ANNUNCIO e poi fai un trigger che in base alla metratura copia l'annuncio nella rispettiva tabella ANNUNCIO_X_X.

A questo punto quando nell'applicazione selezioni il filtro di metratura, fai la select sulla tabella contenente quel sottoinsieme di annunci.

Concettualmente il cluster è questo.
Poi puoi decidere di suddividere in tabelle contenenti già altre informazioni che ti servono (andando quindi a fare prima qualche join) (ad esempio diciamo che tu puoi avere una struttura in cui hai diviso gli immobili dagli annunci, quindi quando crei un annuncio per un immobile devi andare prima a controllare la metratura dell'immobile e poi ad inserirlo nella tabella corretta. A questo punto la tabella ANNUNCIO_X_X potrebbe già contenere anche le informazioni che ti servono relative all'immobile)

Gli indici non fanno altro che ottimizzare le ricerche ordinando già le colonne, ma non applicano nessuna 'divisione'.

Ripeto comunque che prima bisognerebbe capire cosa vogliono realmente i prof.

Venendo al tuo esempio cosa intendi con indice cluster? Che DBMS usi?
A cosa ti servirebbe la tabella con id_annuncio e codice annuncio? Che tipo di select ci andresti a fare?

Ovviamente il secondo esempio ha molto più senso, anche se come spiegato sopra non è una tecnica di cluster.

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


Posted by paolos on 02-03-2012 15:58:

ciao number15, grazie mille per la risposta,

un indice clustered (clustered index) é un indice che crea file ordinati,

qui parla della differenza tra clusered e non clustered index
a proposito di sql server, ma immagino sia un concetto comune ai vari dbms
http://www.mssqlcity.com/FAQ/Genera...red_indexes.htm


qui un post riquardo agli indici clustered in postgres
http://stackoverflow.com/questions/...dex-in-postgres

io uso postgres,

niente immaginavo per esempio di avere una vista meterializzata "annunci_mq"
con colonne "id_annuncio" ed "mq" (scusa avevo scritto sbagliato prima),
con indice cluster su mq.

facendo una query tipo:
SELECT * FROM annunci_mq WHERE mq > valore - range AND mq < valore + range ;

recupero gli id dei record simili per metratura in maniera più veloce che
facendo la query normale, in quanto faccio le select su un atributo con indice.

La strada che hai detto te mi pare ragionevole,
però nel progetto diceva anche che l'amministratore (o l'utente)
devono essere in grado di cambiare il range,
el tuo caso come si farebbe? si fa in modo che l'utente
possa specificare se prendere per i dati per es

ANNUNCIO_0_40(tabella contenente gli annunci con metratura fino a 40mq)

o da
ANNUNCIO_0_80(tabella contenente gli annunci con metratura fino a 40mq)


o da
ANNUNCIO_0_120(tabella contenente gli annunci con metratura fino a 40mq)

creando tante tabelle per i tipi di range che si possono scegliere?


Posted by number15 on 02-03-2012 16:53:

Quindi quale sarebbe il grande vantaggio rispetto a mettere un normale indice su mq nella tabella principale?
La ricerca è comunque ottimizzata.

Dando la possibilità di cambiare il range diventa effettivamente un casino. Devi creare nuove tabelle e risuddividere tutti i dati.

Prova a questo link che ho postato altre volte: http://www.stardata.it/le-novita-di-mysql-5-1-186/
Forse parla di ottimizzare il cambiamento di range (non ho il tempo per riguardare ora)

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


Posted by paolos on 02-03-2012 17:12:

ciao,

il vantaggio é semplicemente che la ricerca su un file ordinato é più veloce,

do un occhiata al link che mi hai mandato,

grazie mille


Posted by gionavisi on 09-03-2012 14:58:

qualcuno saprebbe dirmi come devo istallare apache e php su Lion?


Posted by gionavisi on 11-04-2012 13:53:

Come si può fare a creare i cluster per la vicinanza geografica?che funzione da inserire in trigger e funzioni si può usare?

come avete questo problema?


Posted by pintu on 14-05-2012 19:20:

Qualcuno ha qualche suggerimento per la scadenza degli annunci? Come faccio a creare un trigger che confronta la data odierna con la data di scadenza di ogni annuncio?


Posted by number15 on 14-05-2012 19:39:

Puoi utilizzare cron oppure usare gli eventi.

Con i trigger non puoi farlo.

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


Posted by pintu on 14-05-2012 19:41:

E se uso Postgres vanno bene lo stesso sia cron che gli eventi?


Posted by number15 on 14-05-2012 19:51:

Cron sicuramente dato che è "semplicemente" uno script che viene eseguito ogni tot tempo in cui vai ad inserire la query che vuoi sia eseguita.
Non dipende dal DBMS.

http://php.html.it/articoli/leggi/2...e-degli-script/

Per Postgres non ho idea se c'è uno scheduler integrato.

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


Posted by aPiso on 14-05-2012 21:29:

Originally posted by number15
Cron sicuramente dato che è "semplicemente" uno script che viene eseguito ogni tot tempo in cui vai ad inserire la query che vuoi sia eseguita.
Non dipende dal DBMS.

http://php.html.it/articoli/leggi/2...e-degli-script/

Per Postgres non ho idea se c'è uno scheduler integrato.


C'è pgAgent se proprio vuoi fare così... ma non è più facile calcolare semplicemente la data di scadenza in inserimento, metterla in una colonna, e con la funzione cerca cercare solo gli annunci non scaduti?
Alla fine la consegna del progetto è di non visualizzare gli annunci, non cancellarli, e almeno l'utente ha tutti i suoi annunci nel profilo, anche quelli scaduti!!

Comunque: http://www.pgadmin.org/docs/1.4/pgagent.html


Posted by number15 on 15-05-2012 07:22:

Puoi fare anche come dici tu, ma non è molto ottimizzato.

Io solitamente creo un campo enum 'is_active, che setto a N alla scadenza dell'informazione attraverso lo scheduler.
Quindi li disattivi, non li cancelli.

Nelle query poi ti basterà fare where is_active = 'Y'

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


Posted by pintu on 15-05-2012 10:48:

Io nella mia tabella annuncio ho i due campi "data_pubbl" e "data_scadenza".. Ma quando faccio la ricerca come faccio a mettere la condizione...
SELECT *
FROM annuncio
WHERE " la data di scadenza non ha superato la data odierna"
???


Posted by zack1988 on 15-05-2012 11:58:

Per Mysql e Postgresql è now()
data_scadenza < now()

In Oracle si usa sysdate
data_scadenza < sysdate


Posted by pintu on 15-05-2012 14:51:

.


Posted by pintu on 15-05-2012 15:00:

.


Posted by pintu on 15-05-2012 18:35:

Non c'è nessuna soluzione diversa dallo scheduler? Mi sembra assurdo che per un progetto del genere (con 2 lezioni del cavolo sul php, e senza aver mai sentito parlare di pgAgent, cron, eventi ecc) ci si debba scervellare in questo modo. Per ora ho aggiunto un campo boolean alla tabella annuncio cosi quando faccio la ricerca ho il controllo WHERE attivo = TRUE. Ora devo solo capire come fare per settare il campo attivo a FALSE quando la data di scadenza supera la data odierna..


Posted by number15 on 15-05-2012 22:22:

Puoi usar la soluzione di aPiso che funziona tranquillamente.

Per far quello che volevi fare tu serve per forza uno scheduler

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


Posted by pintu on 15-05-2012 22:39:

Senza scheduler e con la colonna aggiuntiva "attivo" (boolean) posso limitare la ricerca ad annunci non scaduti..La soluzione di aPiso sarebbe questa giusto? Ma comunque non risolve il problema..Se il mio annuncio x scade oggi, domani quando accedo al database il campo attivo dell'annuncio x dovrà essersi settato automaticamente a FALSE...quindi se non ho capito male mi tocca capire come funziona questo benedetto scheduler :D


Posted by number15 on 16-05-2012 07:45:

No, questa è la mia :-D

La sua è di fare la query con where data_di_scadenza < now()

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


Posted by pintu on 16-05-2012 09:04:

Scusa la mia ignoranza ma devo concludere questa dannata cosa della data :D Ora che ho il mio campo 'attivo', per settarlo automaticamente ho bisogno dello scheduler perchè non posso farlo via trigger giusto? Neanche magari con un trigger before insert or update or delete?


Posted by pintu on 16-05-2012 09:29:

PS: ma cron è solo per Linux? Io uso windows


Posted by number15 on 16-05-2012 09:30:

No, con i trigger non risolvi.
I trigger si attivano su una qualche azione, non a tempo.
Quindi se tu non hai azioni, non puoi aggiornare lo stato degli annunci.

Quindi le opzioni sono 2:
1) usare il campo attivo, e utilizzare uno scheduler per aggiornarlo (che sia cron o quello di postgres)
2) non usare il campo attivo e nelle query aggiungi il controllo che la data d scadenza sia minore della data odierna.

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


Posted by number15 on 16-05-2012 09:38:

Originally posted by pintu
PS: ma cron è solo per Linux? Io uso windows


Si, solo linux.
Non conosco alternative...
Prova comunque lo scheduler di postgres, ha anche più senso per un esame di db.

Se non vuoi impazzire, utilizza l'altra soluzione.

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


Posted by pintu on 16-05-2012 09:41:

Si ho usato la seconda alla fine..quando eseguo la ricerca di un immobile faccio prima un UPDATE della tabella annuncio.. se data_scadenza > now() allora 'attivo' = FALSE, poi eseguo la ricerca. Grazie comunque per la pazienza :) Posso chiederti un altro aiuto?
Nella tabella annuncio io ho i due attributi data_pubbl e data_scadenza di tipo DATE. Io però vorrei che l'utente della mia applicazione inserisca solo la data di pubblicazione e che la data_scadenza sia calcolata automaticamente, tipo 30 giorni dopo la data_pubbl...come posso fare?


Posted by number15 on 16-05-2012 10:04:

Il problema è che usi postgres e non ho idea delle funzioni che abbia.

Per myslq son queste: http://dev.mysql.com/doc/refman/5.5...-functions.html

Devi cercare le equivalenti per postgres.
Quella che ti serve dovrebbe essere la funzione DATE_ADD()

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


Posted by pintu on 17-05-2012 10:27:

Grazie ho risolto la cosa delle date! Come faccio a inserire delle immagini all'interno del database? (Postgres)


Posted by number15 on 17-05-2012 10:40:

Metti il percorso in un campo text e lo usi come img src nel'html

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


Posted by pintu on 18-05-2012 10:03:

Non capisco perchè non funziona :(

<img src="C:\Program Files\PostgreSQL\EnterpriseDB-Apache\Php\apache\www\NEWS_1336368281_TUTTO.jpg" />

quando carico la pagina contenente l'immagine non la visualizza!


Posted by pintu on 18-05-2012 10:19:

niente risolto :)


Posted by aPiso on 27-05-2012 14:59:

scusate io non ho capito solo una cosa per i cluster... mettiamo ad esempio che io voglia attuare il criterio di similarità geografica.
Quindi se questo criterio è selezionato come il criterio attivo quando seleziono un annuncio devo mostrare gli annunci simili.
Ma io questi annunci sarei andato a pigliarli con una funzione, mentre da quel che leggo vanno messi in una qualche vista materializzata e aggiornati man mano... ma in questo modo dovrei creare una vista materializzata per ogni annuncio, che contenga gli annunci che gli stanno vicini!! mi sembra una cosa completamente folle, uno si fa un sacco di problemi in fase concettuale per una tabella in più o in meno, e poi a fronte di un numero potenziale di 1 milione di annunci finisco per creare un milione di tabelle? Mi sembra talmente impossibile che penso davvero di aver interpretato male io la consegna, qualcuno mi può per cortesia fare un po' di chiarezza?


Posted by pintu on 28-05-2012 10:30:

Io sono nella tua stessa situazione. Lasciando stare che non ho idea di come implementare il criterio di similarità geografica, mi sembra comunque una richiesta assurda (soprattutto rispetto alle cose spiegate a lezione) e esposta in modo tutt'altro che chiaro.. Non so se il ragionamento che hai fatto tu sia simile al mio..ti spiego: inserisco il primo annuncio, mettiamo che si trovi a milano, e creo vista che contiene questo annuncio. Al secondo inserimento, se l'annuncio è "simile" al primo (10 km nel raggio di milano) lo inserisco nella stessa vista, altrimenti creo un'altra vista e lo inserisco li... e cosi via! Ho compreso bene?


Posted by Shady90 on 04-06-2012 22:07:

Ciao a tutti,

anche io sono alle prese con il progetto, lo sto cercando di fare per la consegna di luglio e ho ancora un bel pò di dubbi...

1. Cosa si intende per viste materializzate? Se ho capito bene sono tabelle normali che hanno le stesse (o quasi) colonne di un'altra tabella (e che non è vista), all'interno del quale, attraverso dei trigger, vengono inseriti/rimossi/aggiornati i record all'interno .. Voi come le avete fatte?

2. Questa cosa dei cluster mi lascia ancora molto confuso: io credo che sia da sviluppare con l'idea "gli annunci vicini a un dato annuncio", quindi il punto di partenza sono le coordinate di un annuncio dato in parametro... detto questo, come è possibile strutturare qualcosa di questo tipo su un database??? l'unica cosa (assurda) che mi viene in mente è una tabella fatta ad esempio da due colonne, entrambe FK di annunci, dove ogni coppia di id indica annunci vicini.... come avete fatto voi?

@aPiso e @pintu ho gli stessi indentici dubbi vostri (meno male, pensavo di essere l'unico), avete risolto in qualche modo? qualcuno è riuscito a parlare con il professore per capire che diavolo vuole che si realizzi?

Ciao e grazie!


Posted by CowBoy on 05-06-2012 16:03:

@aPiso non ho la minima idea di cosa tratti il progetto ma penso che sia giusto creare e mantenere le viste materializzate visto che in un sito realmente operativo la mancanza di cache si sente e come. Quindi anche se all'inizio costa un po crederci, queste sono utili tanto quanto la progettazione del DB stesso.
Cmq non si rischia di creare 1Kviste per 1Kannunci. Se clusterizzato questo creera viste solo per i cluster selezionati (da aggiornare con i nuovi dati). Salutissimi, e se hai bisogno di una mano chiedimi pure...

@Shady90 ripassa i comandi base dei DBMS per le viste. Per i cluster pensa ai filti che usi ad es. su Booking per selezionare un sottoinsieme di alberghi... se la vista c'è allora vanno solo recuperati i dati, altrimenti il DBMS si deve fare tutta l'esecuzione della query e poi passarti i dati.

Giusto?!

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


Posted by pintu on 05-06-2012 20:17:

Scusate una cosa...nel testo del progetto si parla di cluster, ma in pratica questi cluster saranno da implementare tramite delle viste no?? Oppure si parla di indici, clusterizzazione di tabelle ecc?? No perchè non mi sembra che al laboratorio queste cose sono state fatte...


Posted by Shady90 on 05-06-2012 21:26:

@CowBoy in che senso "ripassa i comandi base dei DBMS per le viste" ? è sbagliato quello che ho detto sulle viste materializzate?

mah comunque per me continua a non aver senso creare una vista per ogni annuncio per clusterizzare gli annunci vicini..


Posted by CowBoy on 05-06-2012 22:27:

Si parla di cluster come termine generico di raggrupamento logico o gruppo di unità simili... uno dei tanti termini inglesi presenti nell'informatica che ha molteplici applicazioni (non solo nei DBMS).

Viste materializzate:
Viste (il risultato dell'esecuzione di una query) salvate sotto forma di struttra dati.
http://wiki.postgresql.org/wiki/Mat...Views_GSoC_2010
http://tech.jonathangardner.net/wik...erialized_Views
http://www.revsys.com/blog/2006/jan...-in-postgresql/

Importante manterere aggiornate tali strutture dati in modo opportuno. Le strutture servono da cache all'applicazione per evitare di eseguire ogni volta query anche molto lunghe o su una quantità di dati importante.
Bene aggiungerle con i trigger, ma magari pensare anche a una soluzione ad hoc per dare robustezza alla struttura (tipo ogni settimana/giorno/mese/ect. elimino la cache ed eseguo la query per ricreare le strutture dati)

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


Posted by Shady90 on 05-06-2012 22:28:

scusate, cerchiamo di capire una cosa alla volta..

lasciando un attimo da parte il discorso dei cluster, la parte più semplice sulle viste materializzate:
"Lo studente realizzi opportune viste materializzate per i criteri di selezione che ritiene maggiormente utilizzati. E' pertanto necessario realizzare gli opportuni trigger che mantengano aggiornate tali viste in relazione all'inserimento o alla modi ca di annunci."

quello che occorre fare è creare dei trigger che ad ogni insert/update/delete crei/aggiorni delle tabelle (temporanee, ma tabelle vere e proprie) in cui inserisce/modifica/rimuove dei record "COPIA" di quelli che si stanno inserendo/modificando .. qualcosa del genere?

faccio un esempio:
- inserisco un annuncio nella tabella ANNUNCI, l'annuncio è della tipologia "vendita"
- il trigger interviene nella insert, crea se non esiste già una tabella tipo "ANNUNCI_VENDITA" e inserisce al suo interno un record identico (o quasi) a quello che è stato inserito (dico quasi perchè porto solo le colonne che poi realmente vengono interrogati cercando gli annunci)

un altro esempio:
- aggiorno un annuncio nella tabella ANNUNCI, cambiando la tipologia da "vendita" ad "affitto"
- il trigger rimuove il record relativo a quell'annuncio dalla tabella "ANNUNCI_VENDITA" e lo inserisce in "ANNUNCI_AFFITTO"


... può andare bene?


Posted by CowBoy on 05-06-2012 22:38:

Ottimo use case... allora ci stiamo capendo. Avanti così!

P.S: Meglio avere già pronte le tabelle, tanto conosci a priori i criteri di selezione.

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


Posted by Shady90 on 05-06-2012 22:48:

.... ovvero??

utilizzare istruzioni apposite come CREATE MATERIALIZED VIEW non credo sia quello che voglia vedere, l'idea è probabilmente quella di implementare noi delle viste materializzate, non usare strumenti già gestiti dal DBMS ("è pertanto necessario realizzare gli opportuni trigger che .....")

se non fosse così nulla avrebbe senso, perchè sappiamo entrambi che i DBMS gestiscono automaticamente la cache delle viste scegliendo se rieseguire la query della vista oppure interrogare una cache dell'ultima interrogazione ..


Posted by CowBoy on 05-06-2012 23:09:

Giusto e capisco cosa vuoi dire. Cmq evito adesso di sbandare e uscire fuori argomento.

Chiaro è che l'importanza maggiore in questa parte del progetto non è capire se e come hai fatto la struttura dati, se non capire quando e dove attivi i trigger. Insomma, il loro utilizzo.

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


Posted by Shady90 on 06-06-2012 07:51:

Ok, grazie del supporto CowBoy.

Sto implementando come ho scritto sopra per quanto riguarda le viste materializzate che velocizzano la ricerca.
Sono ancora un pò perplesso invece per la realizzazione dei cluster che dividono gli annunci per similiarità .... se non ne vengo a capo la faccio lato web con delle query mirate e non lato db!

Se qualcuno ha buone idee ci faccia sapere!! :D


Posted by pintu on 06-06-2012 14:40:

"L'amministratore può cambiare la visualizzazione in cluster selezionando un diverso criterio di similarità tra quelli supportati dall'applicazione."

Se io ho il criterio di similarità geografica e un ipotetico criterio di similarità sulla base del prezzo come posso scegliere tra uno dei due lato DB?? Dato che questi due criteri saranno implementati tramite funzioni non posso scegliere a priori quale utilizzare...


Posted by Shady90 on 07-06-2012 19:30:

Originally posted by pintu
"L'amministratore può cambiare la visualizzazione in cluster selezionando un diverso criterio di similarità tra quelli supportati dall'applicazione."

Se io ho il criterio di similarità geografica e un ipotetico criterio di similarità sulla base del prezzo come posso scegliere tra uno dei due lato DB?? Dato che questi due criteri saranno implementati tramite funzioni non posso scegliere a priori quale utilizzare...

io stavo pensando a una tabella "Amministrazione", con tipo due colonne "chiave" "valore", dove una delle chiavi serve ad impostare quale criterio usare.

nelle funzioni quando ne ho bisogno interrogo la tabella, dall'applicazione invece per cambiare faccio un update sulla tabella.

non mi è venuto in mente nient'altro..


Posted by pintu on 07-06-2012 20:05:

Potrebbe essere una soluzione! Anche perchè poi si può ottenere lo stesso risultato lato Web con una semplice submit che esegue l'update!

Se mi illumino con qualche altra soluzione ti aggiorno :D


Posted by Shady90 on 07-06-2012 22:09:

scusa pintu, alla fine tu come hai fatto i cluster per vicinanza?


Posted by pintu on 07-06-2012 22:26:

ci sto lavorando ancora non ho fatto niente! A parte l'idea che avevo postato qualche commento più su non sono andato avanti!


Posted by pintu on 09-06-2012 14:21:

Qualcuno sa se si può fare una cosa del genere?

CREATE OR REPLACE FUNCTION prova(varchar(20)) RETURNS VOID AS $$

BEGIN
CREATE VIEW vista($1) AS
SELECT attributo
FROM tabella
WHERE condizione

RETURN;

END;

$$ language plpgsql;


In pratica voglio una funzione che prende in input un varchar(20) e crei una tabella il cui nome sia: vista('valore in input').
E' possibile?? Ho fatto diverse prove ma non ottengo risultati, forse però sbaglio qualcosa nella sinstassi.


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

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