Twitter Facebook
Torna alla home page English
prodotti
supporto e assistenza
quanto costa Instant Developer?
clienti
contatta Pro Gamma
press
blog
forum
segui Pro Gamma su twitter e facebook

Home/Schemi E/R

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.



 

<<< Un unico strumento


 

Indice del percorso

Un unico strumento
Schemi E/R
ORM "Document Orientation"
Debugging
Tracing
Testing
RTC
Team Works