// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Criando uma Aplicação Orientada pelo Banco de Dados com o PHP
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Criando uma Aplicação Orientada pelo Banco de Dados com o PHP - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Criando uma Aplicação Orientada pelo Banco de Dados com o PHP

= Lição 1b: Criando Tabelas do Banco de Dados Oracle
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Lição 1b: Criando Tabelas do Banco de Dados Oracle - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Lição 1b: Criando Tabelas do Banco de Dados Oracle


Esta lição descreve a última etapa preliminar no desenvolvimento da aplicação da Lista de Desejos: a criação de um banco de dados de amostra com dados de teste. Para concluir as etapas deste tutorial, você precisará de um banco de dados para armazenar os dados dos wishers. Com o NetBeans IDE, você pode realizar todas essas atividades usando a interface do IDE. 
Antes de começar, veja os requisitos do tutorial descritos em link:wish-list-tutorial-main-page.html[+Criando uma Aplicação CRUD com PHP - Página Principal+].

O documento atual é uma parte do tutorial Criando uma Aplicação CRUD no NetBeans IDE para PHP.



== Criando o Usuário do Banco de Dados

Nesse procedimento, primeiro você cria um usuário e, em seguida, cria as tabelas como aquele usuário.

Você pode criar um usuário com as ferramentas do Oracle ou conetando o NetBeans IDE ao banco de dados e usando o editor SQL do IDE. O NetBeans 7.0, atualmente disponível apenas como buids beta ou de desenvolvimento, fornece conexão aprimorada a bancos de dados Oracle. Para saber como conectar o NetBeans IDE ao Banco de Dados Oracle e como criar um usuário naquele banco de dados, consulte o tutorial link:../ide/oracle-db.html[+Conectando-se a um Banco de Dados Oracle+].

Usando a ferramenta de sua preferência, crie o seguinte usuário:

|===
|Nome do Usuário |phpuser 

|Password |phpuserpw 

|Privilégios do Sistema |CREATE TABLE 

|CREATE VIEW 

|CREATE SEQUENCE 

|CREATE TRIGGER 

|Atribuições (Banco de Dados Oracle 10.x) |CONNECT 

|RESOURCE 
|===

Segue um exemplo de conjunto de comandos SQL para criar esst usuário. Esses comandos presumem que o banco de dados tem os espaços de tabela USERS e TEMP.


[source,sql]
----

drop user phpuser cascade;
create user phpuser identified by phpuserpw;
grant connect, resource to phpuser;
alter user phpuser default tablespace users temporary tablespace temp account unlock;
----


== Criando a Estrutura do Banco de Dados de Amostra

Para organizar e armazenar todos os dados necessários, você precisa de duas tabelas:

* Uma tabela de wishers para armazenar nomes e senhas de usuários registrados
* Uma tabela de desejos para armazenar descrições de desejos

image::images/wishlist-db.png[]

A tabela de wishers contém três campos:

1. id - a identificação exclusiva de um wisher. Este campo é usado como a Chave Primária
2. nome
3. senha

A tabela de desejos contém quatro campos:

1. id - a identificação exclusiva de um desejo. O campo é usado como a Chave Primária
2. wisher_id - a identificação do wisher a quem o desejo pertence. O campo é usado como a Chave Estrangeira.
3. descrição
4. due_date - a data para a qual o desejo foi solicitado

As tabelas são relacionadas por meio do wisher ID. Todos os campos são obrigatórios, exceto due_date em desejos.


== Criando o Esquema do Banco de Dados Oracle

1. Faça log-in no banco de dados como o usuário que você criou.

Se estiver se conectando por meio do NetBeans IDE, crie uma conexão com o nome e a senha do novo usuário. Assegure-se de selecionar o esquema com o mesmo nome que o do usuário. (Consulte a seção link:../ide/oracle-db.html#connect[+Estabelecendo uma Conexão com o Banco de Dados Oracle+] do tutorial Conectando-se a um Banco de Dados Oracle.)


[start=2]
. Para criar a tabela wishers, execute a seguinte consulta SQL:

[source,sql]
----

create table wishers (id number not null,name varchar2(50) unique not null, password varchar2(50) not null, constraint wishers_pk primary key(id));
----

[start=3]
. Para criar a tabela wishes, execute a consulta SQL a seguir. Observe que você cria uma chave estrangeira que associa wishes com um wisher.

source,sql]
----

create table wishes (id number not null, wisher_id number not null,description varchar2(255) not null, due_date date, constraint wishes_pk primary key(id), constraint wishes_fk1 foreign key(wisher_id) references wishers(id));
----

[start=4]
. Verifique se as novas tabelas são adicionadas no banco de dados. Se você estiver usando o NetBeans IDE para se conetar ao banco de dados, acesse a janela Serviços do nó de conexão jdbc:oracle:thin:@localhost:1521:XE [phpuser on PHPUSER]. As novas tabelas serão listadas no nó Tabelas. (Se elas não aparecerem, clique com o botão direito do mouse na conexão e selecione Atualizar.) 

image::images/tables-in-services-window.png[]

Observação: Você pode fazer download de um conjunto de comandos SQL para criar as tabelas do Banco de Dados Oracle link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-Oracle.zip[+aqui+].


== Adicionando Sequências e triggers para Incrementar os Valores de ID

Com o Banco de Dados Oracle, você deve especificar uma sequência para incrementar um valor. Para que o valor seja incrementado quando um novo membro é adicionado a uma tabela, você adiciona um trigger.

1. Para adicionar uma sequência na tabela wishers, execute o seguinte comando SQL:

[source,sql]
----

create sequence wishers_id_seq start with 1 increment by 1;
----

[start=2]
. Para acionar a sequência na coluna ID da tabela wishers quando você adiciona um novo wisher, execute o seguinte comando SQL:

[source,sql]
----

create or replace trigger wishers_insert
before insert on wishers
for each row
begin
    select wishers_id_seq.nextval into :new.id from dual;
end;
/
----

[start=3]
. Adicione uma sequência à tabela wishes.

[source,sql]
----

create sequence wishes_id_seq start with 1 increment by 1;
----

[start=4]
. Add a trigger to run the sequence on the ID column of the wishes table when you add a new wish.

[source,sql]
----

[start=4]
. Adicione um trigger para executar a sequência na coluna ID da tabela wishes quando você adiciona um novo wish.

[source,sql]
----

create or replace trigger wishes_insert
before insert on wishes
for each row
begin
    select wishes_id_seq.nextval into :new.id from dual;
end;
/
----

Observação: Você pode fazer download de um conjunto de comandos SQL para criar as tabelas do Banco de Dados Oracle, incluindo sequências e triggers, link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-Oracle.zip[+aqui+].


== Inserindo os Dados de Teste

Para testar a aplicação, você precisará de alguns dados no banco de dados. O exemplo abaixo mostra como adicionar dois wishers e quatro desejos.

1. Adicione um wisher chamado Tom com a senha "tomcat".

[source,sql]
----

insert into wishers (name, password) values ('Tom','tomcat');
----

[start=2]
. Adicione um wisher chamado Jerry com a senha "jerrymouse".

[source,sql]
----

insert into wishers (name, password) values ('Jerry', 'jerrymouse');commit;
----

[start=3]
. Adicione os wishes.

[source,sql]
----

insert into wishes (wisher_id, description, due_date) values (1, 'Sausage', to_date('2008-04-01', 'YYYY-MM-DD'));
insert into wishes (wisher_id, description) values (1, 'Icecream');insert into wishes (wisher_id, description, due_date) values (2, 'Cheese', to_date('2008-05-01', 'YYYY-MM-DD'));
insert into wishes (wisher_id, description)values (2, 'Candle');
commit;
----

[start=4]
. Verifique se você adicionou dados de teste. Se você estiver usando o NetBeans IDE para exibir os dados de teste, clique com o botão direito do mouse na tabela relevante e, no menu de contexto, selecione Exibir Dados. 

image::images/view-test-data.png[]

Para obter um entendimento geral dos princípios de bancos de dados e padrões de design, consulte o tutorial: link:http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1[+http://www.tekstenuitleg.net/en/articles/database_design_tutorial/1+].

Para obter mais informações sobre a sintaxe das instruções  ``CREATE TABLE``  do Oracle, consulte link:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7002.htm[+http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7002.htm+].

Observação: Você pode fazer download de um conjunto de comandos SQL para criar as tabelas do Banco de Dados Oracle link:https://netbeans.org/projects/www/downloads/download/php%252FSQL-files-for-Oracle.zip[+aqui+].


== Próxima Etapa

link:wish-list-lesson2.html[+Próxima Lição >>+]

link:wish-list-tutorial-main-page.html[+Voltar à página principal do Tutorial+]


link:/about/contact_form.html?to=3&subject=Feedback:%20PHP%20Wish%20List%20CRUD%201:%20Create%20Oracle%20Database%20Tables[+Envie-nos Seu Feedback+]


Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, link:../../../community/lists/top.html[+junte-se à lista de correspondência users@php.netbeans.org+].

link:../../trails/php.html[+Voltar à Trilha de Aprendizado PHP+]

