Questa pagina elenca ed esemplifica le funzionalità di In.de per la gestione degli schemi E/R di database.
Gestione nativa e ottimizzata di database server: Access 2000, Oracle 7, 8, 9, 10 e 11, SQL Server 7, 2000, 2005 e 2008, DB2/400, DB2/UDB 9, Postgres 8, MySQL 5.
Videata delle proprietà di un database, in particolare è visibile la maschera di compatibilità.
Possibilità di utilizzare ulteriori tipi di database tramite connessioni generiche (ODBC/JDBC).
Creazione e modifica degli schemi di database: tabelle, campi, relazioni, indici, valori default, check-constraints, domini e liste valori.
//II Nwind DB
//
// Database Type: My SQL 5
// Time Stamp: 01/07/2009 9.03.27
//
//FF Costruzione tabelle...
//NT 9
//
//CC Costruzione tabella ZZ_OBJECTS (OMESSA)
//
//CC Costruzione tabella Categorie
//NC 2
//
>>drop table Categorie cascade |
create table Categorie
(
IDCategoria int auto_increment not null primary key,
NomeCategoria varchar(15) not null,
Descrizione varchar(9999) ,
Immagine blob
) |
//
//CC Costruzione tabella Clienti
//NC 3
//
>>drop table Clienti cascade |
create table Clienti
(
IDCliente varchar(5) not null,
NomeSocieta varchar(40) not null,
Contatto varchar(30) ,
Posizione varchar(30) ,
Indirizzo varchar(60) ,
Citta varchar(15) ,
Zona varchar(15) ,
CAP varchar(10) ,
Paese varchar(15) ,
Telefono varchar(24) ,
Fax varchar(24)
) |
alter table Clienti add constraint Clienti_PK primary key (IDCliente) |
//
//CC Costruzione tabella Impiegati
//NC 4
//
>>drop table Impiegati cascade |
create table Impiegati
(
IDImpiegato int auto_increment not null primary key,
Cognome varchar(20) not null,
Nome varchar(10) not null,
Posizione varchar(30) ,
Titolo varchar(25) ,
DataNascita datetime ,
DataAssunzione datetime ,
Indirizzo varchar(60) ,
Citta varchar(15) ,
Zona varchar(15) ,
CAP varchar(10) ,
Paese varchar(15) ,
TelDomicilio varchar(24) ,
Interno varchar(4) ,
Foto blob ,
Nota varchar(9999) ,
Superiore integer
) |
//
//CC Costruzione tabella Corrieri
//NC 5
//
>>drop table Corrieri cascade |
create table Corrieri
(
IDCorriere int auto_increment not null primary key,
NomeSocieta varchar(40) not null,
Telefono varchar(24)
) |
//
//CC Costruzione tabella Prodotti
//NC 6
//
>>drop table Prodotti cascade |
create table Prodotti
(
IDProdotto int auto_increment not null primary key,
NomeProdotto varchar(40) not null,
IDFornitore integer ,
IDCategoria integer ,
QuantitaPerUnita varchar(30) ,
PrezzoUnitario decimal(19,6) default 0,
Scorte integer default 0,
QuantitaOrdinata integer default 0,
LivelloDiRiordino integer default 0,
Sospeso integer default 0 not null
) |
//
//CC Costruzione tabella Fornitori
//NC 7
//
>>drop table Fornitori cascade |
create table Fornitori
(
IDFornitore int auto_increment not null primary key,
NomeSocieta varchar(40) not null,
Contatto varchar(30) ,
Posizione varchar(30) ,
Indirizzo varchar(60) ,
Citta varchar(15) ,
Zona varchar(15) ,
CAP varchar(10) ,
Paese varchar(15) ,
Telefono varchar(24) ,
Fax varchar(24) ,
HomePage varchar(9999)
) |
//
//CC Costruzione tabella Ordini
//NC 8
//
>>drop table Ordini cascade |
create table Ordini
(
IDOrdine int auto_increment not null primary key,
IDCliente varchar(5) ,
IDImpiegato integer ,
DataOrdine datetime ,
DataRichiesta datetime ,
DataSpedizione datetime ,
IndirizzoDestinatario varchar(60) ,
CittaDestinatario varchar(15) ,
ZonaDestinatario varchar(15) ,
CAPDestinatario varchar(10) ,
PaeseDestinatario varchar(15) ,
Corriere integer ,
Trasporto decimal(19,6) default 0,
Destinatario varchar(40)
) |
//
//CC Costruzione tabella Righe Ordine
//NC 9
//
>>drop table DettagliOrdini cascade |
create table DettagliOrdini
(
IDOrdine integer not null,
IDProdotto integer not null,
PrezzoUnitario decimal(19,6) default 0 not null,
Quantita integer default 1 not null,
Sconto double default 0 not null
) |
alter table DettagliOrdini add constraint DettagliOrdini_PK primary key (IDOrdine, IDProdotto) |
//
//FF Costruzione foreign key...
//NT 8
//
//CC Costruzione foreign key Impiegati - Superiore
//NC 1
//
alter table Impiegati add constraint SuperioreImpiegato foreign key (Superiore) references Impiegati (IDImpiegato) |
//
//CC Costruzione foreign key Prodotti - CategorieProdotti
//NC 2
//
create index CategorieProdotti on Prodotti (IDCategoria) |
alter table Prodotti add constraint CategorieProdotti foreign key (IDCategoria) references Categorie (IDCategoria) |
//
//CC Costruzione foreign key Prodotti - FornitoriProdotti
//NC 3
//
create index FornitoriProdotti on Prodotti (IDFornitore) |
alter table Prodotti add constraint FornitoriProdotti foreign key (IDFornitore) references Fornitori (IDFornitore) |
//
//CC Costruzione foreign key Ordini - ClientiOrdini
//NC 4
//
create index ClientiOrdini on Ordini (IDCliente) |
alter table Ordini add constraint ClientiOrdini foreign key (IDCliente) references Clienti (IDCliente) |
//
//CC Costruzione foreign key Ordini - CorrieriOrdini
//NC 5
//
create index CorrieriOrdini on Ordini (Corriere) |
alter table Ordini add constraint CorrieriOrdini foreign key (Corriere) references Corrieri (IDCorriere) |
//
//CC Costruzione foreign key Ordini - ImpiegatiOrdini
//NC 6
//
create index ImpiegatiOrdini on Ordini (IDImpiegato) |
alter table Ordini add constraint ImpiegatiOrdini foreign key (IDImpiegato) references Impiegati (IDImpiegato) |
//
//CC Costruzione foreign key Righe Ordine - OrdiniDettagli ordini
//NC 7
//
create index OrdiniDettagli_ordini on DettagliOrdini (IDOrdine) |
alter table DettagliOrdini add constraint OrdiniDettagli_ordini foreign key (IDOrdine) references Ordini (IDOrdine) |
//
//CC Costruzione foreign key Righe Ordine - ProdottiDettagli ordini
//NC 8
//
create index ProdottiDettagli_ordini on DettagliOrdini (IDProdotto) |
alter table DettagliOrdini add constraint ProdottiDettagli_ordini foreign key (IDProdotto) references Prodotti (IDProdotto) |
//
//FF Costruzione Indici...
//NT 1
//
//CC Costruzione indice Categorie - Nome Categoria
//NC 1
//
>>drop index NomeCategoria |
create unique index NomeCategoria on Categorie(NomeCategoria) |
//
//FF Costruzione sequenze...
//NT 6
//
//CC Costruzione sequenza Categorie ID
//NC 1
//
alter table Categorie auto_increment = 1 |
//
//CC Costruzione sequenza Impiegati ID
//NC 2
//
alter table Impiegati auto_increment = 1 |
//
//CC Costruzione sequenza Corrieri ID
//NC 3
//
alter table Corrieri auto_increment = 1 |
//
//CC Costruzione sequenza Prodotti ID
//NC 4
//
alter table Prodotti auto_increment = 1 |
//
//CC Costruzione sequenza Fornitori ID
//NC 5
//
alter table Fornitori auto_increment = 1 |
//
//CC Costruzione sequenza Ordini ID
//NC 6
//
alter table Ordini auto_increment = 1 |
//
//FF Costruzione interfacce per Stored Function...
//NT 0
//
//FF Costruzione Viste...
//NT 0
//
//FF Costruzione trigger...
//NT 0
//
//FF Costruzione procedure...
//NT 0
//
//FF Costruzione Collegamenti DB...
//NT 0
Codice DDL per la creazione del database di esempio Northwind su MySQL5.
Gestione portabile di campi Counter e di campi GUID codificati in ASCII85 per facilitarne l’uso nelle query come costanti.
Generazione automatica dei nomi fisici degli oggetti.
Scrittura tramite Visual Code di viste, stored procedure e trigger. In tal modo saranno convertite automaticamente nel linguaggio corrispondente al tipo di database prescelto.
Screenshot di un trigger in Visual Code.
create or replace trigger AGGIORSCORTA after
insert or delete or update
on DettagliOrdini
for each row
DECLARE
BEGIN
--
-- Aggiorna Scorta Body
-- Corpo Procedura
--
--
-- Aggiorna la scorta del prodotto
--
if NOT (INSERTING) then
--
-- Aggiorna la scorta del prodotto
--
update Prodotti set
Scorte = Prodotti.Scorte + :OLD.Quantita
where (IDProdotto = :OLD.IDProdotto)
;
end if;
if NOT (DELETING) then
update Prodotti set
Scorte = Prodotti.Scorte - :NEW.Quantita
where (IDProdotto = :NEW.IDProdotto)
;
end if;
END;
Codice generato per Oracle. Viene usato direttamente un trigger for each row.
create trigger AGGIORSCORTA on DettagliOrdini
for insert , delete , update with append as begin
set nocount on
if ( (select trigger_nestlevel( object_ID('AGGIORSCORTA') ) ) > 1 ) return
declare @INSERTING bigint
declare @DELETING bigint
declare @UPDATING bigint
declare @ROWC int
set @INSERTING = (select count(*) from inserted)
set @DELETING = (select count(*) from deleted )
set @UPDATING = @INSERTING * @DELETING
if @INSERTING>0 set @ROWC = @INSERTING
if @DELETING>0 set @ROWC = @DELETING
if @UPDATING>0 set @INSERTING = 0
if @UPDATING>0 set @DELETING = 0
declare NEWC cursor local forward_only read_only for select
IDProdotto,
Quantita
from inserted
open NEWC
declare OLDC cursor local forward_only read_only for select
IDProdotto,
Quantita
from deleted
open OLDC
declare @TransCount integer
declare @ReturnStatus integer
declare @ErrorNumber integer
declare @NEW_IDProdotto int
declare @NEW_Quantita int
declare @OLD_IDProdotto int
declare @OLD_Quantita int
if @INSERTING>0 or @UPDATING>0 fetch next from NEWC into
@NEW_IDProdotto,
@NEW_Quantita
if @DELETING>0 or @UPDATING>0 fetch next from OLDC into
@OLD_IDProdotto,
@OLD_Quantita
while @@fetch_status = 0 and @ROWC>0 begin
set @ROWC=@ROWC-1
-- ******* Begin Trigger Body
set @TransCount = 1
--
-- Aggiorna Scorta Body
-- Corpo Procedura
--
--
-- Aggiorna la scorta del prodotto
--
if NOT (@INSERTING>0) begin
--
-- Aggiorna la scorta del prodotto
--
update Prodotti set
Scorte = Prodotti.Scorte + @OLD_Quantita
where (IDProdotto = @OLD_IDProdotto)
end
if NOT (@DELETING>0) begin
update Prodotti set
Scorte = Prodotti.Scorte - @NEW_Quantita
where (IDProdotto = @NEW_IDProdotto)
end
-- ******* End Trigger Body
if @INSERTING>0 or @UPDATING>0 fetch next from NEWC into
@NEW_IDProdotto,
@NEW_Quantita
if @DELETING>0 or @UPDATING>0 fetch next from OLDC into
@OLD_IDProdotto,
@OLD_Quantita
end
end
Codice generato per SQL Server, che non supporta i trigger for each row, il comportamento viene simulato da codice.
Reverse engineering degli schemi di database.
importazione di tabelle, campi, relazioni, indici, viste, stored procedure. Campionamento del contenuto delle tabelle e calcolo della cardinalità stimata.
Videata di importazione dello schema di un database.
Generazione ed esecuzione degli script DDL di creazione e di modifica dello schema. Preparazione automatica del database di test con grandezza a piacere. Importazione dati da altro database.
Durante la creazione del database è possibile scegliere il tipo di operazione da effettuare.
Gestione grafica dello schema delle relazioni.
Schema delle relazioni tra tabelle generato automaticamente.
Gestione di schemi complessi tramite Subject Area.
Calcolo delle dimensioni stimate del database.
La stima delle dimensioni viene effettuata in base alle lunghezze dei campi e alla cardinalità impostata.
Controllo del livello adeguato di documentazione.
Vengono evidenziate le tabelle con livello di documentazione basso.
Definizione ed esecuzione di procedure di test per gli oggetti del database: comparazione del contenuto di più database e trasferimento dati fra database.
Supporto UNICODE a livello di database.
Definizione di “trasformazioni implicite” per correggere errori di definizione in database esistenti.