UNIVERSIDADE FEDERAL DE CAMPINA GRANDE - UFCG UNIVERSIDADE FEDERAL DA PARAÍBA - UFPB UNIVERSIDADE FEDERAL DE PERNAMBUCO - UFPE Projeto CISA Cooperação Internacional do Semi-árido Relatório Técnico Levantamento Inicial de Escopo e Requisitos © 2009 CISA – Todos os direitos reservados Campina Grande, PB, setembro de 2009 Sumário 1. INTRODUÇÃO ......................................................................................... 6 2. ESCOPO DO SISTEMA ........................................................................... 7 2.1. 3. PROJETO ARQUITETURAL ........................................................................................................ 7 REQUISITOS FUNCIONAIS .................................................................... 9 3.1 DESCRIÇÃO DOS REQUISITOS FUNCIONAIS ............................................................................... 9 3.2 REQUISITOS NÃO-FUNCIONAIS .............................................................................................. 12 3.2.1 Requisitos de Custo ...................................................................................................... 12 3.2.2 Requisitos de Segurança .............................................................................................. 13 3.2.3 Requisitos de Qualidade............................................................................................... 13 3.2.4 Requisitos de Interface ................................................................................................. 13 3.2.5 Requisitos de Confiabilidade........................................................................................ 14 3.2.6 Requisitos de Integração .............................................................................................. 14 3.2.7 Requisitos de Instalação ............................................................................................... 14 4. ESQUEMA LÓGICO DO BANCO DE DADOS ...................................... 15 REFERÊNCIAS BIBLIOGRÁFICAS ............................................................. 17 ANEXO A – SCRIPT SQL DO BANCO DE DADOS ..................................... 18 2 Lista de Figuras Figura 1: Arquitetura do SIGWeb ..................................................................... 8 Figura 2: Esquema lógico relacional do banco de dados............................... 16 3 Lista de Tabelas Tabela 1: Responsáveis por cada requisito funcional .................................... 11 4 Lista de Abreviaturas CD Compact disc CISA Cooperação Internacional do Semi-árido CNPq Conselho Nacional de Desenvolvimento Científico e Tecnológico CTHIDRO Fundo Setorial de Recursos Hídricos DVD Digital Video Disc FINEP Financiadora de Estudos e Projetos RAM Random Access Memory UFCG Universidade Federal de Campina Grande UFPB Universidade Federal da Paraíba UFPE Universidade Federal de Pernambuco 5 1. Introdução O projeto CISA (Cooperação Internacional do Semi-árido) tem como objetivo promover uma cooperação entre várias instituições de pesquisa para desenvolver soluções para os problemas gerados pela escassez de água nas regiões semi-áridas. Este projeto é financiado pelo Ministério de Ciência e Tecnologia, com recursos do CTHIDRO - Fundo Setorial de Recursos Hídricos, repassados através da FINEP e CNPq. Uma das principais ações do CISA é desenvolver um sistema de suporte a decisão em ambiente Web, o qual chamados de SIGWeb, que será enviado à coordenação do CISA em Cabo Verde na África. Este sistema contará com a participação de pesquisadores da UFCG, UFPB e UFPE. O SIGWeb é a integração dos principais sistemas desenvolvidos pelas diferentes instituições: cadastro integrado da UFPE, modelagem hidrológica de UFPB e visualização de mapas através do Hidrogis [1] pela UFCG. Este documento apresenta a arquitetura, os requisitos e o projeto do banco de dados para o desenvolvimento do SIGWeb. O restante do relatório está organizado como segue: a seção 2 descreve o escopo do sistema e sua arquitetura. A seção 3 apresenta os requisitos funcionais e não-funcionais. A seção 4 descreve o esquema conceitual do banco de dados. Por fim, o anexo A apresenta o esquema lógico do banco de dados. 6 2. Escopo do Sistema O escopo do SIGWeb engloba as necessidades básicas de cadastro de dados de postos pluviométricos, fluviométricos e evaporimétricos; bacias e sub-bacias hidrográficas; usuários de água; hidrografia, poços, ilhas, municípios, etc. Alguns destes dados serão inseridos através de arquivos shapefiles, outros terão um cadastro via Web para edição dos dados. Além das informações cadastrais, o SIGWeb realizará a visualização de tais informações através de mapas digitais na Web. Os dados do SIGWeb serão armazenados e compartilhados através de um banco de dados corporativo. Basicamente, o SIGWeb consiste na integração de três módulos que serão detalhados a seguir. 2.1. Projeto Arquitetural A arquitetura do sistema SIGWeb é apresentada na Figura 1. Os módulos principais são: o cadastro integrado, a modelagem hidrológica e o HidrogisLite. O cadastro integrado é responsável por uma série de cadastros de vários dados referentes à hidrologia, como dados de postos pluviométricos, fluviométicos e evaporimétricos, dados de bacias e sub-bacias, rios e usuários de água. Através do cadastro integrado, o usuário alimenta o banco de dados espacial com novos dados que poderão ser exibidos no mapa digitalizado. O módulo HidrogisLite é uma versão simplificada do Hidrogis [1]. Este módulo é responsável pela criação, configuração e visualização de mapas na Web e pode ser alimentado pelos dados fornecidos pelo módulo de cadastro integrado ou através de arquivos shapefiles, os quais terão os dados extraídos e inseridos no banco de dados utilizando o programa shp2pgsql. O módulo de modelagem hidrológica utiliza alguns modelos para realizar simulações e obter comparações entre vazões observadas e 7 simuladas a e chuvas. Ele utiliza dados fornecidos pelo cadastro integrado como entrada para os simuladores. Este módulo terá uma chamada dentro do mapa, dessa forma, o usuário irá selecionar visualmente os postos desejados e acionar um botão que irá invocar o módulo de modelagem hidrológica. Todos os módulos se integram via servidor de banco de dados Postgresql, o qual também possui a extensão espacial Postgis para auxiliar o módulo hidrogisLite nas operações espaciais sobre os dados georreferenciados. O usuário terá acesso a todos esses recursos através de um portal, no qual o usuário terá que se autenticar. Figura 1: Arquitetura do SIGWeb 8 3. Requisitos Funcionais Os requisitos funcionais descrevem as diversas funções que clientes e usuários desejam que o software realize [2]. Em outras palavras, tais requisitos definem a funcionalidade desejada do software. O termo função é usado no sentido genérico de operação que pode ser realizada pelo sistema, seja através de comandos dos usuários seja pela ocorrência de eventos internos ou externos ao sistema. A próxima seção descreve os requisitos funcionais do sistema. 3.1 Descrição dos requisitos funcionais RF 1: [Cadastro]: Realiza a inclusão, edição, consulta e remoção dos dados definidos no sistema. RF 2: [Inserção de shapefiles]: para dados do tipo polígono e linhas, a inserção no sistema se dará via shapefile. Neste caso, não haverá edição de dados não espaciais via cadastro. RF 3: [Atualização de dados via mapa]: o usuário poderá atualizar dados do cadastro que estão sendo exibidos no mapa. Nesse requisito, devese verificar a permissão do usuário no acesso a esse recurso de atualização do cadastro. RF 4: [Gerar relatórios]: gerar relatórios contendo as séries históricas dos postos fluviométricos, pluviométricos e informações cadastrais. RF 5: [Gerenciamento de usuários]: o sistema deve permitir acesso apenas aos usuários cadastrados no mesmo. Desta forma, deve-se ter disponível um módulo que auxilie no cadastro (criação, remoção e atualização) de usuários, definindo permissões de acesso às funcionalidades e credenciais de acesso como login e senha. RF 6: [Criação de mapas]: o sistema deve permitir a criação, edição e remoção de mapas. O usuário poderá adicionar informações 9 provenientes do cadastro integrado ou de shapefiles, os quais serão representados por camadas no mapa. RF 7: [Visualização]: o sistema deve permitir a visualização dos mapas criados pelo módulo hidrogisLite. A visualização dos mapas deve ser composta por ferramentas de manipulação de mapas digitais, como, operações de zoom in, zoom out, visão original e pan. Da mesma forma, a visualização deve possuir ferramentas como: apresentação de informações sobre os mapas visualizados (information), que apresenta os dados sobre uma determinada feição e tooltip, que apresenta dados sobre a identificação da feição ao clique do mouse. RF 8: [Consulta textual]: a consulta textual consiste em permitir o usuário montar consultas com base nos atributos não-espaciais e visualizar o resultado através de tabelas ou no mapa. RF 9: [Consulta espacial]: a consulta espacial possibilita ao usuário montar consultas sobre as feições no mapa, como: sobreposição, buffer, contém, se tocam, etc. Da mesma forma que na consulta textual, o resultado da consulta espacial poderá ser visualizado através de uma tabela ou no mapa. RF 10: [Modelos]: o sistema deve permitir o usuário gerar dados de vazão baseados em 3 modelos (MODHAC, SMAP, TANKMODEL) em escala diária e mensal. RF 11: [Gerar gráficos dos modelos]: o sistema deve permitir o usuário gerar gráficos a partir do resultado do cálculo dos modelos. Os poços que servirão de entrada para os modelos serão selecionado visualmente através do mapa. RF 12: [Criação do Portal]: o portal do SIGWeb será responsável por autenticar o usuário e lhe apresentar uma página inicial. Essa página irá conter uma barra de ferramentas no qual o usuário irá escolher o serviço que deseja utilizar: cadastro de bacia, cadastro de poços, visualização de mapas, etc. 10 RF13: [Gerência de Usuários]: a gerência de usuários é um sub-módulo dentro do portal do SIGWeb. Através desse sub-módulo, o administrador do sistema poderá atribuir um perfil para cada usuário. O perfil irá informar quais os recursos um grupo de usuários tem permissão de acesso. RF14: [Auditoria]: o SIGWeb deve salvar cada ação executada pelos usuários para posterior averiguação de quem manuseou os dados do sistema. RF 15: [Documentação online]: o sistema irá conter um tutorial on-line para auxiliar o usuário na utilização das diversas funcionalidades. Cada requisito possui uma instituição responsável por implementá-la como pode ser visto na Tabela 1. Tabela 1: Responsáveis por cada requisito funcional Instituições UFCG UFPE UFPB Requisitos RF1 RF2 RF3 RF4 RF5 RF6 RF7 RF8 RF9 RF10 RF11 RF12 RF13 RF14 RF15 X X X X X X X X X X X X (CIVIL) X X X X X No requisito funcional RF15, cada instituição irá desenvolver a documentação on-line do módulo de sua responsabilidade. Para o HidrogisLite, o grupo da Unidade Acadêmica de Engenharia Civil da UFCG, sob responsabilidade da Dra. Iana Alexandra Alves Rufino, será responsável 11 por desenvolver a documentação on-line da parte de gerenciamento de mapas. 3.2 Requisitos Não-Funcionais Esta seção enumera os requisitos não-funcionais que devem ser satisfeitos pelo sistema. Requisitos não-funcionais são as qualidades globais de um software, como manutenibilidade, usabilidade, custos e várias outras. Estruturamos os requisitos não funcionais da seguinte forma: Requisitos de Custo: estabelecem os requisitos de Hardware e Software necessários à execução do sistema. Requisitos de Qualidade: tratam sobre a verificação da qualidade de projeto, bem como a conformidade, que é a medida de quão o software produzido está seguindo as regras de projeto definidas. Requisitos de Interface: tratam sobre o grau de usabilidade, ergonomia e interação homem-máquina que a interface deve atender, bem como as especificações técnicas para que a interface cumpra o seu objetivo especificado. Requisitos de Confiabilidade: definem e medem a capacidade que o software possui de operar sem ocorrência de falhas durante um período especificado de tempo em um determinado ambiente. Requisitos de Integração: tratam da capacidade que o software deve possuir de interagir e interoperar com outros sistemas, de acordo com o especificado. Requisitos de Instalação: especificam os requisitos de ambiente em que o produto será instalado, bem como o esforço necessário para se instalar o produto. 3.2.1 Requisitos de Custo [Hardware] O sistema deve ser executável em servidor robusto, com alta disponibilidade e vazão para suportar a carga a ser processada. A configuração mínima recomendada Processador Quad Core Intel 12 Xeon, 6M Cache, 3Ghz, 4GB RAM, 2 discos de 250Gb, leitor de CD/DVD, Adaptador de rede Ethernet. [SoftwareBásico] O sistema deve ser executável em plataforma de software tipo Linux, com software de apoio (Tomcat, Apache, etc.) gratuito. 3.2.2 Requisitos de Segurança [Papéis] Os usuários do sistema deverão ser cadastrados e um papel atribuído a cada usuário. O sistema só deve permitir o acesso a usuários autorizados, com exceção de mapas que serão abertos ao público conforme a escolha do usuário. [Identificação] O login de usuários é obrigatório e a identidade do usuário deve ser confirmada através de mecanismos de autenticação (senha, por exemplo). Estas senhas devem ser protegidas. [Auditoria] O sistema deverá ter um mecanismo de auditoria através do uso de um log de logins que indica quem fez o quê e quando no sistema. Toda informação de auditoria deve estar protegida para uso restrito aos usuários autorizados. 3.2.3 Requisitos de Qualidade [Documentação] O sistema deve dispor de documentação de desenvolvimento (JavaDoc); de instalação (Guia do Instalador); uso (Guia do Usuário) e help on-line (auxílio rápido através de tooltips). 3.2.4 Requisitos de Interface [Browser] O sistema deve ter interface amigável e ergonômica, e deve necessariamente ser acessível via browser Web. [Usabilidade] O sistema deverá ser amigável podendo ser facilmente utilizado após um treinamento básico. Pode-se supor que o usuário já tenha familiaridade com o uso básico de computadores, navegação Web e sistemas de informação. 13 3.2.5 Requisitos de Confiabilidade [ReinícioAutomático] O sistema deve ter capacidade de recuperação, devendo ser dotado de mecanismo de reinício automático (watchdog) sempre que se tornar instável ou indisponível. [Erros] O sistema deve reportar qualquer erro com mensagens explicativas. Não se devem expor mensagens internas (do tipo “Null Pointer Exception”) para o usuário. Toda ocorrência de erro que não seja causada por erro remediável pelo usuário deve ser registrada em log para posterior análise pelos desenvolvedores. 3.2.6 Requisitos de Integração [SGBD] Para suprir necessidades de persistência de dados, o banco de dados deverá ter suporte a geoprocessamento. Outros mecanismos de persistência (arquivos, etc.) podem ser utilizados, desde que não impliquem na instalação de middleware adicional. 3.2.7 Requisitos de Instalação [Instalação] O sistema deve dispor de mídia de instalação em DVD, que permita a instalação completa do mesmo com o mínimo de intervenção do instalador. Os requisitos de instalação devem ser claramente explicitados. [InstruçõesInstalação] A mídia de instalação deve conter instruções básicas de como proceder ao processo de instalação (arquivo leiame.txt). 14 4. Esquema Lógico do Banco de Dados Esta seção descreve o projeto lógico do banco de dados. Através desse esquema é possível visualizar as tabelas que serão criadas no banco de dados e serão alimentadas pelo módulo de cadastro integrado; visualizálas num mapa, e realizar consultas. Para cada tabela, é possível visualizar os possíveis atributos e o tipo de cada um. A Figura 2 mostra o esquema lógico relacional do banco de dados, usando a notação UML [3]. É possível observar como as tabelas estão relacionadas. A primeira tabela no esquema é a tabela “usuário”. Essa tabela armazena informações sobre os usuários do sistema. Todo usuário deve possuir um perfil associado. Este perfil descreve que funcionalidades um grupo de usuário pode acessar no SIGWeb. A tabela “permissao” armazena as possíveis ações do sistema, por exemplo: cadastro de poço fluviométrico, edição de bacia, visualização de mapas, etc. Esse conjunto de tabelas, juntamente com a tabela de auditoria, pertence à parte do sistema responsável pela segurança. Um segundo conjunto de tabelas é responsável por armazenar dados cadastrais de hidrologia. Essas tabelas correspondem aos postos pluviométricos, fluviométricos e evaporimétricos, sub-bacias e bacias, rios, ilhas, municípios e usuários de água. O terceiro grupo de tabelas é responsável por armazenar informações de criação dos mapas. A tabela “mapa” armazena o nome do mapa e o bounding box. Cada mapa é formado por um conjunto de categorias que por sua vez é formado por um conjunto de camadas. A tabela “projecao” informa quais informações poderão ser exibidas no mapa para cada camada. A tabela “unit_definition” informa que tabela do banco de dados e qual a coluna espacial a camada do mapa representa. O script SQL do banco de dados, usando sintaxe Postgresql/Postgis pode ser encontrado no Anexo A. 15 Figura 2: Esquema lógico relacional do banco de dados 16 Referências Bibliográficas [1] Hidrogis, <http://www.lsi.dsc.ufcg.edu.br/~hidrogis>, último acesso em setembro de 2009. [2] R. PRESSMAN. Engenharia de Software 6ª Edição. Editora McGraw-Hill, 2006. [3] Martin Fowler, “UML Distilled Third Edition: A Brief Guide to the Standard Object Modeling Language", Addison-Wesley Professional, 3ª edição, 2003. 17 Anexo A – Script SQL do Banco de Dados BEGIN; --------------------------- Segurança do sistema --------------------------CREATE SEQUENCE SQ_USUARIOS; CREATE TABLE TB_USUARIOS ( CD_USUARIO INT NOT NULL DEFAULT nextval('SQ_USUARIOS'), CD_PERFIL INT, NM_USUARIO VARCHAR(200), DS_IDENTIDADE VARCHAR(50) ); CREATE SEQUENCE SQ_PERFIL; CREATE TABLE TB_PERFIL ( CD_PERFIL INT NOT NULL DEFAULT nextval('SQ_PERFIL'), NM_PERFIL VARCHAR(50), DS_PERFIL TEXT ); CREATE SEQUENCE SQ_PERMISSOES; CREATE TABLE TB_PERMISSOES ( CD_PERMISSAO INT NOT NULL DEFAULT nextval('SQ_PERMISSAO'), CD_PERFIL INT, NR_CAD_POSTOS_PLU INT DEFAULT 0, NR_CAD_POSTOS_FLU INT DEFAULT 0, NR_CAD_POSTOS_EVP INT DEFAULT 0, NR_CAD_ESTACOES INT DEFAULT 0, NR_CAD_MUNICIPIOS INT DEFAULT 0, 18 NR_CAD_BACIAS INT DEFAULT 0, NR_CAD_SUBBACIAS INT DEFAULT 0, NR_CAD_OBRAS_HIDRICAS INT DAFAULT 0, NR_CAD_USUARIOS_AGUA INT DEFAULT 0, NR_CAD_POCOS INT DEFAULT 0, NR_CAD_CISTERNAS INT DEFAULT 0, NR_DADOS_CHUVA INT DEFAULT 0, NR_DADOS_VAZAO INT DEFAULT 0, NR_DADOS_EVP INT DEFAULT 0, NR_DADOS_CLIM INT DEFAULT 0 ); CREATE SEQUENCE SQ_AUDITORIA; CREATE TABLE TB_AUDITORIA ( CD_AUDITORIA INT NOT NULL DEFAULT nextval('SQ_AUDITORIA'), CD_USUARIO, DT_EVENTO DATE, DS_ACAO TEXT ); -- Constraints das PK ALTER TABLE TB_USUARIOS ADD CONSTRAINT PK_USUARIOS PRIMARY KEY(CD_USUARIO); ALTER TABLE TB_PERFIL ADD CONSTRAINT PK_PERFIL PRIMARY KEY(CD_PERFIL); ALTER TABLE TB_PERMISSOES ADD CONSTRAINT PK_PERMISSOES PRIMARY KEY(CD_PERMISSAO); ALTER TABLE TB_AUDITORIA ADD CONSTRAINT PK_AUDITORIA PRIMARY KEY(CD_AUDITORIA); -- Constraints da FK 19 ALTER TABLE TB_USUARIOS ADD CONSTRAINT FK_USUARIOS_PERFIL FOREIGN KEY (CD_PERFIL) REFERENCES TB_PERFIL (CD_PERFIL); ALTER TABLE FK_PERMISSOES_PERFIL TB_PERMISSOES FOREIGN KEY ADD CONSTRAINT (CD_PERFIL) REFERENCES TB_PERFIL (CD_PERFIL); --------------------------- Gerência de mapas --------------------------- CREATE SEQUENCE SQ_MAPAS; CREATE TABLE TB_MAPAS ( CD_MAPA INT NOT NULL DEFAULT nextval('SQ_MAPAS'), NM_MAPA VARCHAR(50), NR_MAX_X NUMERIC, NR_MAX_Y NUMERIC, NR_MIN_X NUMERIC, NR_MIN_Y NUMERIC ); CREATE SEQUENCE SQ_CATEGORIAS; CREATE TABLE TB_CATEGORIAS( CD_CATEGORIA INT NOT NULL DEFAULT nextval('SQ_CATEGORIA'), CD_MAPA INT NOT NULL, NM_CATEGORIA VARCHAR(50) ); CREATE SEQUENCE SQ_CAMADAS; CREATE TABLE TB_CAMADAS ( CD_CAMADA INT NOT NULL DEFAULT nextval('SQ_CAMADAS'), CD_CATEGORIA INT NOT NULL, 20 CD_UNIT INT, NM_CAMADA VARCHAR(50), BL_VISIVEL BOOLEAN, DS_FILLCOLOR VARCHAR(10), DS_STROKEWIDTH VARCHAR(10), DS_STROKECOLOR VARCHAR(10), NR_RAIO NUMERIC ); CREATE SEQUENCE SQ_UNIT; CREATE TABLE TB_UNIT_DEFINITION ( CD_UNIT INT NOT NULL DEFAULT nextval('SQ_UNIT'), NM_UNIT VARCHAR(50), -- nome da unit DS_GEOM VARCHAR(50), -- nome da coluna espacial DS_CHAVE VARCHAR(50), -- nome da coluna da PK DS_FONTE VARCHAR(50) -- nome da tabela fonte ); CREATE SEQUENCE SQ_PROJECAO; CREATE TABLE TB_PROJECAO ( CD_PROJECAO INT NOT NULL DEFAULT nextval('SQ_PROJECAO'), CD_CAMADA INT NOT NULL, DS_PROJECAO VARCHAR(200), DS_ALIAS VARCHAR(200), DS_UNIDADE VARCHAR(10) ); -- Constraint das PK ALTER TABLE TB_MAPAS ADD CONSTRAINT PK_MAPAS PRIMARY KEY (CD_MAPA); ALTER TABLE TB_CATEGORIA ADD CONSTRAINT PK_CATEGORIAS PRIMARY KEY (CD_CATEGORIA); 21 ALTER TABLE TB_CAMADA ADD CONSTRAINT PK_CAMADA PRIMARY KEY (CD_CAMADA); ALTER TABLE TB_UNIT_DEFINITION ADD CONSTRAINT PK_UNIT PRIMARY KEY (CD_UNIT); ALTER TABLE TB_PROJECAO ADD CONSTRAINT PK_PROJECAO PRIMARY KEY (CD_PROJECAO); -- Constraint das FK ALTER TABLE FK_CATEGORIA_MAPAS TB_CATEGORIAS FOREIGN KEY ADD CONSTRAINT (CD_MAPA) REFERENCES TB_MAPAS (CD_MAPA); ALTER TABLE TB_CAMADAS FK_CAMADAS_CATEGORIAS FOREIGN ADD KEY CONSTRAINT (CD_CATEGORIA) REFERENCES TB_CATEGORIAS (CD_CATEGORIA); ALTER TABLE TB_PROJECAO ADD CONSTRAINT FK_PROJECAO_CAMADAS FOREIGN KEY (CD_CAMADA) REFERENCES TB_CAMADAS (CD_CAMADA); --------------------------- Tabelas do Cadastro --------------------------- CREATE SEQUENCE SQ_POSTOS_PLU; CREATE TABLE TB_POSTOS_PLU ( CD_POSTO_PLU INT NOT NULL DEFAULT nextval('SQ_POSTOS_PLU'), CD_BACIA INT, CD_SUBBACIA INT, NM_POSTO_PLU VARCHAR (200), NR_LATITUDE FLOAT, NR_LONGITUDE FLOAT ); 22 CREATE SEQUENCE SQ_POSTOS_EVP; CREATE TABLE TB_POSTOS_EVP ( CD_POSTO_EVP INT NOT NULL DEFAULT nextval(SQ_POSTOS_ECP'), CD_BACIA INT, CD_SUBBACIA INT, NM_POSTO_EVP VARCHAR (200), NR_COEFICIENTE NUMERIC, NR_LATITUDE FLOAT, NR_LONGITUDE FLOAT NR_TAXA_EVP NUMERIC ); CREATE SEQUENCE SQ_POSTO_FLU; CREATE TABLE TB_POSTO_FLU ( CD_POSTO_FLU INT NOT NULL DEFAULT nextval('SQL_POSTO_FLU'), CD_BACIA INT, CD_SUBBACIA INT, NM_POSTO VARCHAR (200), NR_LATITUDE FLOAT, NR_LONGITUDE FLOAT ); CREATE SEQUENCE SQ_BACIAS; CREATE TABLE TB_BACIAS ( CD_BACIA INT NOT NULL DEFAULT nextval('SQ_BACIAS'), NM_BACIA VARCHAR (200), NR_PERC_IMPERM NUMERIC -- percentual de impermeabilidade ); CREATE SEQUENCE SQ_SUBBACIAS; 23 CREATE TABLE TB_SUBBACIAS ( CD_SUBBACIA INT NOT NULL DEFAULT nextval('SQ_SUBBACIAS'), CD_BACIA INT NOT NULL, NM_SUBBACIA VARCHAR (200), NR_PERC_IMPERM NUMERIC -- percentual de impermeabilidade ); CREATE SEQUENCE SQ_MUNICIPIOS; CREATE TABLE TB_MUNICIPIOS ( CD_MUNICIPIO INT NOT NULL DEFAULT nextval('SQ_MUNICPIOS'), NM_MUNICIPIO VARCHAR (200), NR_POPULACAO INT, NR_LATITUDE FLOAT, NR_LONGITUDE FLOAT ); CREATE SEQUENCE SQ_USUARIOS_AGUA; CREATE TABLE TB_USUARIOS_AGUA ( CD_USUARIO_AGUA INT NOT NULL DEFAULT nextval('SQ_USUARIOS_AGUA'), CD_MUNICIPIO INT, NM_USUARIO VARCHAR (200), DS_IDENTIDADE VARCHAR (50), NR_LATITUDE FLOAT, NR_LONGITUDE FLOAT ); -- Criando as colunas espaciais SELECT AddGeometryColumn('TB_POSTOS_PLU', 'geometria', 4326, 'POINT', 2); SELECT AddGeometryColumn(TB_POSTOS_EVP', 'geometria', 4326, 'POINT', 2); SELECT AddGeometryColumn('TB_POSTOS_FLU', 'geometria', 4326, 'POINT', 2); 24 SELECT AddGeometryColumn('TB_BACIAS', 'geometria', 4326, 'MULTIPOLYGON', 2); SELECT AddGeometryColumn(TB_SUBBACIAS', 'geometria', 4326, 'MULTIPOLYGON', 2); SELECT AddGeometryColumn('TB_RIOS', 'geometria', 4326, 'geometria', 4326, 'MULTILINESTRING', 2); SELECT AddGeometryColumn('TB_ILHAS', 'MULTIPOLYGON', 2); SELECT AddGeometryColumn('TB_MUNICIPIOS', 'geometria', 4326, 'MULTILINESTRING', 2); SELECT AddGeometryColumn('TB_USUARIOS_AGUA', 'geometria', 4326, 'POINT', 2); -- Constraints da PK ALTER TABLE TB_POSTOS_PLU ADD CONSTRAINT PK_POSTOS_PLU PRIMARY KEY (CD_POSTO_PLU); ALTER TABLE TB_POSTOS_EVP ADD CONSTRAINT PK_POSTOS_EVP PRIMARY KEY (CD_POSTO_EVP); ALTER TABLE TB_POSTOS_FLU ADD CONSTRAINT PK_POSTOS_FLU PRIMARY KEY (CD_POSTO_FLU); ALTER TABLE TB_BACIAS ADD CONSTRAINT PK_BACIAS PRIMARY KEY (CD_BACIA); ALTER TABLE TB_SUBBACIAS ADD CONSTRAINT PK_SUBBACIAS PRIMARY KEY (CD_SUBBACIA); ALTER TABLE TB_RIOS ADD CONSTRAINT PK_RIOS PRIMARY KEY (CD_RIO); ALTER TABLE TB_ILHAS ADD CONSTRAINT PK_ILHAS PRIMARY KEY (CD_ILHA); ALTER TABLE TB_MUNICIPIOS ADD CONSTRAINT PK_MUNICIPIOS PRIMARY KEY (CD_MUNICIPIO); 25 ALTER TABLE TB_USUARIOS_AGUA ADD CONSTRAINT PK_USUARIOS_AGUA PRIMARY KEY (CD_USUARIO_AGUA); -- Constraints da FK ALTER TABLE FK_POSTOS_PLU_BACIAS TB_POSTOS_PLU FOREIGN KEY ADD CONSTRAINT (CD_BACIA) REFERENCES ADD CONSTRAINT TB_BACIAS (CD_BACIA); ALTER TABLE TB_POSTOS_PLU FK_POSTOS_PLU_SUBBACIAS FOREIGN KEY (CD_SUBBACIA) REFERENCES TB_SUBBACIAS (CD_SUBBACIA); ALTER TABLE FK_POSTOS_EVP_BACIAS TB_POSTOS_EVP FOREIGN KEY ADD CONSTRAINT (CD_BACIA) REFERENCES ADD CONSTRAINT TB_BACIAS (CD_BACIA); ALTER TABLE TB_POSTOS_EVP FK_POSTOS_EVP_SUBBACIAS FOREIGN KEY (CD_SUBBACIA) REFERENCES TB_SUBBACIA (CD_SUBBACIA); ALTER TABLE FS_POSTOS_PLU_BACIAS TB_POSTOS_PLU FOREIGN KEY ADD CONSTRAINT (CD_BACIA) REFERENCES ADD CONSTRAINT TB_BACIAS (CD_BACIA); ALTER TABLE TB_POSTOS_PLU FK_POSTOS_FLU_SUBBACIAS FOREIGN KEY (CD_SUBBACIA) REFERENCES TB_SUBBACIAS (CD_SUBBACIA); ALTER TABLE FK_SUBBACUAS_BACIA TB_SUBBACIAS FOREIGN KEY ADD CONSTRAINT (CD_BACIA) REFERENCES TB_BACIAS (CD_BACIA); 26 ALTER TABLE TB_RIOS ADD CONSTRAINT FK_RIOS_BACIAS FOREIGN KEY (CD_BACIA) REFERENCES TB_BACIAS (CD_BACIA); ALTER TABLE TB_RIOS ADD CONSTRAINT FK_RIOS_ILHAS FOREIGN KEY (CD_ILHA) REFERENCES TB_ILHAS (CD_ILHA); ALTER TABLE FK_MUNICIPIOS_ILHAS TB_MUNICIPIOS FOREIGN KEY ADD CONSTRAINT (CD_ILHA) REFERENCES TB_ILHAS (CD_ILHA); ALTER TABLE TB_USUARIOS_AGUA FK_USUARIOS_AGUA_MUNICIPIOS FOREIGN ADD KEY CONSTRAINT (CD_MUNICIPIO) REFERENCES TB_MUNICIPIOS (CD_MUNICIPIO); END; 27