Newsgroup: it.comp.programmare
Titolo: MySql o PostgreSql

nei prossimi mesi avrò la possibilità di realizzare, assieme a degli amici,
due progetti molto interessanti. sono due applicazioni per il web, che
necessitano quindi di un archivio di discrete dimensioni.
al DB sicuramente accederanno diversi utenti contemporaneamente.
ora, poiche io conosco solo Access, e vorei passare a qualcosa di semplice
ma piu sicuro... vorrei un consiglio tra MySql e PostgreSql.
piu che altro io sarei orientato verso il primo, perche ho visto che ci sono
diversi libri in italiano, mentre per il secondo, testi in ita non ne ho
trovati, e sinceramente studiare delle cose abbastanza complesse da un libro
inglese la vedo dura...
inoltre, so che entrambi sono quasi gratuiti o che cmq costano pochissimo.
ultima cosa: io in ogni programma che utilizza DB uso spesso le select
all'interno di altre select
ad es.:
SELECT *,(SELECT ID FROM Tabella1 WHERE ...) AS Campo1, [...]
ora, questo con Access si puo fare, ma è possibile farlo anche con MySql e
PostgreSql?
e se prima non era possibile, magari lo è adesso con la nuova versione di
MySql, oppure no?
grazie
Mario

Mario,
Mario wrote:

   Nonostante sia in inglese, ti consiglio un'occhiata a
 
http://www.jaschke-net.de/dbms.html
dove puoi trovare diversi confronti tra i due prodotti.
   Il mio (modesto) parere e` che per applicazioni semplici siano 
efficaci sia MySQL che PGSQL: il primo ha dalla sua parte una vastissima 
diffusione di informazioni ed esempi d'uso in Rete, una grande facilita` 
di apprendimento ed una buona interrelazione con molti linguaggi di 
programmazione e di scripting (i.e.: il PHP), cosa che lo rende molto 
indicato per le applicazioni web-oriented, il secondo e` un prodotto di 
grande esperienza (esiste da oltre un decennio) ed ha molte 
caratteristiche di stabilita` e di personalizzazione tipiche dei DBMS 
commerciali.
   Dovendo sviluppare un'applicazione critica, certamente non lascerei 
la scelta alla lingua della documentazione ma per un sito web o anche
un'applicazione gestionale di livello medio-basso, potrebbe essere anche 
una discriminante significativa. ;)
   Per quanto riguarda la tua /query/, infine, direi che rappresenta, 
per lo standard ANSI, un errore sintattico (a meno che tu non abbia 
omesso qualcosa di rilevante) e che pertanto andrebbe evitata in 
qualsiasi contesto. Il fatto che "con Access si puo fare" e` abbastanza 
indicativo del motivo per cui vada evitata: esistono metodi migliori (e 
conformi allo standard) per creare interrogazioni iterative.
--
Alla prossima,
Marco


beh la query era scritta cosi come esempio, non ho rispettato la sintassi...
ora non ricordo esattamente come si scrive, ma piu o meno è così:
SELECT *, (SELECT ID FROM Tabella1 WHERE ID='25') AS AltroCampo FROM
Tabella2 WHERE Data BETWEEN #1/1/1999# AND #2/2/2000#
(piu o meno...)
ripeto, è un tipo di sub-query che uso spessissimo e trovo utilissimo...
non so se esistano metodi alternativi, piu veloci e piu sicuri per fare la
stessa cosa... se ne esistono dimmelo.. :-)
grazie per le informazioni
Mario

 stessa cosa... se ne esistono dimmelo.. :-)
adesso sono curioso! :-)
puoi spiegare meglio cosa dovrebbe fare questa query, magari riportando  i
campi di Tab1 e Tab2?
cosi' magari ti possiamo suggerire una sintassi piu' conforme allo standard!
--
Ciao by Allanon


allora... sto facendo un programma relativo alle spedizioni di pacchi. in
maiuscolo ci sono le tabelle, in minuscolo i relativi campi.
MITTENTI: ID, Nome, Indirizzo
DESTINATARI: ID, Nome, Indirizzo
SPEDIZIONI: ID, ID_DA, ID_A, Tipo, Importo, ecc. ecc.
se io voglio un recordset che mi contenga tutte le spedizioni effettuate
entro una certa data, io faccio:
dim rst as new adodb.recordset
set rst=cnn.execute("SELECT *,(SELECT Nome FROM MITTENTI WHERE ID =ID_DA) AS
NomeMittente, (SELECT Nome FROM DESTINATARI WHERE ID= ID_A) AS
NomeDesinatario, WHERE DataSpedizione BETWEEN #1/1/1999# AND #2/2/2000#")
in questo modo ho nel recordset rst tutti i campi della tabella SPEDIZIONI,
e anche i nomi del mittente e del destinatario.
il vantaggio è che nel recordset ho, in un colpo solo, i nomi delle parti, e
non solo gli ID, e quindi non devo fare un'lteriore query per recuperare i
nomi dagli ID.
ciao
Mario
TABELLA1: ID, Nome

 nomi dagli ID.
   A meno di pastrocchi sui formati delle date, la seguente 
interrogazione dovrebbe risultare portabile su qualunque sistema, 
compreso MS Access.
<code>
	select	M.Nome as NomeMittente,
		D.Nome as NomeDestinatario,
		S.Tipo as TipoSpedizione,
	--	insert here other required fields
	from	MITTENTE as M,
		DESTINATARIO as D,
		SPEDIZIONI as S
	where	S.DataSpedizione > '1/1/1999' and
		S.DataSpedizione < '2/2/2000' and
		S.ID_DA=
M.ID
 and
		S.ID_A=
D.ID
</code>
--
Alla prossima,
Marco

 ciao
onestamente non riesco a capire la query come l'hai impostata tu (mi viene
il mal di testa a guardarla :-) ), comunque una soluzione "portabile" su
ogni DB (in quanto SQL standard) e' la seguente, ad onor del vero moooolto
semplice:
SELECT MITTENTI.NOME , SPEDIZIONI.* , DESTINATARI.NOME
FROM MITTENTI, DESTINATARI, SPEDIZIONI
WHERE 
MITTENTI.ID
 = SPEDIZIONI.ID_DA
AND 
DESTINATARI.ID
 = SPEDIZIONI.ID_A
AND DataSpedizione BETWEEN #1/1/1999# AND #2/2/2000#";
PS: l'unica cosa che non so e' come ( e se ) si possa fare in modo
"portabile" il controllo sulla data.
--
Ciao by Allanon

compreso MS Access.
Hmmm... non mi pare.
Access credo richieda necessariamente # prima e dopo la
data.  E' una microsoftata fuori standard come ce ne sono
tante.  In ogni caso, parlare di aderenza allo standard,
quando si parla di SQL, significa parlare di una piccola
utopia.  Non c'e' alcun DBMS compatibile con gli altri, se
non per query elementari.
-- 
The Follet

"portabile" il controllo sulla data.
Non e' portabile, non credo sia standard.
Credo che sia, anzi, un sistema valido SOLO per Access.
-- 
The Follet

 data.
   Lo so, per questo parlavo di "pastrocchi". Purtroppo, nei campi della 
gestione dei dominii "temporali" e delle estensioni si deve ancora fare 
molta strada, in particolare per quanto riguarda il mondo Microsoft (e 
quando mai no? <grin>). Per quanto riguarda join, selezione e 
proiezione, invece, devo dire che questi ultimi anni hanno visto una 
buona convergenza verso lo standard ANSI 2.
--
Alla prossima,
Marco

 MySql e PostgreSql?
con PostgreSQL credo si possa fare, con MySQL non lo so (perche' non 
l'ho mai usato)
ciao Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 Credo che sia, anzi, un sistema valido SOLO per Access.
lo so, infatti nel PS intendevo che non so come farlo in maniera standard!
--
Ciao by Allanon


questo tipo di sintassi non mi risulta molto familiare... :-)
in ogni caso la corrispondenza di ID_Da e ID_A non deve essere una
condizione... cioe a me non interessa limitare la ricerca solo ad alcuni
mittenti/destinatari, bensi a tutti, purche rientranti in quella data.
per quanto riguarda il fatto di mettere mittenti e destinatari in un'unica
tabella credo che lo farò, è vero.
a questo punto volevo chiedere: dal punto di vista dello spazio occupato e
del tempo impiegato nella query, conviene avere due tabelle
mittenti/destinatari, oppure una sola, che abbia però un ulteriore campo,
che identifichi il soggetto come mittente o come destinatario? mi serve
questo perche nel prog c'è una parte in cui si puo ottenere l'elenco di
tutti i potenziali mittenti, e deve essere distinto da quello dei potenziali
destinatari...
grazie
Mario