Indexação


  Os registros de uma tabela encontram-se normalmente dispostos aleatoriamente, isto é, sem qualquer tipo de ordenação. A numeração do registro indica apenas a ordem de inserção dos registros.
  Entretanto, em um dado momento, pode ser necessário a ordenação dos dados em função de algum campo como: nome, idade, salário etc.
  Dado que a ordenação de uma tabela em relação a um determinado campo pode ser um processo demorado (no caso de muitos registros), o DBASE II utiliza-se de um recurso para otimizar esse processo: a indexação.
  Indexação é o processo de criação de um vetor de índices para os registros de uma tabela, em ordem crescente. No caso do DBASE II, ele cria um novo arquivo no formato ".ndx", contendo os índices e o todo o campo de índice ordenado.

  O comando "index on" cria um índice para uma determinada tabela. Sintaxe:
 index on <campos> to <nome_indice>

  Exemplo de indexação utilizando a tabela alunos, ordenado pelo nome.
. use alunos
. index on nome to alunos

  Ao criar o índice, a tabela indexada já entra em uso.
. display all
00004   8437 Alvaro Schwarz                  12 M  5
00002   4321 Ana Maria Silva                 11 F  5
00005   7193 Beatriz Saraiva                 13 F  6
00006   3398 Mauro Pontes                    11 M  5
00001   8361 Pablo Goncalves                 11 M  5
00010   7766 Paula Tavares                   13 F  6
00009   6201 Pedro Borges                    11 M  5
00007   9001 Pedro Tavares                   13 M  6
00008   6567 Suely Albuquerque               12 F  6
00003   5543 Waldir Moraes                   12 M  6

  Para abandonar o uso da tabela indexada, pasta dar o comando:
. use alunos

  Para retornar o índice:
. set index to alunos

  Para mudar uso de tabela já com o índice:
. use alunos index alunos


  O Comando find

  O comando "find" busca por um resgistro, por meio do campo utilizado na indexação (ordenação). No exemplo anterior, o campo uilizado foi o nome.
  O valor da string passada é sem aspas, conforme o exemplo a seguir.
. find Pedro
. display
00009   6201 Pedro Borges                    11 M  5


  Indexação múltipla

  É possível utilizar mais de um campo para criar a indexação. Entretanto, todos os campos deverão ser no formato de caractere. A função str(numero, tamanho, decimal) converte números para caracteres. Ex:
. index on str(idade,2) + nome to aluidx
  Salva em um novo índice chamado "aluidx.ndx".

  Listando a tabela indexada, onde a ordem é primeiro a idade, depois o nome, temos:
. display all
00002   4321 Ana Maria Silva                 11 F  5
00006   3398 Mauro Pontes                    11 M  5
00001   8361 Pablo Goncalves                 11 M  5
00009   6201 Pedro Borges                    11 M  5
00004   8437 Alvaro Schwarz                  12 M  5
00008   6567 Suely Albuquerque               12 F  6
00003   5543 Waldir Moraes                   12 M  6
00005   7193 Beatriz Saraiva                 13 F  6
00010   7766 Paula Tavares                   13 F  6
00007   9001 Pedro Tavares                   13 M  6

  Obs: o comando "reindex" atualiza o índice em uso, caso a tabela original tenha sido alterada.


/MARMSX/CURSOS/DBASEII