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 / 329572
Accepted
ZiiMakc
ZiiMakc
Asked: 2023-07-24 02:24:39 +0800 CST2023-07-24 02:24:39 +0800 CST 2023-07-24 02:24:39 +0800 CST

Como impor a existência da entidade em N-tables - postgres

  • 772

Digamos que decidimos dividir usera tabela em duas, uma terá dados relacionados à autenticação, outra descrição básica do usuário:

   user_table
user_id | name
1       | Max
2       | Alex
3       | Should not be possible
   auth_table
user_id | email   | password
1       | [email protected] | 123
2       | [email protected] | 321
4       | [email protected] | Should not be possible

É possível impor a existência do mesmo user_id? Basicamente, ambas as tabelas devem ter exatamente o mesmo número de linhas e cada linha deve ter uma correspondência em ambas as tabelas.

postgresql
  • 2 2 respostas
  • 29 Views

2 respostas

  • Voted
  1. Best Answer
    Erwin Brandstetter
    2023-07-25T22:25:55+08:002023-07-25T22:25:55+08:00

    Você pode impor seu projeto em todos os momentos PRIMARY KEYcom restrições mútuasFOREIGN KEY .

    CREATE TABLE user_table (
      user_id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY
    , name text
    );
    
    CREATE TABLE auth_table (
      user_id int PRIMARY KEY
    , email text
    , password text
    , CONSTRAINT auth_table_user_id_fk FOREIGN KEY (user_id)
      REFERENCES user_table ON DELETE CASCADE
    );
    
    -- finally add 2nd FK:
    ALTER TABLE user_table
      ADD CONSTRAINT user_table_user_id_fk FOREIGN KEY (user_id)
      REFERENCES auth_table ON DELETE CASCADE;
    

    O PK impõe UNIQUE NOT NULL, o FK impõe integridade referencial. Tudo feito. Fiz user_table.user_iduma IDENTITYcoluna, e reaproveito o ID gerado na outra tabela. Mas isso é opcional. Ver:

    • Coluna da tabela de incremento automático

    A manipulação de linhas torna-se bastante restrita. Inserir linhas pode parecer um problema de ovo de galinha, mas basta inserir nas duas tabelas na mesma instrução (usando um CTE):

    WITH ins_user AS (
       INSERT INTO user_table (name)
       VALUES ('foo')
       RETURNING user_id
       )
    INSERT INTO auth_table (user_id, email, password)
    SELECT user_id, '[email protected]', 'secret'
    FROM   ins_user
    RETURNING user_id;
    

    violino

    Veja (com links para mais):

    • Problema do ovo e da galinha com chaves estrangeiras

    Eu adicionei ON DELETE CASCADEcomo recurso de conveniência opcional, portanto, excluir de uma tabela exclui de ambos. Em vez disso, você pode excluir de ambas as tabelas na mesma instrução.

    Pode-se acrescentar ON UPDATE CASCADEtambém, mas eu não permitiria a atualização desses IDs para começar.

    • 1
  2. Rohit Gupta
    2023-07-24T04:46:41+08:002023-07-24T04:46:41+08:00

    Sim é possivel

    Eu colocaria índices exclusivos em user_id, para que não se repita.

    Em seguida, use um gatilho na tabela principal, antes de inserir, para criar um registro na 2ª tabela

    • 0

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

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

    • 4 respostas
  • Marko Smith

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

    • 10 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
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +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

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