Usuário com melhor resposta
Dúvida com auto relacionamento

Pergunta
-
Respostas
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:12
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:12
-
-
Wmn8,
Existe em alguns casos onde é necessário criar uma estrutura hierárquia "pai-filho" na mesma tabela.
Este tipo de manipulação de dados, usando recursividade é comum para diversos vínculos de dados.
Veja os links abaixo para maiores informações:
http://msdn.microsoft.com/pt-br/library/ms174846.aspx
http://technet.microsoft.com/pt-br/library/ms186243(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 11 de agosto de 2014 14:44
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:12
-
-
Wmn8,
Existe em alguns casos onde é necessário criar uma estrutura hierárquia "pai-filho" na mesma tabela.
Este tipo de manipulação de dados, usando recursividade é comum para diversos vínculos de dados.
Veja os links abaixo para maiores informações:
http://msdn.microsoft.com/pt-br/library/ms174846.aspx
http://technet.microsoft.com/pt-br/library/ms186243(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"Boa noite Durval, gostei das indicações, vão me ajudar bastante.
Obrigado!
- Marcado como Resposta LWMN quinta-feira, 14 de agosto de 2014 00:09
Todas as Respostas
-
Wmn8,
Existe em alguns casos onde é necessário criar uma estrutura hierárquia "pai-filho" na mesma tabela.
Este tipo de manipulação de dados, usando recursividade é comum para diversos vínculos de dados.
Veja os links abaixo para maiores informações:
http://msdn.microsoft.com/pt-br/library/ms174846.aspx
http://technet.microsoft.com/pt-br/library/ms186243(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Sugerido como Resposta Roberto F FonsecaModerator segunda-feira, 11 de agosto de 2014 14:44
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:12
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:12
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:12
-
WMN8, o autorrelacionamento não é um objetivo ou finalidade mas sim representação (modelo) de algo que já existe. Por exemplo, em SQL Server podemos ter uma tabela em que cada linha contenha informações de funcionário e que uma das colunas aponte para o chefe imediato. Ou seja, há um ponteiro para outra linha na mesma tabela.
-- código 1 v2
CREATE TABLE Funcionário ( ID char(7) not null primary key, Nome varchar(50), ID_Chefe char(7) null references Funcionário (ID) );
ALTER TABLE Funcionário
ADD CONSTRAINT SemLoop CHECK (ID <> ID_Chefe);
No código acima a coluna ID_Chefe, quando preenchida, aponta para a linha que contém os dados do chefe imediato.
A manipulação desse tipo de apontamento geralmente é tratada com algoritmos de hierarquia, com uso de recursividade.
Para testar:
TRUNCATE TABLE Funcionário; INSERT into Funcionário values ('0000001', 'abc', null), ('0000002', 'xyz', '0000001'), ('0000003', 'def', '0000002'), ('0000004', 'ghi', '0000001'); -- tenta inserir ponteiro de chefe para código inexistente INSERT into Funcionário values ('0000005', 'qwerty', '8080808'); -- tenta inserir ponteiro de chefe para o próprio funcionário INSERT into Funcionário values ('0000006', 'asdfg', '0000006');
José Diz Belo Horizonte, MG - Brasil
(Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)
Boa note pessoal,
Eu quero criar uma tabela para armazenar clientes e funcionários e dependentes dos funcionários tudo em uma única tabela e vou chamá-la de pessoa, então pelo que eu li, seria o caso de um auto relacionamento para associar o dependente ao funcionário que está contido na mesma tabela? Vi isso em um sistema e achei uma forma interessante de organizar as informações no banco de dados sem a necessidade de criar várias tabelas uma para cada tipo de pessoa sendo que todas vão ter muitos campos semelhantes, mas eu não vi o banco de dados porque não tinha acesso então eu deduzi que estaria usando um auto relacionamento. Seria o caso?
Agradeço desde já pela ajuda de todos vocês!
- Editado LWMN terça-feira, 12 de agosto de 2014 01:44
-
-
-
Wmn8,
Existe em alguns casos onde é necessário criar uma estrutura hierárquia "pai-filho" na mesma tabela.
Este tipo de manipulação de dados, usando recursividade é comum para diversos vínculos de dados.
Veja os links abaixo para maiores informações:
http://msdn.microsoft.com/pt-br/library/ms174846.aspx
http://technet.microsoft.com/pt-br/library/ms186243(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"Boa noite Durval, gostei das indicações, vão me ajudar bastante.
Obrigado!
- Marcado como Resposta LWMN quinta-feira, 14 de agosto de 2014 00:09
-
Considerando-se o código 2, eis dados para testes.
-- código 3 -- inclui funcionário JOÃO BEGIN TRANSACTION; INSERT into Pessoa values (1, 'JOÃO', 'endereço joão', 'localidade joão', null, null); set dateformat dmy; INSERT into Funcionário values ('0937109', 1, '12/5/2009'); COMMIT TRANSACTION; -- inclui dependentes de JOÃO BEGIN TRANSACTION; INSERT into Pessoa values (2, 'PAULO', 'endereço paulo', 'localidade paulo', null, null); INSERT into Dependente values ('0937109', 2, 'F'); COMMIT TRANSACTION; BEGIN TRANSACTION; INSERT into Pessoa values (3, 'MARIA', 'endereço maria', 'localidade maria', null, null); INSERT into Dependente values ('0937109', 3, 'F'); COMMIT TRANSACTION; --inclui funcionária MARIA BEGIN TRANSACTION; set dateformat dmy; INSERT into Funcionário values ('0170945', 3, '1/9/2012'); COMMIT TRANSACTION; go
Para visualizar os dados:
-- código 4 CREATE VIEW v_Funcionário as SELECT F.ID as ID_Func, P.Nome, F.Data_admissão from Funcionário as F inner join Pessoa as P on F.ID_Pessoa = P.ID; go CREATE VIEW v_Dependente as SELECT F.ID as ID_Func, P.Nome, D.ID_Dep, (SELECT Nome from Pessoa as P2 where P2.ID = D.ID_Dep) as Dependente from Funcionário as F inner join Pessoa as P on F.ID_Pessoa = P.ID inner join Dependente as D on D.ID_Func = F.ID; go -- lista pessoas SELECT * from Pessoa; -- lista funcionários SELECT Nome, ID_Func, Data_admissão from v_Funcionário; -- lista dependentes do funcionário JOÃO SELECT Nome as Funcionário, ID_Func, Dependente from v_Dependente where ID_Func = '0937109';
José Diz Belo Horizonte, MG - Brasil
(Se encontrou a solução nesta resposta, ou se o conteúdo foi útil, lembre-se de marcá-la)
Boa noite, gostei das suas explicações e da sugestão referente a não colocar uma tabela única para dados de pessoas. Acho que já até falei com você sobre livros no Linkedin há um tempo atrás.
Agradeço muito a sua ajuda e dos amigos que tiveram a boa vontade em estar compartilhando sugestões e conhecimento aqui.
Obrigado mais uma vez!
- Editado LWMN quinta-feira, 14 de agosto de 2014 00:14