AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 5176
Accepted
Derek Downey
Derek Downey
Asked: 2011-08-30 07:50:34 +0800 CST2011-08-30 07:50:34 +0800 CST 2011-08-30 07:50:34 +0800 CST

Qual é o propósito de SET NULL em restrições de exclusão/atualização de chaves estrangeiras?

  • 772

Provavelmente estou sendo tacanho, mas se eu criar uma restrição de chave estrangeira e uma linha for atualizada ou excluída, perco essa conexão se a coluna da tabela filha for definida como NULL.

Qual é o propósito de manter intencionalmente essas linhas órfãs?

foreign-key null
  • 2 2 respostas
  • 7307 Views

2 respostas

  • Voted
  1. Best Answer
    Jack Douglas
    2011-08-30T10:10:51+08:002011-08-30T10:10:51+08:00

    Se set nullé útil ou não, depende do que você escolheu nullsignificar no contexto específico - com toda a confusão e opinião em torno nulldo IMO, a abordagem sensata é que o DBA

    1. Escolha (e documente) o que significa para cada campo anulável
    2. Certifique-se de que isso significa apenas uma coisa

    Com essas regras, considere o seguinte caso de uso:

    • Você tem uma 'loja' de mesa (por exemplo, instalações individuais)
    • Você tem uma tabela 'varejista' (por exemplo, cadeias)
    • A tabela 'loja' possui um campo de pesquisa referente à chave 'varejista'
    • Você definiu nullpara representar uma loja independente (ou seja, uma que não faz parte de uma rede)
    • Um 'varejista' fecha filiais a ponto de você considerar suas lojas independentes

    Nesse caso, on delete set nullfaz sentido. Existem outras maneiras de modelar essas regras de negócios, mas esta é a mais simples e, se ela se encaixar com precisão nos fatos importantes para você no mundo real, sugiro que esteja perfeitamente ok

    • 13
  2. DerfK
    2011-08-30T09:26:12+08:002011-08-30T09:26:12+08:00

    A maioria dos casos de uso em que consigo pensar geralmente são da forma "Bem, poderíamos fazer algo diferente, mas sentimos vontade de fazer isso".

    Considere um ownercampo para um bug em um sistema de rastreamento de problemas em uma empresa. Se John sair, certamente todos os seus problemas não devem ser simplesmente excluídos quando sua conta for removida. Mesmo assim, alguns bancos SET DEFAULTde dados permitem uma ação (ou ter um acionador para executar a mesma tarefa), e ter um Nobodyfuncionário como o proprietário padrão dos problemas pode ser uma opção. Ou poderíamos ter um disabledcampo para John em vez de excluir seu registro.

    • 1

relate perguntas

  • PostgreSQL: conta conjuntos de dados/linhas contendo valores NULL

  • Chave estrangeira multicoluna não exclusiva

  • Violação de chave estrangeira - não sei por que

  • NULL ou NOT NULL por padrão?

  • Quando usar NULL e quando usar uma string vazia?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve