Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

apache22

Juntar 2 bases de dados em uma

Recommended Posts

Bom dia Pessoal,

 

Sou responsável por um sistema corporativo onde existe o gerenciamento de alunos, professores, etc...

 

Só que no inicio do ano foi necessário dividir o banco em duas partes (a empresa foi dividida) assim as filiais tambem tiveram que ser divididas.

 

Com isso tive que criar uma outra base idêntica a outra. Com informações diferentes.

 

Isso gerou problemas que ja foram sanados, só que resolveram nesse mês cancelar essa divisão, e falaram que o banco teria que ser um só novamente, ou seja, unir os dois bancos em um só.

 

O problema é que, por as tabelas possuírem ID com incrementação automática (identity) e quando dividimos não apagamos os dados de outras filiais ficando duplicadas nos dois bancos, ficaram informações diferentes com IDs iguais.

 

exemplo:

 


Base 1
|Tabela Aluno   | 
|_______________|               
|ID | NOME      |
|___|___________| 
|01 | Joao      |
|02 | Pedro     |
|03 | Maria     |
|04 | Lucia     |
|05 | Ricardo   |
|06 | Natalia   |
|___|___________|


|Tabela Turma       
|___________________________|               
|ID | TURMA        |Periodo |
|___|______________|________| 
|01 | Ensino Médio |   1    |
|02 | Ensino Médio |   2    |
|03 | Ensino Médio |   3    |
|___|______________|________|

|Tabela Matricula       
|_________________________|               
|ID | ID_ALUNO | ID_TURMA |
|___|__________|__________| 
|01 |    1     |     2    |
|02 |    4     |     2    |
|03 |    2     |     3    |
|___|__________|__________|

 

Base 2 (duplicada)

|Tabela Aluno   | 
|_______________|               
|ID | NOME      |
|___|___________| 
|01 | Joao      |
|02 | Pedro     |
|03 | Maria     |
|04 | Leonardo  |
|05 | Marta     |
|06 | Diego     |
|___|___________|


|Tabela Turma                |
|____________________________|               
|ID | TURMA         |Periodo |
|___|_______________|________| 
|01 | Ensino Médio  |   1    |
|02 | Ensino Médio  |   2    |
|03 | Ensino Tecnico|   1    |
|___|_______________|________|

|Tabela Matricula         |
|_________________________|               
|ID | ID_ALUNO | ID_TURMA |
|___|__________|__________| 
|01 |    1     |     2    |
|02 |    6     |     2    |
|03 |    3     |     3    |
|___|__________|__________|


 

 

Assim se eu usar a intrução

 

INSERT INTO Aluno (campos)   
VALUES (SELECT * FROM Base2.dbo.Aluno)  

 

Creio que não vai funcionar por causa dos IDs duplicados.

 

Alguém tem alguma idéia de como posso resolver, ou já passou por isso?

 

Existe uma forma de fazer isso só pelo sql sem usar o PHP ou ASP?

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

apache22,

 

Seu caso é bem complicado.

O que eu faria uma terceira database, utilizando o tablediff, pegando a tabela principal para joins justamente para pegar os IDS diferentes.

 

http://forum.imasters.com.br/topic/395839-comparando-duas-tabelas/

 

Clado que isso é uma idéia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O maior problema dele acho que são os dados duplicados. O que ele pode usar para determinar qual é o registro mais recente? Caso todos os registros possuam datas, fica mais fácil, porém não é o tipo de informação que armazenamos para todo e qualquer registro do sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O maior problema dele acho que são os dados duplicados. O que ele pode usar para determinar qual é o registro mais recente? Caso todos os registros possuam datas, fica mais fácil, porém não é o tipo de informação que armazenamos para todo e qualquer registro do sistema.

 

Cenário pior seriam até os homonimos (nomes iguais e pessoas diferentes).

ele mesmo cita algo complicado que podia se prever:

O problema é que, por as tabelas possuírem ID com incrementação automática (identity) e quando dividimos não apagamos os dados de outras filiais ficando duplicadas nos dois bancos, ficaram informações diferentes com IDs iguais.

Eu jah fiz uma junção de bases, mas o estudo foi grande. No meu caso, os dados tinham datas, mas as bases eram diferentes. Existiam outras FKs, outras tabelas e por ai vai.

O tablediff foi somente uma luz pqna ou um ponto de partida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pessoal pela ajuda,

 

Vou tentar usar o tablediff para localizar os diferentes, a maioria das tabelas possuem a matricula de cada aluno e o codigo de cada filial e como um grupo de filiais sao diferentes do outro grupo acho que tem como identificar

Exemplo:

|Tabela Aluno      	              |  
|_____________________________________|                
|ID | NOME      | Filial  | Matricula |
|___|___________|_________|___________|  
|01 | Joao      | 1       | 1234      |
|02 | Pedro     | 1	  | 2324      |
|03 | Maria     | 2	  | 1343      |
|04 | Lucia     | 2	  | 4566      |
|05 | Ricardo   | 3	  | 3454      |
|06 | Natalia   | 4	  | 1456      |
|___|___________|_________|___________| 

 

 

 

mas o que acho que vai ser dificil vai ser trocar os ids relacionados nas tabelas associativas

 

|Tabela Matricula        
|_________________________|                
|ID | ID_ALUNO | ID_TURMA | 
|___|__________|__________|  
|01 |    1     |     2    | 
|02 |    4     |     2    | 
|03 |    2     |     3    | 
|___|__________|__________|

Não tenho ideia de como alterar automaticamente, por exemplo, o ID_ALUNO 4 se essa tupla na Tabela Aluno ao ser incluida na outra base passar a ter o valor no ID= 500

 

Será que uma procedure daria pra fazer isso?

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.