Ajuda com banco de Dados

1. Ajuda com banco de Dados

Adamastor Ferreira
Gator27

(usa Ubuntu)

Enviado em 04/06/2012 - 10:37h

Comecei a estudar banco de dados recentemente e estou tendo muita dificuldade.
Gostaria que alguém pudesse me ajudar a tratar este erro aqui.

ERRO: duplicar valor da chave viola a restrição de unicidade "pk_empresa_id"
DETAIL: Chave (idempresa)=(E1 ) já existe.
Uma chave primária nunca poderá ser duplicada.
ALTER TABLE EMPRESA ADD CONSTRAINT PK_EMPRESA_ID PRIMARY KEY (IDEMPRESA);
Porque não posso definir a chave primária para essa coluna?
Quais comando que uso para que E1 possa aparecer nas duas tabelas de funcionários Ana e Lua.
sendo que E1 é o idempresa e Manaus é a cidade empresa.

Porque a chave primaria nao pode ser char tem que ser int e de preferecia auto increment?
como criar um auto increment no postegre? tem que criar uma seguencia e depois associala ao campo que e chave primaria no banco?




create table empresa(
idempresa char (5),
nome_empresa varchar (60),
cidade_empresa varchar (60),
telefone_empresa char (11)
);

create table funcionario(
idfuncionario char (5),
nome_funcionario varchar (60),
celular_funcionario varchar (11),
nome_filho_funcionario varchar (60),
idempresa char (5)
);

create table filho(
idfilho serial,
nome_filho varchar (60),
idfuncionario char (5)
);

-- CRIAÇÃO DAS CHAVES PRIMARIAS
ALTER TABLE EMPRESA ADD CONSTRAINT PK_EMPRESA_ID PRIMARY KEY (IDEMPRESA);
ALTER TABLE FUNCIONARIO ADD CONSTRAINT PK_FUNCIONARIO_ID PRIMARY KEY (IDFUNCIONARIO);
ALTER TABLE FILHO ADD CONSTRAINT PK_FILHO_ID PRIMARY KEY (IDFILHO);


-- CRIACÃO DAS FOREIGN KEY
ALTER TABLE funcionario ADD constraint fk_empresa_funcionario foreign key (IDEMPRESA) references empresa (IDEMPRESA);
ALTER TABLE FILHO ADD CONSTRAINT FK_funcionario_filho FOREIGN KEY (IDFUNCIONARIO) references funcionario (IDFUNCIONARIO);

--ANA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_empresa, cidade_empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E110' , 'Ana', '99861222', 'E1');

--LUA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E111' , 'LUA', '81131099', 'E1');

--Sol
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E2', 'Petrobras', 35262233, 'Campus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E210' , 'Sol', '81129088', 'E2');


  


2. Re: Ajuda com banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/06/2012 - 10:56h

Observe que vc está inserindo o idEmpresa com o mesmo valor, e o idEmpresa é chave primária, por isso não pode ter valores repetidos. Observe também que o erro reporta tudo isso com clareza.


--ANA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_empresa, cidade_empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E110' , 'Ana', '99861222', 'E1');

--LUA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E111' , 'LUA', '81131099', 'E1');



Para resolver insira outro valor em idEmpresa (observe se o mesmo tem correspondencia na outra tabela de empresas)

--ANA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_empresa, cidade_empresa ) values ( 'E1', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E110' , 'Ana', '99861222', 'E1');

--LUA
INSERT INTO empresa (idEmpresa, nome_Empresa, telefone_Empresa, cidade_Empresa ) values ( 'E3', 'IFES', 35261411, 'Manaus');

INSERT INTO funcionario (idFuncionario, nome_funcionario, celular_funcionario, idEmpresa) values ( 'E111' , 'LUA', '81131099', 'E1');


Enfim estude com calma os conceitos sobre banco de dados e vá inserindo os comando com calma.



3. Re: Ajuda com banco de Dados

Adamastor Ferreira
Gator27

(usa Ubuntu)

Enviado em 04/06/2012 - 11:03h

E1 é o idempresa os funcionario são da mesma empresa.


4. Re: Ajuda com banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/06/2012 - 11:23h

Mas vc esta inserindo na tabela de empresa, pela lógica essa tabela deveria ter dados de empresa não de funcionários.

Veja o ERRO:

ERRO: duplicar valor da chave viola a restrição de unicidade "pk_empresa_id"
DETAIL: Chave (idempresa)=(E1 ) já existe.


Está dizendo claramente para você que existe um erro de chave duplicada, e que é o campo idempresa recebendo E1 mais de uma vez.

Repito, reveja os conceitos, reveja seus comandos SQL, o erro está claro.


5. Re: Ajuda com banco de Dados

Adamastor Ferreira
Gator27

(usa Ubuntu)

Enviado em 04/06/2012 - 16:57h

Olá, você está dizendo em criar uma chave primária, ou seja, uma chave única, em que o valor não pode, não deve e não irá nunca se repetir.

Se o ID da empresa pode se repetir, então a chave primária deverá ser composto por um outro campo, ou pela soma de alguns campos.

Está dando erro porque está sendo definindo uma PK a uma tabela que já contém dados duplicados no campo IDEMPRESA, ou seja, o valor "E1", já existe em mais de um registro, e isto está errado de acordo com a PK que foi criada.

Como Alterar o valor de IDEMPRESA de uma das empresas.


6. Re: Ajuda com banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 04/06/2012 - 23:36h

Pesquise sobre o comando UPDATE, e o valor de IDEMPRESA pode ser informado em duplicidade mas apenas na tabela onde a mesma não é a chave primária, como por exemplo a tabela de funcionários.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts