Projecto de Bases de Dados II - student.dei.uc.ptdcoliv/downloads/BD2/Design Doc v0.1r 06... ·...
-
Upload
duongthien -
Category
Documents
-
view
213 -
download
0
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.