/* Em primeiro lugar, deveremos abrir o PostgreSQL e digitar cada sentença ou comando.
A linha seguinte vai criar o banco de dados vazio, denominado "faculdade", onde deverao ser armazenadas as tabelas, ou entidades. */
CREATE DATABASE faculdade ENCODING 'utf8';
/* Em seguida, passamos a criar as tabelas Aluno, Endereco, Curso, Professor, Disciplina e Matricula */
CREATE TABLE aluno (id SERIAL PRIMARY KEY NOT NULL,
nome VARCHAR(200) NOT NULL,
fone VARCHAR(15) NULL,
cpf VARCHAR(14) NULL,
data_nasc DATE NOT NULL,
sexo CHAR(1) NOT NULL
);
CREATE TABLE endereco (id SERIAL PRIMARY KEY NOT NULL,
rua VARCHAR(100) NOT NULL,
numero INT NULL,
bairro VARCHAR(100) NULL,
cidade VARCHAR(100) NOT NULL,
estado CHAR(2) NOT NULL,
outros CHAR(200) NULL,
pessoa_id INT NOT NULL
);
CREATE TABLE curso (id SERIAL PRIMARY KEY NOT NULL,
nome VARCHAR(200) NOT NULL,
semestre VARCHAR(6) NOT NULL
);
CREATE TABLE professor (id SERIAL PRIMARY KEY NOT NULL,
nome VARCHAR(200) NOT NULL,
graduacao VARCHAR(100) NOT NULL,
fone VARCHAR(15) NULL
);
CREATE TABLE disciplina (id SERIAL PRIMARY KEY NOT NULL,
nome VARCHAR(200) NOT NULL,
professor_id INT NOT NULL,
curso_id INT NOT NULL
);
CREATE TABLE matricula (id SERIAL PRIMARY KEY NOT NULL,
aluno_id INT NOT NULL,
curso_id INT NOT NULL,
data_matricula DATE NOT NULL
);
/* Estabeleceremos a partir de agora os relacionamentos, conforme sequencia abaixo.
Na tabela endereco, a chave estrangeira pessoa_id faz referencia a chave primaria id na tabela aluno.
Na tabela disciplina, a chave estrangeira professor_id faz referencia a chave primaria id na tabela professor.
Na tabela disciplina, a chave estrangeira curso_id faz referencia a chave primaria id na tabela curso.
Na tabela matricula, a chave estrangeira aluno_id faz referencia a chave primaria id na tabela aluno.
Na tabela matricula, a chave estrangeira curso_id faz referencia a chave primaria id na tabela curso.
*/
ALTER TABLE endereco ADD CONSTRAINT fk_aluno FOREIGN KEY(pessoa_id) REFERENCES aluno(id) ON DELETE RESTRICT;
ALTER TABLE disciplina ADD CONSTRAINT fk_professor FOREIGN KEY(professor_id) REFERENCES professor(id) ON DELETE RESTRICT;
ALTER TABLE disciplina ADD CONSTRAINT fk_curso FOREIGN KEY(curso_id) REFERENCES curso(id) ON DELETE RESTRICT;
ALTER TABLE matricula ADD CONSTRAINT fk_aluno FOREIGN KEY(aluno_id) REFERENCES aluno(id) ON DELETE RESTRICT;
ALTER TABLE matricula ADD CONSTRAINT fk_curso FOREIGN KEY(curso_id) REFERENCES curso(id) ON DELETE RESTRICT;
/* Agora povoando cada tabela com quatro dados.
Adicionando primeiramente na tabela aluno */
INSERT INTO aluno VALUES (1,
'JOYCE VIEIRA',
'(88) 99624-0845',
'123.456.789-01',
'1999-02-28',
'F'
);
INSERT INTO aluno VALUES (2,
'ELIAS SANTANA',
'(88) 99902-9575',
'123.456.789-02',
'1995-02-27',
'M'
);
INSERT INTO aluno VALUES (3,
'ADAIL SILVA',
'(88) 99467-1677',
'123.456.789-03',
'1994-02-26',
'M'
);
INSERT INTO aluno VALUES (4,
'LUCIVALDO SILVA',
'(85) 99945-6584',
'123.456.789-04',
'1974-02-25',
'M'
);
/* Na tabela endereco */
INSERT INTO endereco VALUES (1,
'RUA MENINO JESUS DE PRAGA',
200,
'CIDADE PEDRO MENDES CARNEIRO',
'SOBRAL',
'CE',
'Sem ressalvas',
2
);
INSERT INTO endereco VALUES (2,
'RUA C',
500,
'JUREMA',
'CAUCAIA',
'CE',
'Mora bem distante do CED',
4
);
INSERT INTO endereco VALUES (3,
'RUA DR. PAULO SANFORD',
1350,
'ALTO DA EXPECTATIVA',
'SOBRAL',
'CE',
'Sem ressalvas',
3
);
INSERT INTO endereco VALUES (4,
'TRAVESSA VICENTE ANDRE',
30,
'NOSSA SENHORA DE FATIMA',
'MASSAPE',
'CE',
'Mora em outro municipio diverso do CED',
1
);
/* Na tabela curso */
INSERT INTO curso VALUES (1,
'CURSO DE BANCO DE DADOS DO CED',
'2015/2'
);
INSERT INTO curso VALUES (2,
'ANDROID DAS MAIS DIVERSAS FORMAS E SABORES',
'2015/2'
);
INSERT INTO curso VALUES (3,
'CRIANDO CONSULTAS SQL EM BANCO DE DADOS USANDO POSTGRESQL',
'2014/1'
);
INSERT INTO curso VALUES (4,
'INFORMATICA BASICA USANDO WINDOWS 7 E WORD 2013',
'2015/1'
);
/* Na tabela professor */
INSERT INTO professor VALUES (1,
'LIVIA SOUSA',
'TECNOLOGIA DA INFORMACAO',
'(88) 99934-5254'
);
INSERT INTO professor VALUES (2,
'FRANCISCO ANTONIO BRITO',
'ENGENHARIA DE PRODUCAO',
'(88) 99625-9141'
);
INSERT INTO professor VALUES (3,
'LINCOLN FREIRE AGUIAR',
'ENGENHARIA CIVIL',
'(88) 99356-3426'
);
INSERT INTO professor VALUES (4,
'MARCONI PAULINO',
'COMPUTACAO',
'(85) 98925-7688'
);
/* Na tabela disciplina */
INSERT INTO disciplina VALUES (1,
'CURSO AVANCADO DE ALGEBRA E REGRAS LOGARITMICAS',
2,
3
);
INSERT INTO disciplina VALUES (2,
'INFORMATICA AVANCADA',
1,
1
);
INSERT INTO disciplina VALUES (3,
'BANCO DE DADOS',
3,
4
);
INSERT INTO disciplina VALUES (4,
'TRIGONOMETRIA BASICA',
4,
2
);
/* Na tabela matricula */
INSERT INTO matricula VALUES (1,
2,
1,
'2015-11-19'
);
INSERT INTO matricula VALUES (2,
3,
4,
'2015-10-29'
);
INSERT INTO matricula VALUES (3,
4,
2,
'2015-05-30'
);
INSERT INTO matricula VALUES (4,
1,
3,
'2015-11-19'
);
/* Realizando consultas, conforme segue.
- Na tabela aluno, liste todos os registros onde id for igual a 2;
- Na tabela professor, liste todos os registros cujo id for 3;
- Na tabela matricula, liste todos os registros onde aluno_id (chave estrangeira) for 4;
- Na tabela curso, liste todos os registros onde semestre seja 2015/2.
*/
SELECT * FROM aluno WHERE id = 2;
SELECT * FROM professor WHERE id = 3;
SELECT * FROM matricula WHERE aluno_id = 4;
SELECT * FROM curso WHERE semestre = '2015/2';
Final Version - Portfolio 4
segunda-feira, 30 de novembro de 2015
Postado por
Lucivaldo Silva
às
17:26
0
comentários
Portfolios 1, 2 3 e 4
terça-feira, 24 de novembro de 2015
Segue pasta .zip contendo os arquivos dos portfólios do curso.
Portfolio 4 -
http://lucivaldosilva.xpg.uol.com.br/portfolio4.zip
Portfolio 3 -
http://lucivaldosilva.xpg.uol.com.br/portfolio3.zip
Portfolio 2 -
http://lucivaldosilva.xpg.uol.com.br/portfolio2.zip
Portfolio 1 -
http://lucivaldosilva.xpg.uol.com.br/portfolio1.zip
Postado por
Lucivaldo Silva
às
20:23
0
comentários
Modelo Logico do Portfolio 4
segunda-feira, 23 de novembro de 2015
Pessoal, estamos continuando com a construção da modelagem do problema proposto em nosso portfolio 4, agora passando para o modelo lógico.
Onde há diferenças fundamentais entre os dois modelos? Relacionamentos e Cardinalidade.
Em que diferem? Os relacionamentos "matricula" e "disciplina" (verbos) agora são nominalmente tabelas (matrícula e disciplina), tais como as entidades (substantivos). Com a mudança, a cardinalidade que operava entre as entidades também muda, pois passamos a obedecer a cardinalidade referente aos relacionamentos, que agora também são tabelas. Passamos à interpretação do modelo lógico como um todo, cujo diagrama se encontra no final desta postagem.
As tabelas aluno, endereço, professor e curso (substantivos), cujos correspondentes no modelo conceitual figuravam como entidades têm cada uma cardinalidade de entrada 1,1 (um para um), enquanto as tabelas matrícula e disciplina têm cardinalidade de entrada 1,n (um para muitos). Por quê? Porque só conseguimos visualizar no lado das tabelas "mestras" (as entidades) apenas uma ocorrência de cada registro (tupla) das respectivas tabelas "servidoras" (os relacionamentos), em cujos registros podem ser encontradas várias ocorrências do mesmo registro constante da tabela "substantiva" correspondente. Por exemplo: Várias ocorrências de um mesmo aluno podem ser encontradas nos registros da tabela matrícula, mas apenas uma ocorrência de matrícula na tabela aluno seria possível, para cada aluno cadastrado ali. Podemos pensar de forma igual ao analisar as demais tabelas.
Em cada tabela já se encontram estipuladas, além das chaves primárias e estrangeiras (caso haja), o tamanho máximo de cada campo ou coluna. Confiram.
Postado por
Lucivaldo Silva
às
20:51
0
comentários
Modelo Conceitual do Portfolio 4
Olá, pessoal! Vamos tratar hoje do modelo conceitual das entidades de nosso portfolio 4.
* Em nosso modelo conceitual, a tabela endereco, por ser um desmembramento da tabela aluno, será considerada como uma especialização não-exclusiva com criação de entidade.
* As tabelas matricula e disciplina na verdade são relacionamentos. Por quê? No caso da matricula é bem notório, pois aluno_id (que é uma das chaves estrangeiras do relacionamento matricula) refere-se a aluno(id), ou seja ao atributo id da entidade aluno. A outra chave estrangeira será curso_id, que refere-se a curso(id), atributo id da entidade curso, pelo mesmo motivo. Perceberam o relacionamento a que se refere matricula? Suas duas chaves estrangeiras referem-se à tabela aluno e curso, respectivamente. No caso do relacionamento disciplina, ocorre algo semelhante: seu atributo professor_id refere-se à tabela/entidade(atributo/campo) que no caso é professor(id), ou seja, ao atributo id da entidade professor. Semelhantemente, seu atributo curso_id refere-se ao atributo id da entidade curso, ou seja a curso(id).
* O que passo a falar de agora em diante é mais um QUESTIONAMENTO do que uma AFIRMAÇÃO, pois ainda não domino muito bem cardinalidade. São apenas minhas impressões sobre as tabelas:
- Já que Aluno se Matricula no Curso, suas relações de cardinalidade poderão ser: um aluno pode se matricular em nenhum ou em apenas um curso (cardinalidade 0,1). Um curso deve aceitar matrícula de um ou de muitos alunos (cardinalidade 1,n).
- Já que Professor Disciplina o Curso, suas relações de cardinalidade serão: um professor deve disciplinar um ou mais cursos (1,n), e um curso deve ser disciplinado por um e somente um professor (1,1).
* Abaixo segue o diagrama do modelo conceitual, já com as cardinalidades indicadas. Cliquem sobre a tabela para visualizar melhor,
Se minhas afirmativas sobre cardinalidade estiverem erradas, por favor, deixem comentário(s) aqui ou no zap, explicitando o porquê do erro. Se estiverem corretas, comentem que sim, estão corretas. Este humilde aprendiz agradece! :)
Postado por
Lucivaldo Silva
às
00:54
0
comentários
Portfólio 3
segunda-feira, 16 de novembro de 2015
Tabela 1
Postado por
Unknown
às
11:13
0
comentários
Links para estudo
sexta-feira, 13 de novembro de 2015
Normalização com a Profa. Lucélia:
http://professoralucelia.com.br/bd/SlidesNormalizacao.pdf
Normalização com o Prof. Luiz Vivacqua:
http://files.vivacquabd.webnode.com.br/200000046-5949659c69/Exerc%C3%ADcios%20de%20Normaliza%C3%A7%C3%A3o.pdf
Postado por
Lucivaldo Silva
às
21:56
0
comentários
Primeiro a Criação da Base de Dados "empresa"
CREATE DATABASE EMPRESA encoding='utf8';
Após a conexão com a mesma no espaço apropriado para execução de comandos SQL (LupaSQL)
Criando as Tabelas "cliente", "produtos" e "fornecedor":
CREATE TABLE cliente(
id SERIAL PRIMARY KEY NOT NULL,
nome VARCHAR(100) NOT NULL,
cpf VARCHAR(20) NOT NULL,
sexo CHAR(1) NOT NULL,
dtNasc DATE NOT NULL,
observacao VARCHAR(100) NULL
);
CREATE TABLE produto(
id SERIAL PRIMARY KEY NOT NULL,
descricao VARCHAR(100) NOT NULL,
dtCompra DATE NOT NULL,
dtValidade DATE NULL
);
CREATE TABLE fornecedor(
id SERIAL PRIMARY KEY NOT NULL,
nome VARCHAR(100) NOT NULL,
cnpj VARCHAR(20) NOT NULL,
dtValidade DATE NULL
);
Criando a Tabela de relacionamento "compra":
CREATE TABLE compra(
id SERIAL PRIMARY KEY NOT NULL,
produto INTEGER NOT NULL,
cliente INTEGER NOT NULL,
CONSTRAINT FK_CLIENTE FOREIGN KEY(cliente) REFERENCES cliente(id) ON DELETE RESTRICT
);
Inserindo dados na tabela "cliente":
INSERT INTO cliente VALUES(1,'AdailSilva',000.000.000-00,'M','1900-01-01','Tianguá-CE');
INSERT INTO cliente VALUES(2,'SeuNomeAgora',999.999.999-99,'F','1900-01-01','Sobral-CE');
INSERT INTO cliente VALUES(3,'João Pedro',000.000.000-00,'M','1900-01-01','Ubajara-CE');
Inserindo dados na tabela "produto":
INSERT INTO produto VALUES(1,'Notebook','2015-11-12','2016-01-01');
INSERT INTO produto VALUES(2,'Desktop','2015-11-12','2016-01-01');
INSERT INTO produto VALUES(3,'Servidor','2014-11-12','2016-12-01');
INSERT INTO produto VALUES(4,'Software SIS','2015-11-12','2016-01-01');
Inserindo dados na tabela "fornecedor":
INSERT INTO fornecedor VALUES(1,'Meu Primeiro Fornecedor','00.000.000/0001-00','2016-01-01');
INSERT INTO fornecedor VALUES(2,'Meu Segundo Fornecedor','00.000.000/0001-00','2016-01-01');
INSERT INTO fornecedor VALUES(3,'Meu Terceiro Fornecedor','00.000.000/0001-00','2016-01-01');
Inserindo dados na tabela de relacionamento "compra":
INSERT INTO compra VALUES(1,2,3); (Minha primeira venda foi do produto 2 para o cliente 3)
INSERT INTO compra VALUES(2,3,1); (Minha segunda venda foi do produto 3 para o cliente 1)
E assim sucessivamente! ;-)
⊂⊃⊂ \('~')/ ➜ AdailSilva☺ ⊃⊂⊃
Postado por
Unknown
às
11:01
0
comentários
Normalização.
- 1FN - 1ª Forma Normal:todos os atributos de uma tabela devem ser atômicos, ou seja, a tabela não deve conter grupos repetidos e nem atributos com mais de um valor. Para deixar nesta forma normal, é preciso identificar a chave primária da tabela, identificar a(s) coluna(s) que tem(êm) dados repetidos e removê-la(s), criar uma nova tabela com a chave primária para armazenar o dado repetido e, por fim, criar uma relação entre a tabela principal e a tabela secundária. Por exemplo, considere a tabela Pessoas a seguir.
PESSOAS = {ID+ NOME + ENDERECO + TELEFONES} PESSOAS = { ID + NOME + ENDERECO } TELEFONES = { PESSOA_ID + TELEFONE } - 2FN - 2ª Forma Normal:antes de mais nada, para estar na 2FN é preciso estar na 1FN. Além disso, todos os atributos não chaves da tabela devem depender unicamente da chave primária (não podendo depender apenas de parte dela). Para deixar na segunda forma normal, é preciso identificar as colunas que não são funcionalmente dependentes da chave primária da tabela e, em seguida, remover essa coluna da tabela principal e criar uma nova tabela com esses dados. Por exemplo, considere a tabela ALUNOS_CURSOS a seguir.
ALUNOS_CURSOS = { ID_ALUNO + ID_CURSO + NOTA + DESCRICAO_CURSO } Nessa tabela, o atributo DESCRICAO_CURSO depende apenas da chave primária ID_CURSO. Dessa forma, a tabela não está na 2FN. Para tanto, cria-se uma nova tabela chamada CURSOS que tem como chave primária ID_CURSO e atributo DESCRICAO retirando, assim, o atributo DESCRICAO_CURSO da tabela ALUNOS_CURSOS.ALUNOS_CURSOS = {ID_ALUNO + ID_CURSO + NOTA} CURSOS = {ID_CURSO + DESCRICAO} - 3FN - 3ª Forma Normal:para estar na 3FN, é preciso estar na 2FN. Além disso, os atributos não chave de uma tabela devem ser mutuamente independentes e dependentes unicamente e exclusivamente da chave primária (um atributo B é funcionalmente dependente de A se, e somente se, para cada valor de A só existe um valor de B). Para atingir essa forma normal, é preciso identificar as colunas que são funcionalmente dependentes das outras colunas não chave e extraí-las para outra tabela. Considere, como exemplo, a tabela FUNCIONARIOS a seguir.
FUNCIONARIOS = { ID + NOME + ID_CARGO + DESCRICAO_CARGO } O atributo DESCRICAO_CARGO depende exclusivamente de ID_CARGO (atributo não chave) e, portanto, deve-se criar uma nova tabela com esses atributos. Dessa forma, ficamos com as seguintes tabelas:FUNCIONARIOS = { ID + NOME + ID_CARGO } CARGOS = { ID_CARGO + DESCRICAO }
Fontes:
Postado por
Elias Santana
às
07:27
0
comentários
Portfolio do Elias
quarta-feira, 4 de novembro de 2015
Postado por
Lucivaldo Silva
às
07:59
3
comentários