4D v14.3Tipos de relações |
||
|
4D v14.3
Tipos de relações
Tipos de relações
O tipo de relação mais comumente usado é a relação entre uma tabela Muitos e uma tabela Um, chamada relação Muitos para Um. Entretanto, também pode criar relações Muitos a Muitos e Um a Um. Todas as relações podem ser manuais ou automáticas. As relações podem ser automáticas ou manuais. Ao criar uma relação entre duas tabelas, a tabela que contém a chave primária na relação é chamada de tabela Um e a tabela contendo a chave estrangeira na relação é chamada de tabela Muitos. As tabelas se denominam Um e Muitos porque em um registro da tabela Um está relacionado com muitos registros da tabela Muitos e muitos registros da tabela Muitos estão relacionados com um registro da tabela Um. Este tipo de relação é denominado relação Muitos para Um. Em uma relação entre empregados e empresas, a tabela [EMPRESAS] é a tabela Um e a tabela [EMPREGADOS] é a tabela Muitos. O registro de uma empresa está relacionado com vários empregados (todos os empregados desta empresa) e vários empregados estão relacionados com uma empresa (a empresa para qual trabalham). Por exemplo, pode haver um registro correspondente a empresa Acme na tabela [EMPRESAS] e vários registros de pessoas empregadas por Acme na tabela [EMPREGADOS]. Quando um registro da tabela [EMPREGADOS] se converte no registro atual, 4D carrega o registro correspondente da tabela [EMPRESAS]. Se alguns campos foram incluídos a partir da tabela [EMPRESAS], os valores destes campos são publicados automaticamente. A imagem a seguir mostra como o nome da empresa em um registro da tabela [EMPREGADOS] especifica um registro da tabela [EMPRESAS] de maneira que o registro da tabela [EMPREGADOS] pode exibir o endereço e o número telefônico da empresa. Por outro lado, quando um registro da tabela [EMPRESAS] se converte no registro atual, 4D cria uma seleção de registros da tabela [EMPREGADOS] e os exibe no formulário. Como a relação especifica diversos registros na outra tabela, os nomes e cargos de muitos empregados podem ser exibidos. Somente registros atualmente exibidos no formulário estão carregados na memória. A imagem a seguir mostra como o nome de uma empresa em um registro da tabela [EMPRESAS] especifica vários registros da tabela [EMPREGADOS] de maneira que o registro da tabela [EMPRESAS] possa mostrar uma lista de pessoas empregadas por esta empresa. A diferença entre a tabela Um e a tabela Muitos é própria de cada relação. Uma tabela pode ser a tabela Um em uma relação e pode ser a tabela Muitos em outra relação. Uma tabela em uma relação só necessita ter uma chave primária, mas pode ter várias chaves estrangeiras. O campo Código_Postal da tabela [CODIGOS_POSTAIS] é a chave primária, assim que nesta relação, a tabela [Tarifa_Postal] é a tabela Um. O campo CodigoPostal na tabela [EMPRESAS] é a chave estrangeira para esta relação: neste caso, podem ter valores duplicados para empresas que estão em uma mesma área. A tabela [EMPRESAS] é então a tabela Muitos para a relação com a tabela [CODIGOS_POSTAIS]. Uma tabela é uma tabela Um ou Muitos dependendo da relação com a outra tabela. A tabela [EMPRESAS] é a tabela Muitos na relação com a tabela [CODIGOS_POSTAIS] e é a tabela Um na relação com a tabela [EMPREGADOS]. As relações Um a Um são utilizadas apenas em casos especiais, já que as tabelas relacionadas por esse tipo poderiam ter sido combinadas em uma só tabela. Algumas das razões para utilizar relações Um a Um são:
Algumas vezes, é necessário relacionar muitos registros em uma tabela com muitos registros em outra tabela. Este tipo de relação é conhecida como relação Muitos para Muitos. Um exemplo de uma relação Muitos para Muitos é um banco de dados que faz o acompanhamento das matrículas de estudantes. Imagine que este banco tem duas tabelas: [Estudantes] e [Matérias]. Um estudante pode se inscrever em várias matérias e uma matéria pode ter vários estudantes. Você deseja ver as matérias em que o estudante se matriculou e todos os estudantes matriculados em uma matéria.
A tabela [ESTUDANTES] é uma tabela Um. Contém um registro por cada estudante, incluindo seu nome, sobrenome e média escolar. Seu Código de Estudante o o identifica de maneira única. A tabela [MATÉRIAS] também é uma tabela Um. Contém um registro para cada matéria, incluindo o nome da matéria e o professor. O campo Código da Matéria identifica cada matéria de maneira única. É utilizada uma tabela intermediária, neste exemplo a tabela [MATRICULAS], para introduzir e mostrar informação das outras duas tabelas. Cada registro introduzido na tabela [ESTUDANTE_MATERIA] está relacionado com as outras tabelas (ESTUDANTES e MATERIAS). Os registros da tabela [MATRICULAS] só contém as duas partes de informação que estabelece a relação: a identificação do estudante e o nome da matéria.
Os dados são introduzidos unicamente nos campos de identificação do estudante e da matéria. Quando se introduz a identificação de um estudante, 4D busca a informação do estudante na tabela relacionada [ESTUDANTES] e a exibe nos campos Sobrenome e Nome. Igualmente, quando se introduz a identificação da matéria, 4D busca a informação na tabela relacionada [MATERIAS] e a exibe no formulário de entrada. É possível exibir informação destas três tabelas utilizando sub-formulários. No registro do estudante, é possível exibir todas as matérias nas quais está inscrito. É possível exibir todos os estudantes inscritos em uma classe particular a partir do registro da classe.. Para mostrar a lista de matérias no registro de um estudante, utilize um sub-formulário. Para maiores informações sobre a criação de sub-formulários, consulte a seção Criar e definir um subformulário. O registro da imagem anterior está na tabela [ESTUDANTES]. É exibida a informação do estudante na parte superior, e o sub-formulário na parte inferior mostra a informação das matérias inscritas, trazida da tabela [MATRICULAS]. Note que o sub-formulário corresponde à tabela [MATRICULAS], não à tabela [MATERIAS]. A tabela [MATRICULAS] contém os registros que conectam os dados do estudante com os dados das matérias. Os sub-formulários contém o campo Nome da matéria [MATERIAS]. Devido à relação entre as tabelas [MATRICULAS] e [MATERIAS], 4D pode mostrar o nome da matéria automaticamente. Este é um exemplo de um registro que exibe a lista de estudantes matriculados em uma classe: Este é um registro da tabela [MATERIAS]. Exibe informação da matéria e a lista de estudantes inscritos. A informação dos estudantes também é trazida da tabela [MATRICULAS], que contém os registros que relacionam as classes com os estudantes inscritos nelas. Nos exemplos anteriores de sub-formulários, você pode introduzir dados em todos os campos exibidos. Por exemplo, para introduzir o registro de um novo estudante, coloque o cursor no último registro do sub-formulário e pressione as teclas Ctrl + Shift + /: (Windows) ou Comando+ Shift + / (Mac OS) para criar um novo registro (você pode mudar o atalho em Propriedades do Banco de dados, consulte ). Quando introduzir o nome da matéria, o resto da informação é introduzido automaticamente no registro. As relações estabelecidas em um banco de dados têm um papel muito importante no funcionamento do banco controlando o fluxo de dados entre as tabelas. Se um registro com uma relação automática é carregado em um formulário de entrada, os registros da tabela relacionada correspondente serão selecionados. Se a relação seleciona somente um registro em uma tabela relacionada, esse registro será carregado a partir do disco. Se a relação faz referência a vários registros, uma nova seleção atual de registros será criada para esta tabela e será carregado o primeiro registro dessa seleção. O registro que é carregado se chama registro atual da tabela. Nos exemplos deste capítulo, foram definidas relações entre não mais que três tabelas. Em realidade, com freqüência se definem relações entre várias tabelas e se ativa uma relação, 4D cria uma seleção de registro na tabela relacionada e carrega um registro. O registro carregado é convertido no registro atual para a tabela e se a tabela tem uma relação automática, 4D cria uma nova seleção na tabela seguinte da cadeia, e assim por diante. Se as relações das tabelas não foram definidas cuidadosamente, o fluxo de informação entre as tabelas pode chegar a ser desordenado ou incorreto. Os casos a seguir ilustram estruturas relacionais as quais é necessário prestar muita atenção.
Uma relação circular é um conjunto de relações definidas de maneira que a transferência de dados forme um loop indefinidamente. A imagem a seguir lhe mostra uma relação circular na qual a tabela [EMPREGADOS] está relacionada a tabela [EMPRESAS], que por sua vez está relacionada a tabela [SEGURADORA], que volta a se relacionar com a tabela [EMPREGADOS].
Quando um registro da tabela [EMPREGADOS] é carregado, 4D carrega o registro correspondente da tabela [EMPRESAS]. Este registro é convertido no registro atual da tabela [EMPRESAS], o que implica a carga do registro relacionado da tabela [SEGURADORA]. Se as relações tivessem permissão para continuar, os registros relacionados com esta seguradora (todas as pessoas asseguradas pela empresa) seriam selecionadas na tabela [EMPREGADOS] e o primeiro registro dessa seleção se converteria no registro atual. Observe que este registro atual pode ser diferente ao registro atual que tinha inicialmente quando se iniciou a progressão. Neste caso, 4D não tem como saber qual o verdadeiro registro atual. Um conflito similar entre registros atuais ocorre se existe mais de um link a mesma tabela. Como não é possível ter mais de um registro atual por vez, não é possível controlar uma relação automática na qual duas ou mais tabelas estão relacionadas com a mesma tabela. A imagem a seguir mostra uma estrutura de banco de dados na qual uma tabela e sua sub-tabela estão relacionadas com a mesma tabela. Quando um usuário está trabalhando com um registro da tabela [EMPREGADOS], o registro relacionado da tabela [SEGURO] é carregado e se converte no registro atual para esta tabela.
Como existe um registro atual em cada tabela, as relações não estão estabelecidas para todos os registros de uma seleção. Observemos por exemplo o banco de faturamento que é exibido a seguir: Quando um registro da tabela [FATURAS] é utilizado, é criada uma seleção de registros na tabela [LINHA_FATURA] que contém todas as linhas para esta fatura. Só é carregado o registro da tabela [ITENS] correspondente ao primeiro registro da tabela [LINHA_FATURA]. A seleção atual da tabela [ITENS] não contém informação sobre todos os objetos da fatura, só sobre o primeiro objeto da fatura. |
PROPRIEDADES
Produto: 4D ARTICLE USAGE
Manual de Desenho 4D ( 4D v14 R2) |