Criar o seu modelo de dados físicoALTER TABLE ADD CONSTRAINT OrderItem FK__OrderItem_SalesOrder FOREIGN KEY (SalesOrderID) REFERÊNCIAS SalesOrder (SalesOrderID) ON DELETE CASCADE
Por que isso é uma declaração chamada restrição de integridade referencial declarativa? Porque ele declara o comportamento da tabela de integridade referencial, como parte da definição de tabela própria, em oposição à execução comportamento como uma parte separada do código executável de computador. Temos agora quebrar essa restrição DRI e olhar o que significa que cada frase, começando com a seguinte : ALTER TABLE ADD CONSTRAINT OrderItem FK__OrderItem_SalesOrder A frase anterior, modifica a definição da tabela filho OrderItem para adicionar a restrição objeto chamado FK__OrderItem_SalesOrder. Este objeto contém os restantes três linhas de código, que compõem as instruções reais da restrição, como segue: FOREIGN KEY (SalesOrderID) REFERÊNCIAS SalesOrder (SalesOrderID) Esta frase é a "carne e batata" da restrição DRI. Ele cria a restrição entre os OrderItem.SalesOrderID chave estrangeira ea chave primária SalesOrder. SalesOrderID de modo que, para cada valor armazenado em OrderItem.SalesOrderID, um valor igual deve ser armazenado em SalesOrder.SalesOrderID com que OrderItem.SalesOrderID pode igualar. Se qualquer outro valor é tentada em OrderItem.SalesOrderID, o banco de dados gera um erro ea tentativa falhar. Finalmente, a última linha da restrição DRI é o seguinte: ON DELETE CASCADE Esta linha instrui o primeiro banco de dados para apagar todas as linhas OrderItem relacionada a uma linha SalesOrder que está prestes a ser excluído. Sem a cláusula ON DELETE CASCADE nesse constrangimento DRI, a tentativa de excluir uma linha SalesOrder com linhas relacionadas OrderItem jogaria um erro, e nenhuma alteração será feita de conteúdo ou tabela. As quatro primeiras linhas de código de restrição são sintaxe padrão apoiado pela DRI maioria das plataformas de banco de dados. Algumas plataformas de banco de dados, como SQL Server 2000 e Oracle 9i, o apoio do ON DELETE CASCADE extensão DRI para a sintaxe básica para facilitar estas exclusões em cascata. Para plataformas de banco de dados que não suportam exclusões em cascata nas restrições DRI, a cascata comportamento deve ser implementado usando um pedaço de código que executa automaticamente quando um usuário tenta excluir uma linha SalesOrder. Tais um pedaço de executar automaticamente um código é chamado gatilho. Embora nós discutir exaustivamente dispara mais tarde, é preciso cobrir o básico do que são e como funcionam aqui para que você possa contraste e compará-las com restrições DRI. Antes de mais nada, porque eles são chamados de gatilhos? A resposta é que a execução de um é desencadeado por um evento de banco de dados (INSERT, UPDATE ou DELETE). Um gatilho é anexado a uma tabela específica e é instruído a executar automaticamente sempre que um ou mais eventos de banco de dados específico que terá lugar na tabela. Você pode colocar praticamente qualquer código SQL que você deseja em um disparador, incluindo o código que modifica o conteúdo de outros tabelas. Tomemos, por exemplo, a cláusula seguinte: ON DELETE CASCADE Se implementado como um gatilho, a cláusula anterior torna-se o seguinte código: CREATE TRIGGER ON tD_SalesOrder SalesOrder FOR DELETE AS BEGIN DECLARE @ linhas int SELECT @ Rows = @ @ ROWCOUNT IF @ Rows = 0 RETURN DELETE FROM OrderItem ch OrderItem, excluído ONDE ch.SalesOrderID = deleted.SalesOrderID FIM Agora, para quebrar o que está acontecendo neste código. Primeiro, começar com o cabeçalho do gatilho. Este cabeçalho tanto cria o gatilho e atribui-lo para uma tabela específica e também especifica um ou mais eventos que os incêndios que, como segue: CREATE TRIGGER ON tD_SalesOrder SalesOrder FOR DELETE AS Em outras palavras, você está criando um gatilho na tabela SalesOrder nomeado tD_SalesOrder, e você está instruindo-o a executar cada vez que ocorre um evento de DELETE na tabela SalesOrder. So far, so good. Agora olha para o corpo do gatilho, a parte que realmente executado, como segue: BEGIN DECLARE @ linhas int SELECT @ Rows = @ IF @ @ ROWCOUNT retornam linhas = 0 Você começa o bloco de código com BEGIN e logo em seguida declarar uma variável local do tipo inteiro chamado @ linhas. Esta variável contém a contagem de linhas na tabela SalesOrder afetados pelo evento DELETE. A variável global @ @ ROWCOUNT é controlado pelo servidor de banco de dados, que sempre contém o número de linhas afetadas na tabela, mais recentemente modificado pelo código atualmente em execução, que neste caso é a tabela SalesOrder. Assim SELECT @ Rows = @ @ ROWCOUNT lugares a contagem de linhas excluídas da tabela SalesOrder na variável local que acabou declarado. Se o número de linhas afetadas seja zero, o código do gatilho graciosamente saídas usando a instrução RETURN, e nada mais acontece. Se este teste de retorno não existe no código do gatilho, o resto do código do gatilho é executado, e você não quer que isso aconteça porque você estaria executando o código que deve ser executado somente se existem linhas relacionadas criança. Now à parte o gatilho que realmente realiza a exclusão em cascata, como segue: DELETE FROM OrderItem ch OrderItem, excluído ONDE ch.SalesOrderID = deleted.SalesOrderID FIM Esta relacional delete exclui essas linhas na tabela OrderItem que estão relacionados com todas as linhas da Excluídos pseudotable em essência, todas as linhas OrderItem relacionadas com as linhas SalesOrder excluída. Finalmente, você fechar o corpo do gatilho usando END. Gatilhos têm muito diferentes capacidades das plataformas de banco de dados diversos. O gatilho que acabamos de discutir, por exemplo, opera na plataforma SQL Server 2000, que define um evento no nível de instrução, o que significa que o gatilho é acionado uma vez para cada instrução DELETE executado sobre a mesa, não importa quantas linhas são afectadas por essa afirmação. Comparativamente, o Oracle dispara pode operar em qualquer nível de instrução, como no SQL Server, ou no nível de linha, de tal forma que o código do gatilho é executado uma vez para cada linha individual que é afetado pela instrução. Outra distinção entre as plataformas de banco de dados É quando podem disparar gatilhos. Incêndios SQL Server dispara após o evento ocorre e todos os valores são modificados pela instrução (mas antes que eles estão empenhados em disco); Oracle permite que você defina um trigger para executar antes ou após o evento ocorre. Outras distinções também existem. Então, quando você implementar a integridade referencial usando restrições DRI e quando você usa triggers? Bem, uma restrição de DRI é quase sempre mais rápido do que para executar a operação equivalente implementado em um gatilho, e eles certamente são mais simples de código, mas às vezes você pode precisar uma lógica mais complexa para ser envolvido, e para isso, você precisará usar triggers.
Muitas vezes você desejar para automaticamente fornecer valores padrão para linhas inseridas em uma tabela, por exemplo, a data e hora de uma venda, ou um valor de estado que representa cerca de ponto no início de um processo de negócio. Esse comportamento é implementado usando padrões padrões são definidos em colunas de tabela específica, e que informe o seu banco de dados "Se essa coluna não está incluído na instrução INSERT para esta tabela, vá em frente e entrar automaticamente este valor padrão. Se a instrução INSERT não incluir esta coluna, utilize o valor que foi fornecido por ele. "Aqui é como uma declaração padrão examina a definição da tabela: CREATE TABLE SalesOrder (SalesOrderID int IDENTITY (1,1), CustomerNumber varchar (12) NULL, DataVenda datetime DEFAULT GetDate () NOT NULL, Você verá ao longo deste artigo que, ocasionalmente, porções de código de negrito. Este é um mecanismo simples e eficaz para ajudá-lo a "ver a floresta para as árvores", como podemos discutir um tema. Por exemplo, destacando a frase padrão em um bloco de código enquanto padrões discutir ajuda-o a adquirir a parte mais aplicáveis do código, sem se distrair com o resto durante a discussão. Essa declaração padrão coloca automaticamente o resultado do SQL Server GetDate () função - a data e hora, para a coluna DataVenda enquanto a coluna DataVenda não é uma parte da instrução INSERT. Se a coluna DataVenda faz parte da instrução INSERT, o valor fornecido pela declaração será usada. um artigo submetido por Linda Hastings Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre. Importante: Este artigo "Criando seu modelo de dados físico" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.
|
|||||
| Online: 291 users browsing the articles directory |
|
|