Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Uma chave estrangeira pode atuar como chave primária?


É claro. Essa é uma técnica comum conhecida como superdigitação mesas. Como no seu exemplo, a ideia é que uma tabela contenha um superconjunto de entidades e tenha atributos comuns descrevendo uma entidade geral, e outras tabelas contenham subconjuntos dessas entidades com atributos específicos. Não é diferente de uma hierarquia de classes simples no design orientado a objetos.

Para sua segunda pergunta, uma tabela pode ter duas colunas que são chaves estrangeiras separadamente para a mesma outra tabela. Quando o banco de dados cria a consulta, ele une essa outra tabela duas vezes. Para ilustrar em uma consulta SQL (não tenho certeza sobre a sintaxe do MySQL, não a uso há muito tempo, então essa é a sintaxe do MS SQL especificamente), você daria a essa tabela dois aliases distintos ao selecionar dados. Algo assim:
SELECT
    student_accounts.name AS student_name,
    counselor_accounts.name AS counselor_name
FROM
    student_rec
    INNER JOIN user_accounts AS student_accounts
      ON student_rec.student_number = student_accounts.user_id
    INNER JOIN user_accounts AS counselor_accounts
      ON student_rec.guidance_counselor_id = counselor_accounts.user_id

Isso basicamente leva o student_rec tabela e a combina com as user_accounts table duas vezes, uma vez em cada coluna, e atribui dois apelidos diferentes ao combiná-los para diferenciá-los.