Projecto de Bases de Dados II - student.dei.uc.ptdcoliv/downloads/BD2/Design Doc v0.1r 06... ·...

22
Departamento de Engenharia Informática Faculdade de Ciências e Tecnologia Universidade de Coimbra Projecto de Bases de Dados II Design Doc Versão 0.1r 6 de Maio de 2004 O Grupo: Daniel Oliveira 501000898 Hugo Gaspar 501022619 Marco Murta 501022628 Nuno Tavares 501022629

Transcript of Projecto de Bases de Dados II - student.dei.uc.ptdcoliv/downloads/BD2/Design Doc v0.1r 06... ·...

Departamento de Engenharia Informática

Faculdade de Ciências e Tecnologia

Universidade de Coimbra

Projecto de Bases de Dados II

Design Doc

Versão 0.1r

6 de Maio de 2004

O Grupo:

Daniel Oliveira 501000898

Hugo Gaspar 501022619

Marco Murta 501022628

Nuno Tavares 501022629

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 2

TABELA DE REVISÕES

Versão Autores Descrição da Versão Aprovadores Data

V0.1r

Daniel Oliveira

Hugo Gaspar

Marco Murta

Nuno Tavares

Primeira versão. - 06/05/04

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 3

ÍNDICE Tabela de Revisões ............................................................................................ 2

Índice .............................................................................................................. 3

Introdução........................................................................................................ 4

1. Especificações Gerais ..................................................................................... 5

1.1. Estrutura do Site ..................................................................................... 5 1.1.1. Layout.............................................................................................. 5

1.1.2. Raiz do site....................................................................................... 5

1.1.3. Resumo............................................................................................ 7

1.2. Controlo de sessões ................................................................................. 8

2. Especificação dos Módulos .............................................................................. 9

2.1. Módulo SGBD.......................................................................................... 9

2.1.1. Modelo físico ..................................................................................... 9

2.1.2. Parâmetros físicos da base de dados...................................................10

2.1.3. Restrições........................................................................................12

2.1.4. Indexação .......................................................................................13

2.1.5. Funções...........................................................................................14

2.2. Módulo Registo e Alteração de Clientes......................................................15

2.2.1. Raiz do módulo ................................................................................15

2.2.2. Métodos ..........................................................................................16

2.3. Módulo Leilões e Vendas..........................................................................17

2.3.1. Raiz do módulo ................................................................................17

2.3.2. Métodos ..........................................................................................19

2.4. Módulo Administração .............................................................................21

2.4.1. Especificação de métodos ..................................................................21

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 4

INTRODUÇÃO

Este documento visa descrever detalhadamente o funcionamento da aplicação, e

a articulação entre cada uma das suas funcionalidades, dentro de cada módulo. Assim,

são feitas em primeiro lugar algumas especificações gerais para o desenvolvimento da

aplicação e, de seguida, uma descrição pormenorizada das funcionalidades de cada

módulo.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 5

1. ESPECIFICAÇÕES GERAIS

1.1. Estrutura do Site

A estrutura do site alarga-se horizontalmente. Existe uma directoria "include"

onde são guardados os ficheiros a incluir, nomeadamente o ficheiro layout.php e o

menu.php. Conforme a parte da aplicação em que estamos estes ficheiros podem ser

diferentes.

1.1.1. Layout

No ficheiro layout.php são feitas chamadas a funções que identificam as partes dinâmicas da aplicação. Nesta amostra estão a ser chamadas as funções Titulo();

CSS(); Menu(); e Corpo();

1.1.2. Raiz do site

Tal como foi dito acima o site alarga-se horizontalmente, nunca tendo uma

profundidade superior a uma directoria. Assim, qualquer link dentro da aplicação será

sempre referenciado por <a href="../nome_directoria/index.php?target=xpto">xpto

</a>.

1.1.2.1. Dentro de cada directoria

Dentro de cada directoria existe sempre pelo menos um ficheiro index.php e um

ficheiro impl-xpto.php.

? index.php

Este ficheiro é o ficheiro que decide qual dos ficheiros de implementação vai ser

aberto para a construção da página em questão.

<script language="php">

if (!isset($target)) {

$target = "intro";

}

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 6

if($target == "link1"){

require("impl-link1.php");

}else if($target == "formulario") {

require("impl-form.php");

}else {

require("impl-intro.php");

}

require("../include/layout.php");

</script>

Caso se abra o ficheiro sem que a variável $target tenha sido inicializada é

sempre aberto o ficheiro "impl-intro.php" (iremos falar mais à frente do que fazem os

ficheiros do tipo impl-xpto.php)

Caso contrário será incluído na construção dinâmica da página o ficheiro de implementação correspondente.

NOTA: Para o caso dos actions de formulários o funcionamento é idêntico.

Declara-se o formulário como <form name=form method=post action="index.php

?target=formulario">.

Além do ficheiro "impl-xpto.php" é chamado também o ficheiro "layout.php"

? impl-xpto.php

Este é o ficheiro onde estão definidas as funções que irão ser chamadas no

layout. Nestas funções estão definidos os componentes essenciais do site.

<script language="php">

function Titulo() {

echo "AGI: Aplicação de Gestão de Informação - opção 1

introdução";

}

function CSS() { // no caso de haver Style sheets

echo "../include/style.css";

}

function Menu(){

require("../include/menu.php");

}

function Corpo(){

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 7

require("introducao.php");

}

</script>

1.1.3. Resumo

Temos um ficheiro de layout com várias chamadas a funções de php. O que é

necessário fazer é colocar nesses sítios são as várias funções a chamar que estão

declaradas nos ficheiros impl-xpto.php.

Exemplo:

<html>

<head>

<title><? Titulo(); ?></title>

<meta http-equiv="Content-Type" content="text/html; charset=iso -8859-1">

<link rel="stylesheet" href="<? CSS(); ?>" type="text/css">

</head>

(...)

O html construído será:

<html>

<head>

<title>AGI: Aplicação de Gestão de Informação - opção 1

introdução</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso -8859-1">

<link rel="stylesheet" href="../include/style.css" type="text/css">

</head>

(...)

A grande vantagem deste tipo de estrutura é a facilidade com que nos permite

fazer alterações ao layout da página. Podemos com facilidade acrescentar uma opção

ao Menu ou qualquer outra coisa que afecte todo o site, tendo apenas que alterar um

ficheiro. Essa alteração será propagada para todo o site.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 8

1.2. Controlo de sessões

A autenticação dos utilizadores é mantida através do recurso às php sessions

fornecidas pela linguagem PHP. Sempre que se abre uma página, é verificado se

existe uma sessão em que está identificado um utilizador. Caso na sessão em causa

exista uma identificação do utilizador, isto é, o utilizador está ligado e autenticado

então será aberta a página em causa. Caso contrario, a aplicação redirecciona para a

página de autenticação (login).

Após a inserção do nome de utilizador e password, a aplicação abrirá o módulo

correspondente aos privilégios do utilizador. Caso seja administrador é transportado

para o módulo “Administração”, caso tenha privilégios de simples cliente é

transportado para o módulo “Leilões e Vendas”.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 9

2. ESPECIFICAÇÃO DOS MÓDULOS

2.1. Módulo SGBD

2.1.1. Modelo físico

De seguida é apresentado o modelo físico da base de dados que suporta o

sistema. A partir deste modelo a elaboração do script de criação da base de dados é

quase directa e imediata.

FK_MORADA_PAIS

FK_MORADA_UTILIZADOR

FK_LICITACAO_PRODUTO

FK_PRODUTO_CATEGORIA

FK_PAGAMENTO_TIPOPAGAMENTO

FK_LICITACAO_UTILIZADOR

FK_PAGAMENTO_UTILIZADOR

FK_PAGAMENTO_LICITACAO

FK_VALORATRIBUTO_PRODUTO

FK_VALORATRIBUTO_TIPOATRIBUTO

Utilizador

u_idu_loginu_passwordu_nomeu_telefoneu_biu_emailu_adminu_valida

NUMBER(9)VARCHAR2(25)VARCHAR2(25)VARCHAR2(100)NUMBER(9)NUMBER(9)VARCHAR2(25)SMALLINTSMALLINT

<pk>

Categoria

c_idc_nomec_idSuperCat

NUMBER(9)VARCHAR2(100)NUMBER(9)

<pk>

Produto

p_idc_idp_nomep_preçop_descriçãop_estadop_stockp_localidadep_imagemp_vender

NUMBER(9)NUMBER(9)VARCHAR2(100)NUMBER(15,2)VARCHAR2(500)VARCHAR2(100)NUMBER(9)VARCHAR2(100)LONG RAWSMALLINT

<pk><fk>

TipoPagamento

tp_idtp_nome

NUMBER(9)VARCHAR2(100)

<pk>

Licitacao

li_idp_idu_idli_valorli_quantidadeli_horali_data

NUMBER(9)NUMBER(9)NUMBER(9)NUMBER(15,2)NUMBER(9)DATEDATE

<pk><fk1><fk2>

Pagamento

pa_idli_idu_idtp_idpa_data

NUMBER(9)NUMBER(9)NUMBER(9)NUMBER(9)DATE

<pk><fk3><fk2><fk1>

Morada

m_idpai_idu_idm_localidadem_codigoPostalm_endereco

NUMBER(9)NUMBER(9)NUMBER(9)VARCHAR2(25)VARCHAR2(9)VARCHAR2(100)

<pk><fk1><fk2>

Pais

pai_idpai_nome

NUMBER(9)VARCHAR2(150)

<pk>

TipoAtributo

ta_idta_nome

NUMBER(9)DATE

<pk>

ValorAtributo

p_idta_idva_valor

NUMBER(9)NUMBER(9)VARCHAR2(300)

<pk,fk1><pk,fk2>

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 10

2.1.2. Parâmetros físicos da base de dados

No entanto, existem outros parâmetros (relacionados com o aspecto físico e

desempenho da base de dados) que interessa especificar. Esses mesmos parâmetros

estão descritos na tabela seguinte.

Tabela Descrição Parâmetro Valor

PCTFREE 10

PCTUSED 60

INITIAL 80K

NEXT 20K

MAXEXTENTS (default)

MINEXTENTS (default)

Pais

Tabela com muito poucas

actualizações e inserções. O

aproveitamento do espaço é

mais importante que a

velocidade das operações na tabela.

PCTINCREASE 25

PCTFREE 20

PCTUSED 60

INITIAL 250K

NEXT 100K

MAXEXTENTS (default)

MINEXTENTS (default)

Morada

Tabela com poucas

actualizações e algumas

inserções. Deve haver um

equilíbrio entre o

aproveitamento de espaço e a

velocidade das operações. PCTINCREASE 50

PCTFREE 25

PCTUSED 60

INITIAL 1M

NEXT 250K

MAXEXTENTS (default)

MINEXTENTS (default)

Utilizador

Tabela com poucas

actualizações e algumas

inserções. Deve haver um

equilíbrio entre o

aproveitamento de espaço e a

velocidade das operações. PCTINCREASE 50

PCTFREE 10

PCTUSED 60

INITIAL 80K

NEXT 20K

MAXEXTENTS (default)

MINEXTENTS (default)

Categoria

Tabela com muito poucas

actualizações e inserções. O aproveitamento do espaço é

mais importante que a

velocidade das operações na

tabela. PCTINCREASE 25

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 11

Tabela Descrição Parâmetro Valor

PCTFREE 20

PCTUSED 60

INITIAL 5M

NEXT 1M

MAXEXTENTS (default)

MINEXTENTS (default)

Produto

Tabela com poucas

actualizações e muitas

inserções. A velocidade das

operações é um factor que se

sobrepõe ao espaço ocupado.

PCTINCREASE 75

PCTFREE 5

PCTUSED 80

INITIAL 3M

NEXT 1M

MAXEXTENTS (default)

MINEXTENTS (default)

Licitacao

Tabela com muitas inserções.

A velocidade das operações é

um factor que se sobrepõe ao

espaço ocupado.

PCTINCREASE 70

PCTFREE 20

PCTUSED 60

INITIAL 1M

NEXT 500K

MAXEXTENTS (default)

MINEXTENTS (default)

ValorAtributo

Tabela com poucas

actualizações e muitas inserções. A velocidade das

operações é um factor que se

sobrepõe ao espaço ocupado.

PCTINCREASE 60

PCTFREE 5

PCTUSED 80

INITIAL 250K

NEXT 100K

MAXEXTENTS (default)

MINEXTENTS (default)

TipoAtributo

Tabela estática, preenchida na

altura da criação da base de

dados.

PCTINCREASE 50

PCTFREE 5

PCTUSED 80

INITIAL 1M

NEXT 500K

MAXEXTENTS (default)

MINEXTENTS (default)

Pagamento

Tabela com muitas inserções.

A velocidade das operações é

um factor que se sobrepõe ao

espaço ocupado.

PCTINCREASE 70

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 12

Tabela Descrição Parâmetro Valor

PCTFREE 5

PCTUSED 80

INITIAL 250K

NEXT 100K

MAXEXTENTS (default)

MINEXTENTS (default)

TipoPagamento

Tabela estática, preenchida na

altura da criação da base de

dados.

PCTINCREASE 50

2.1.3. Restrições

Outro tipo de especificações que importa definir quando se projecta uma base de

dados são as restrições (para além das inerentes à criação de chaves primárias e

estrangeiras). Estas permitem garantir alguma segurança nos dados que são

inseridos, nomeadamente quanto à consistência de informação presente na base de

dados. Assim, na tabela que se segue, são especificadas as restrições a aplicar.

Tipo de Restrição Tabela Campo

UNIQUE NOT_NULL

Pais pai_nome X X

m_localidade X Morada

m_endereco X

u_login X X

u_password X

u_nome X

u_bi X X

u_email X X

u_admin X

Utilizador

u_valida X

c_nome X X Categoria

c_idSuperCat X

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 13

Tipo de Restrição Tabela Campo

UNIQUE NOT_NULL

p_nome X

p_preco X

p_estado X

p_localidade X

Produto

p_vender X

li_valor X

li_hora X Licitacao

li_data X

ValorAtributo va_valor X

TipoAtributo ta_nome X X

Pagamento pa_data X

TipoPagamento tp_nome X X

2.1.4. Indexação

Para acelerar as procuras realizadas à base de dados convém criar índices nos

principais campos, ou seja, naqueles em que incidem as procuras. Os campos com a

restrição UNIQUE não necessitam de criação de índice uma vez que são

automaticamente indexados.

Os índices a seguir especificados não deverão ser criados aquando da criação da

base de dados. Isso implicaria que o sistema tivesse de rearranjar a árvore do índice

com relativa frequência, comprometendo a velocidade de inserção de dados.

Índice

(Tabela.Campo) Descrição Parâmetro Valor

PCTFREE 10

INITIAL 50K

NEXT 20K

Indx_NomeProd

(Produto.p_nome)

Destinado a procuras por

nome de produto.

PCTINCREASE 75

PCTFREE 10

INITIAL 50K

NEXT 20K

Indx_PrecoProd

(Produto.p_preco)

Destinado a procuras por

preço de produto.

PCTINCREASE 75

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 14

2.1.5. Funções

Deverão ser criadas funções que permitam realizar transacções seguras. Assim,

qualquer dado que se pretenda inserir na base de dados, deverá ser inserido através

de uma função que garanta que não haja corrupção e inconsistência de dados

(nomeadamente usando o mecanismo de rollback quando necessário). Existirão então

funções do tipo insertMorada, insertPais, insertUtilizador, etc.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 15

if (document.novoUtilizador.CAMPO XPTO.value=="") { window.alert("O campo ' CAMPO XPTO ' é de preenchimento obrigatório e não pode ser deixado em branco."); document.novoUtilizador. CAMPO XPTO.focus(); return false; }

2.2. Módulo Registo e Alteração de Clientes

Este módulo baseia-se na interface para criação de contas de clientes. Após uma

novo registo, o mesmo cliente terá direito a uma conta no “Leilões4U” que lhe

permitirá efectuar mais operações que um mero visitante que se limita apenas a poder

consultar o site e verificar alguns parâmetros que dizem respeito aos leilões. Assim

cada cliente poderá efectuar leilões/vendas bem como visualizar todos os dados

referentes a cada leilão/venda e interagir nas licitações.

2.2.1. Raiz do módulo

Tudo o que diz respeito a este módulo está alojado na pasta “Utilizadores”.

Ficheiro “novoUtilizador.php”

Este é o ficheiro onde se encontra todo o código que diz respeito à criação dum

novo utilizador. È aqui que são validados os campos bem como é colocada a

informação na base de dados.

A validação de cada campo é feita praticamente de igual modo em todos os

campos e tendo uma forma similar à seguinte.

No que respeita à introdução dos dados na base de dados esta é feita de modo

similar ao pedaço de código seguinte.

$encriptacao = "lhuyjtugyrfdbvnghtyrfdesw"; $insertSQL = sprintf("INSERT INTO utilizadores (campo1, c ampo2, campo3…, campoN) VALUES (%s, %s, %s, …, %s)", GetSQLValueString($_POST['U_LOGIN'], "double"), GetSQLValueString($_POST['nome'], "text"), GetSQLValueString(crypt($_POST['password'], $encriptacao), "text"), GetSQLValueString($_POST['… "text"), GetSQLValueString($_POST['initialValue'], "double") mysql_select_db($database_BD2”, $BD2); $Result1 = mysql_query($insertSQL, $BD2) or die(mysql_error());

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 16

Ficheiro “novoUtilizadorSucesso.php”

Este ficheiro destina-se apenas a fazer de “confirmação” do registo, ou seja, uma

vez todos os campos validados e dada a confirmação do registo, o utilizador é

redireccionado para esta página que apenas o congratula pelo seu registo e confirma a

entrada dos dados na base de dados (novo registo).

2.2.2. Métodos

Para a construção deste módulo interessa especificar diversos métodos. Destes,

destacam-se:

function validacao ()

Esta função agrupa todas as validações de informação colocadas pelos

utilizadores para criarem um novo registo.

function GetSQLValueString($theValue, $theType, $theDefinedValue =

"", $theNotDefinedValue = "")

Esta função é usada para estabelecer o valor de cada variável introduzida pelo

utilizador.

function insereRegisto()

Esta função não recebe nenhum parâmetro de entrada visto que estes são

adquiridos pela função acima descrita. É esta a função que insere o novo registo na

DB.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 17

if (document.novoLeilao.CAMPO XPTO.value=="") { window.alert("O campo ' CAMPO XPTO ' é de preenchimento obrigatório e não pode ser deixado em branco."); document.novoLeilao. CAMPO XPTO.focus(); return false; }

2.3. Módulo Leilões e Vendas

Este módulo baseia-se na interface para criação de leilões e vendas. Após uma

novo registo, todos os clientes poderão fazer leilões e vendas. Assim sendo este

módulo vai criar e tratar toda a informação que diz respeito a estas operações. É aqui

que se encontra o registo de toda a informação no que se refere a um leilão ou venda.

É um dos módulos principais visto que trata do essencial do “site”.

2.3.1. Raiz do módulo

Tudo o que diz respeito a este módulo está alojado nas pastas “Leilões” e

“Vendas”.

Pasta “Leilões”

Esta é a pasta onde estão os ficheiros que dizem respeito à parte dos Leilões. É

aqui também que se encontram os ficheiros que dizem respeito às categorias de

produtos existentes (sub pasta categorias) e ainda à pesquisa de produtos. Assim há

três ficheiros a realçar: “novoLeilão.php”, “novoLeilãoSucesso.php” e “Pesquisa.php”.

Ficheiro “novoLeilão.php”

Este é o ficheiro onde se encontra todo o código que diz respeito à criação dum

novo leilão. À semelhança do “novoUtilizador.php” é aqui que são validados os campos

bem como é colocada a informação na base de dados.

A validação de cada campo é feita praticamente de igual modo em todos os

campos e tendo uma forma similar à seguinte.

No que respeita à introdução dos dados na base de dados esta é feita de modo

similar ao pedaço de código seguinte.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 18

Ficheiro “novoLeilãoSucesso.php”

Este ficheiro destina-se apenas a fazer de “confirmação” do registo do leilão, ou seja, uma vez todos os campos validados e dada a confirmação do registo do leilão, o

utilizador é redireccionado para esta página que apenas o congratula pelo seu leilão e

confirma a entrada dos dados na base de dados (novo leilão).

Ficheiro “Pesquisa.php”

Este é o ficheiro usado para possibilitar ao utilizador ou visitante fazer uma

pesquisa dos produtos por um ou vários campos.

São considerados para pesquisa os campos que não estiverem vazios, ou seja, se

for apenas um campo ocupado então a pesquisa é feita somente tendo essa

informação em conta, se forem mais então a pesquisa será feita tendo em conta todos

os campos e apresentando apenas os produtos que têm todos esses campos em

comum.

Pasta “Vendas”

Esta é a pasta onde estão os ficheiros que dizem respeito à parte das Vendas. Há

dois ficheiros a realçar: “novaVenda.php” e “novaVendaSucesso.php”.

Ficheiro “novaVenda.php”

Este é o ficheiro onde se encontra todo o código que diz respeito à criação dum

novo leilão. À semelhança do “novoUtilizador.php” e “novaVenda.php” é aqui que são validados os campos bem como é colocada a informação na base de dados.

$insertSQL = sprintf("INSERT INTO produtos (campo1, campo2, campo3…, campoN) VALUES (%s, %s, %s, …, %s)", GetSQLValueString($_POST['P_ID'], "double"), GetSQLValueString($_POST['utilizador'], "text"), GetSQLValueString($_POST['categoria'], "double"), GetSQLValueString($_POST['… "text"), GetSQLValueString($_POST['initialValue'], "double") mysql_select_db($database_BD2”, $BD2); $Result1 = mysql_query($insertSQL, $BD2) or die(mysql_error());

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 19

if (document.novaVenda.initialValue.value == "" || isNaN(document.novaVenda.initialValue.value) || document.novaVenda.initialValue.value > 99999999 || document.novaVenda.initialValue.value < 0) { window.alert("O valor da venda é inválido"); document.novaVenda.initialValue.focus(); return false; }

A validação de cada campo é feita praticamente de igual modo em todos os

campos e tendo uma forma similar à seguinte.

No que respeita à introdução dos dados na base de dados esta é feita de modo

similar ao pedaço de código seguinte.

Ficheiro “novaVendaSucesso.php”

Este ficheiro destina-se apenas a fazer de “confirmação” do registo da venda, ou

seja, uma vez todos os campos validados e dada a confirmação do registo da venda, o

utilizador é redireccionado para esta página que apenas o congratula pela sua venda e

confirma a entrada dos dados na base de dados (nova venda).

2.3.2. Métodos

Para a construção deste módulo interessa especificar diversos métodos. Destes,

destacam-se:

$insertSQL = sprintf("INSERT INTO produtos (campo1, campo2, campo3…, campoN) VALUES (%s, %s, %s, …, %s)", GetSQLValueString($_POST['P_ID'], "double"), GetSQLValueString($_POST['utilizador'], "text"), GetSQLValueString($_POST['categoria'], "double"), GetSQLValueString($_POST['… "text"), GetSQLValueString($_POST['initialValue'], "double") mysql_select_db($database_BD2”, $BD2); $Result1 = mysql_query($insertSQL, $BD2) or die(mysql_error());

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 20

function validacaoLeilao() / function validacaoVendas()

Esta função agrupa todas as validações de informação colocadas pelos

utilizadores para criarem um novo leilão/venda.

function GetSQLValueString($theValue, $theType, $theDefinedValue =

"", $theNotDefinedValue = "")

Esta função é usada para estabelecer o valor de cada variável introduzida pelo

utilizador.

function insereRegisto()

Esta função não recebe nenhum parâmetro de entrada visto que estes são adquiridos pela função acima descrita. É esta a função que insere o novo leilão/venda

na DB.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 21

2.4. Módulo Administração

Este módulo, consistirá no interface da aplicação para os administradores

(gestores do site). Neste módulo, os administradores não possuem qualquer

funcionalidade de visitante ou cliente do site, usufruindo de privilégios únicos, tais

como: apagar um utilizador, activar ou desactivar a conta de um utilizador,

acrescentar ou eliminar uma categoria de produtos, editar ou apagar um leilão, bem

como uma venda.

2.4.1. Especificação de métodos

del_util(u_login)

Este procedimento, receberá o login (identificador único) do utilizador em

questão, apagando todos os campos relacionados com o mesmo. Caso exista uma

licitação, um leilão ou uma venda na base de dados, efectuada por este utilizador,

surgirá uma mensagem de erro.

validaConta(u_login)

Este método receberá o login do utilizador, se o atributo u_valida (estado da

conta) seja “true”, significa que a conta do respectivo login esta activa, podendo o administrador passa-lo para “false”, desactivando a conta do utilizador. Se u_valida

for “false” então o administrador poderá efectuar a operação inversa.

del_leilao(p_id)

Este procedimento receberá o id do produto. Se não existir nenhuma licitação

sobre este produto, todos os atributos relacionados com o id do produto, serão

eliminados. Se o respectivo produto já tiver sido licitado, surgirá uma mensagem de

erro, não sendo possível efectuar a eliminação.

del_venda(p_id)

Este procedimento, será em tudo igual ao procedimento del_leilao(p_id), mas

este referir-se-á ás vendas, que só poderão ter no máximo uma licitação, que será o

preço de venda.

Projecto de Bases de Dados II ______________________________________________________________________________________

______________________________________________________________________________________

Design Doc (versão 0.1r) 22

edit_leilao(p_id)

Esta função irá receber o id do produto, cujo leilão se quer alterar. Assim, será

possível alterar qualquer atributo do produto cujo id = p_id, á excepção do p_preço

(preço inicial do leilão) , sempre que já exista uma licitação sobre esse produto.

edit_venda(p_id)

Do mesmo modo do del_venda(p_id), este procedimento, será em tudo

semelhante ao edit_leilao(p_id), desta vez tratando-se de vendas em vez de leilões.

cria_subCat(nome , id_superCat)

Este procedimento, cria uma categoria com o nome igual a “nome” e coloca-a como subcategora da categoria com o id igual a id_superCat.

Se a inserção for valida, devolve true, senão devolve false.

cria_cat(nome)

Este procedimento, ira chamar o procedimento cria_subCat(nome , id_superCat),

em que o id_superCat será automaticamente posto a -1, querendo com isto dizer que

a categoria a introduzir não terá nenhuma categoria mãe, e terá o nome igual a

“nome”.

del_cat(id_superCat)

Este método apagará todas as categorias, que não tenham Subcategorias, ou

seja, será feita uma procura por id_cat na tabela Categorias, se este atributo for igual

a um id_superCat, significa que a a categoria que se pretende eliminar, está

dependente de outra, não podendo ser eliminada, sem que as suas subcategorias

sejam eliminadas primeiro.