Ok.
Certo che non casca il mondo, siamo qui per trovare un modo di risolvere un problema tecnico in modo collaborativo, e ti ringrazio per il tuo aiuto.
Sì, diciamo che il programma è mio, ma dato che è open-source, è libero da legami commerciali, e via dicendo...
Comunque, immagino che sia difficile rappresentare cose complesse in un piccolo spazietto di 16x16, ma dobbiamo cercare di tenerci su queste dimensioni perchè, come ti avevo accennato, icone troppo grandi porterebbero via spazio utile, e sarei anche costretto a modificare il programma per farle entrare negli spazi assegnati. Tieni conto che le icone relative agli oggetti gestiti dall'applicazione, vengono utilizzate anche per disegnare gli stessi sull'area di lavoro (il progetto), per cui condizionerebbero di molto il disegno.
Ma a parte questo, questi ultimi esempi mi sembrano già molto più simpatici, ma immagino che ridimensionati a 16x16 diventerebbero illegibili. Tocca trovare qualcosa per rendere lo stesso l'idea in spazi più piccoli, se tu hai già provato a ridimensionarli, e hai riscontrato troppa perdita di visibilità, ci credo, non lo metto in dubbio assolutamente. Comunque, la stilizzazione mi piace, almeno per il momento, almeno finchè non troviamo il bandolo della matassa.
Non è questione di bocciare i disegni, è ovvio che stiamo cercando di trovare il punto esatto, ci vorrà del tempo...
Il fatto che i tuoi esempi sembrano troppo semplice, è relativo. Siamo d'accordo sul fatto che alcune funzioni sono piuttosto ostiche da rappresentare. Ad ogni modo, qualsiasi dubbio, o non conoscenza della funzione specifica, basta che domandi, io cercherò di darti una descrizione il più dettagliata possibile, anzi, per l'occasione, ti descrivo al momento cosa sono e fanno le funzioni legati agli oggetti:
Image: bè, questa è facile, rappresenta un oggetto grafico di tipo immagine, ovvero una qualsiasi immagine presa da disco e trasferita sul diagramma, e ridimensionabile;
Area: rappresenta un'area rettangolare, ridimensionabile e colorabile dall'utente, con la possibilità di contenere un testo qualsiasi, con qualsivoglia Font;
Stamp: (timbro) è un'oggetto fisso, che rappresenta una piccola area rettangolare, contenente alcune stringhe di informazioni relative al progetto (es. nome, creatore, date, ecc.);
Text: è un testo, di font e colore definiti dall'utente, che viene visualizzato nel diagramma;
Database: questo oggetto viene visualizzato solo nelle Form, al momento, e rappresenta un db. Di solito viene dipinto come un cilindro, a volte con dei dischi sovrapposti;
Schema: come per Database. Definisce un'area specifica di un db, contenente una serie di oggetti, indipendenti dagli altri schemi. Tanto per farla breve, di solito uno schema può contenere oggetti con lo stesso nome di altri presenti in altri schemi;
Relation: praticamente una linea che congiunge due tabelle. Rappresenta una foregn-key, ovvero una chiave con cui una tabella accede ai dati di un'altra tabella, sottostando a certi requisiti. Una relazione può assumere diversi significati: onetoone=corrispondenza 1:1, onetomany=corrispondenza 1:n, manytomany=corrispondenza n:n. Queste tipologie sono di solito rappresentate, disegnando una freccia la termine della linea;
Domain: il dominio è un oggetto che definisce un template, ovvero una serie di caratteristiche con cui è possibile creare altri oggetti. L'oggetto creato da un dominio non può variare le sue caratterische derivate dal dominio da cui è stato creato;
Function/Procedure: come per i linguaggi, rappresenta appunto un determinato pezzo di codice, eseguibile e scritto in uno specifico linguaggio;
Sequence: è un oggetto che fornisce valori progressivi, di solito uitlizzati per popolare campi numerici in modo automatico e univoco;
Tablespace: molto simile a Schema, ma definisce anche lo spazio su filesystem dei dati di un database. Nei motori db di solito esiste uno spazio di default, su cui è possibile creare database. Per fare un esempio, utilizzato di solito, ovvero potresti usare diverse tablespace per gli stessi database, ma relativamente allo sviluppo, al collaudo e alla produzione;
Trigger: in pratica non è altro che un evento che si scatena in determinate condizione (es. all'inserimento di un dato in tabella), e che di solito è agganciato ad una tabella e ad una funzione/procedura. Questo permette di attivare una elaborazione particolare, allo scatenarsi si un evento su una determinata tabella;
Type: simile a domain, definisce un template per una tiologia di dato;
View: definisce una vista sui dati di una o più tabelle. In pratica è un'oggetto che non contiene nulla, ma fornisce un modo per visualizzare determinate informazioni contenute enelle tabelle, e con particolari condizioni;
Field: è un campo di una tabella, ovvero una singola informazione contenuta nella tabella, con caratteristiche di tipo, dimensione, ecc.. In casi particolari viene rappresentato con speciali icone: foreign-key, primary-key, null permitted, null not permitted. In questi casi io ho adottato alcune icone, come ad esempio la chiave (per le key), che può assumere diversi colori, oppure dei rombi, anch'essi di diverso colore;
Index: rappresenta un particolare indice di una tabella, ovverro una serie di campi che definiscono la chiave di ricerca di un dato.
Alcuni degli oggetti che ti ho elencato sono validi per determinati tipi di database, ma in questo caso la cosa non ti importa, perchè non ha nulla a che vedere con le icone.
Ad ogni modo, alcuni oggetti non sò proprio come rappresentarli, per cui ho utilizzato le icone contenuto in phpPgAdmin, che sono alquanto generiche, che danno alcuna idea della funzione...