PDA

Visualizza la versione completa : [sql] struttura tabella email


123delphi321
17-02-2010, 21:59
Ciao a tutti,

avrei bisogno di capire la struttura di una tabella contenente le email....
io avrei elaborato questo:



CREATE TABLE EMAIL(
ID INTEGER PRIMARY KEY,
OGGETTO VARCHAR(400),
MITTENTE VARCHAR(400),
DESTINATARIO BLOB,
CC BLOB,
BCC BLOB,
PRIORITA VARCHAR(20),
RECEIPT BLOB,
ORGANIZZAZIONE BLOB,
DATA DATE,
ORA TIME,
BYTES INTEGER,
CANCELLATO VARCHAR(1),
BODY BLOB);


nutro diversi dubbi per quanto riguarda i campi DESTINATARIO, CC, BCC,RECEIPT e ORGANIZZAZIONE che avrei pensato tipo BLOB... googlando ho trovato solo alcuni che dicevano genericamente che erano campi formato testo senza specificarne la lunghezza.

ho visto molte email con tanti indirizzi di destinazione.... quindi non saprei che dimensione dare a questi fields.

avete suggerimenti o indirizzi utili dove leggere.... ho avete gia una struttura da postarmi?

grazie

MacApp
17-02-2010, 23:17
Sei totalmente fuori strada, salvo restando forse solo il campo ID come chiave primaria.
http://it.wikipedia.org/wiki/Normalizzazione_del_database

123delphi321
18-02-2010, 08:46
Originariamente inviato da MacApp
Sei totalmente fuori strada, salvo restando forse solo il campo ID come chiave primaria.
http://it.wikipedia.org/wiki/Normalizzazione_del_database

Ciao MacApp e grazie dell'aiuto!

fortunatamente esiste questo forum dove postando i miei dubbi riesco ad evitare molti errori.

ma potresti essere più chiaro? al di la della normalizzazione e la non ridondaza dei dati non ho capito quale e' la struttura della tabella email della quale cerco informazioni....

forse intendi che devo fare una cosa del genere?


CREATE TABLE EMAIL(
ID INTEGER PRIMARY KEY,
IDdest INTEGER REFERENCES DESTINATARIO(ID),
IDcc INTEGER REFERENCES cc(ID),
IDbcc INTEGER REFERENCES bcc(ID),
oggetto VARCHAR(400),
MITTENTE VARCHAR(400),
etc,etc...


questo intendi?
e se è cosi quando invii una email con 50 indirizzi devi inviare 50 email al server di posta, invece di inviarne 1 con 50 indirizzi di destinazione?

facendo delle prove con il programma outlook ho visto che nelle caselle destinatario, cc e body si riescono ad inserire 32767 caratteri e nella casella oggetto 256 caratteri

qualcosa non mi e' chiara....
grazie dell'aiuto.

Joe Taras
19-02-2010, 11:10
Ciao,
ti rispondo limitatamente al secondo post, poi la base di dati la devi immaginare come meglio credi ma io farei così
MITTENTE è a sua volta chiave esterna e non un campo libero.
IdDest lo sostituirei con IdLista e creerei una nuova tabella
listadestinatari figlia di email, dove hai due campi
idemail (che è l'id della mail) e id del contatto, quindi quando invii una mail prendi tutti i destinatari figli della stessa.

In merito al limite di destinatari, anche i client di posta ne hanno uno infatti in alternativa si creano delle liste di distribuzione, potresti anche immaginare l'uso di queste che ovviamente hanno impatti sulla struttura del db.

Cmq sicuramente la seconda soluzione è migliore della prima che hai postato ma si può sempre raffinare.

Ti consiglio di immaginare un diagramma entità relazioni (non deve essere necessariamente formale) ma che ti aiuti nella progettazione della base di dati.

Buona giornata

MacApp
19-02-2010, 11:43
Originariamente inviato da 123delphi321
se è cosi quando invii una email con 50 indirizzi devi inviare 50 email al server di posta, invece di inviarne 1 con 50 indirizzi di destinazione?
No. Organizza i tuoi dati almeno in terza forma normale, poi quando hai bisogno di aggregarli, costruendo ad esempio un campo contenente diversi indirizzi email, li aggreghi con una query opportuna, (effettuando ad esempio join, union, query annidate e quant'altro tra le varie tabelle), che se riterrai opportuno potrai mettere in una view.

123delphi321
19-02-2010, 16:30
bene, quindi devo creare automaticamente una tabella con indirizzi email... questa la struttura:



CREATE TABLE INDIRIZZIEMAIL(
ID INTEGER PRIMARY KEY,
ITEM VARCHAR(150),
EMAIL VARCHAR(150) unique);

CREATE TABLE INDIRIZZIDELLAEMAIL(
ID INTEGER PRIMARY KEY,
IDEMAIL INTEGER REFERENCES EMAIL(ID) on delete cascade,
IDDEST INTEGER REFERENCES INDIRIZIEMAIL(ID) on delete cascade,
IDCC INTEGER REFERENCES INDIRIZIEMAIL(ID) on delete cascade,
IDBCC INTEGER REFERENCES INDIRIZIEMAIL(ID) on delete cascade);


Nella tabella INDIRIZZIDELLAEMAIL solo 1 field tra IDDEST, IDCC, IDBCC avra un valore per ogni record.

quindi con questo sistema qualsiasi indirizzo inserito nella email ( to/cc/bcc ) dovrà essere registrato nella tabella indirizzi.

spero di aver pensato bene..... ?!
grazie

MacApp
19-02-2010, 18:23
Una email puo' essere inviata a tanti destinatari:
direttamente;
in conoscenza pubblica;
in conoscenza privata;

e magari ci sono altri modi o ce ne saranno in futuro.

123delphi321
19-02-2010, 22:21
Originariamente inviato da MacApp
Una email puo' essere inviata a tanti destinatari:
direttamente;
in conoscenza pubblica;
in conoscenza privata;

e magari ci sono altri modi o ce ne saranno in futuro.

cosa intendi?

direttamente; = destinatario
in conoscenza pubblica; = cc
in conoscenza privata; = bcc

o altro?

grazie

123delphi321
21-02-2010, 17:33
ciao,

mi sto incasinando. sto avendo delle difficolta nella cattura degli indirizzi email.

in pratica quando mi arriva una email, possono arrivare, diversi indirizzi che io poi dovrei inserire nell'apposita tabella.

il problema è che questi indirizzi non hanno sempre la stessa sintassi.. es.:

"nome, cognome, societa" <nome.cognome@virgilio.it> o anche
nome.cognome@virgilio.it o anche
nome, cognome, societa (nome.cognome@virgilio.it)

e non so in quanti altri modi acora....

mi sapete suggerire qualcosa?

grazie

Loading