-------------------------------------------------------------------------------- -- Pessoa -------------------------------------------------------------------------------- -- -- Pessoa -- CREATE TABLE pessoa ( rg VARCHAR( 9 ), -- RG [PK] nome VARCHAR( 100 ) NOT NULL, -- Nome -- PRIMARY KEY ( rg ) ); -- -- Categoria de Pessoas -- CREATE TABLE catpessoa ( categoria VARCHAR( 30 ), -- Categoria de Pessoas desconto NUMERIC( 6, 3 ) DEFAULT '0.0', -- Desconto desta categoria -- PRIMARY KEY ( categoria ) ); -- -- Categoria da Empresa -- CREATE TABLE pessoa_catpessoa ( rg VARCHAR( 9 ), -- RG (->pessoa.rg) [PK] categoria VARCHAR( 30 ), -- Categoria da Pessoa (->catpessoa.categoria) [PK] -- PRIMARY KEY ( rg, categoria ), FOREIGN KEY ( rg ) REFERENCES pessoa ( rg ) MATCH FULL ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY ( categoria) REFERENCES catpessoa ( categoria ) MATCH FULL ON DELETE RESTRICT ON UPDATE RESTRICT ); -------------------------------------------------------------------------------- -- Empresa -------------------------------------------------------------------------------- -- -- Empresa -- CREATE TABLE empresa ( cnpj BIGINT, -- CNPJ [PK] nome_fantasia VARCHAR( 100 ) NOT NULL,-- Nome Fantasia home_page VARCHAR( 200 ), -- Home Page -- PRIMARY KEY ( cnpj ) ); -- -- Categoria de Empresas -- CREATE TABLE catempresa ( categoria VARCHAR( 30 ), -- Categoria de Empresas desconto NUMERIC( 6, 3 ), -- Desconto desta categoria -- PRIMARY KEY ( categoria ) ); -- -- Categoria da Empresa -- CREATE TABLE empresa_catempresa ( cnpj BIGINT, -- CNPJ (->empresa.cnpj) [PK] categoria VARCHAR( 30 ), -- Categoria da Empresa (->catempresa.categoria) [PK] -- PRIMARY KEY ( cnpj, categoria ), FOREIGN KEY ( cnpj ) REFERENCES empresa ( cnpj ) MATCH FULL ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY ( categoria ) REFERENCES catempresa ( categoria ) MATCH FULL ON DELETE RESTRICT ON UPDATE RESTRICT ); -- -- Razão Social da Empresa -- CREATE TABLE empresa_razao ( cnpj BIGINT, -- CNPJ (->empresa.cnpj) razao_social VARCHAR( 100 ), -- Razão Social -- PRIMARY KEY ( cnpj ), FOREIGN KEY ( cnpj ) REFERENCES empresa ( cnpj ) ON DELETE RESTRICT ON UPDATE RESTRICT, UNIQUE ( razao_social ) ); -- -- Empresa de que a Pessoa é funcionária -- CREATE TABLE pessoa_empresa ( rg VARCHAR( 9 ), -- RG (->pessoa.rg) [PK] cnpj BIGINT, -- CNPJ (->empresa.cnpj) [PK] -- PRIMARY KEY ( rg, cnpj ), FOREIGN KEY ( rg ) REFERENCES pessoa ( rg ), FOREIGN KEY ( cnpj ) REFERENCES empresa ( cnpj ) ); -------------------------------------------------------------------------------- -- Usuário -------------------------------------------------------------------------------- -- -- Usuário -- CREATE TABLE usuario ( login VARCHAR( 20 ), -- Login [PK] senha VARCHAR( 20 ) NOT NULL,-- Senha endereco VARCHAR( 200 ) NOT NULL,-- Endereço pais CHAR( 3 ) NOT NULL,-- País (->pais.pais) cep VARCHAR( 8 ) NOT NULL,-- CEP (->cep.cep) telefone VARCHAR( 20 ) NOT NULL,-- Telefone cnpj BIGINT, -- CNPJ (->empresa.cnpj) rg VARCHAR( 9 ), -- RG (->pessoa.cnpj) tipo smallint NOT NULL, -- Tipo do Usuário: (0=>Pessoa, 1=>Empresa) -- PRIMARY KEY ( login ), FOREIGN KEY ( rg ) REFERENCES pessoa ( rg ) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY ( cnpj ) REFERENCES empresa ( cnpj ) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY ( cep, pais ) REFERENCES cep ( cep, pais ) ON DELETE RESTRICT ON UPDATE RESTRICT ); -- -- Email -- CREATE TABLE email ( login VARCHAR( 20 ), -- Login (->usuario.login) [PK] email VARCHAR( 200 ), -- Email -- PRIMARY KEY ( login ), FOREIGN KEY ( login ) REFERENCES usuario ( login ) ON DELETE RESTRICT ON UPDATE RESTRICT );