Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #101025
    mguedes
    Participante

      Minha duvida é a seguinte, tenho 3 classes, logo fiz 1 tabela para cada classe:
      – Pessoas (nome, telefone, CPF)
      – Funcionarios (codFuncionario, cargo)
      – Clientes (codCliente)

      Funcionarios e Clientes são especializações da classe Pessoas.

      Quero saber se para implementar a generalização no banco de dados devo adicionar os atributos codCliente e codFuncionario dentro da tabela Pessoas como chave estrangeira?

      Caso não sendo assim… como seria?

      #101028
      rman
      Participante

        @mguedes

        Eu faria da seguinte forma, na tabela PESSOAS criar um campo TIPO_PESSOA para identificar se é funcionário ou cliente, pode ser um simples campo, ou pode ser um chave estrangeira para um tabela TIPO_PESSOA, e lá cadastrar os tipos de pessoas que podem existir. Nas tabelas FUNCIONARIOS e CLIENTES que vai o PESSOA_ID.

        Resumindo, o todo não conhece a parte, a parte que conhece o todo.

        Para trazer as informações, descubra que tipo de pessoa é primeiro, depois consulte PESSOAS com INNER JOIN FUNCIONARIOS ou PESSOAS com INNER JOIN CLIENTES.

        #101029
        mguedes
        Participante

          valeu… me deu uma luz boa aqui… então definimos que tipo de pessoa é em um campo tipoPessoa e fazemos a chave estrangeira com pessoaID né?

          ficou bem melhor mesmo!

          #101035
          rman
          Participante

            Seria assim:


            CREATE TABLE PESSOAS (
            PESSOA_ID NUMBER NOT NULL,
            NOME VARCHAR(32) NOT NULL
            );

            ALTER TABLE PESSOAS ADD CONSTRAINT PK_PESSOAS PRIMARY KEY(PESSOA_ID);

            CREATE TABLE FUNCIONARIOS (
            FUNCIONARIO_ID NUMBER NOT NULL,
            PESSOA_ID NUMBER NOT NULL,
            DATA_ADMISSAO DATE NOT NULL
            );

            ALTER TABLE FUNCIONARIOS ADD CONSTRAINT PK_FUNCIONARIOS PRIMARY KEY(FUNCIONARIO_ID);

            ALTER TABLE FUNCIONARIOS ADD CONSTRAINT FK_PESSOAS_FUNCIONARIOS FOREIGN KEY (PESSOA_ID) REFERENCES PESSOAS (PESSOA_ID);

            CREATE TABLE CLIENTES (
            CLIENTE_ID NUMBER NOT NULL,
            PESSOA_ID NUMBER NOT NULL,
            DATA_ULTIMA_COMPRA DATE
            );

            ALTER TABLE CLIENTES ADD CONSTRAINT PK_CLIENTES PRIMARY KEY(CLIENTE_ID);

            ALTER TABLE CLIENTES ADD CONSTRAINT FK_PESSOAS_CLIENTES FOREIGN KEY (PESSOA_ID) REFERENCES PESSOAS (PESSOA_ID);

            DROP TABLE FUNCIONARIOS;

            DROP TABLE CLIENTES;

            DROP TABLE PESSOAS;

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.