Relação entre tabelas - como incrementar o campo

07/10/2004

0

Fala pessoal

certas horas na modelagem do banco de dados temos tabelas com relacao de 1 para N ( claro , toda hora :P ) .. Só q algumas vezes necessito de um valor que está na tabela de cardinalidade 1, por exemplo um SEQXXX .. vou exemplificar:

tenho um tabela Cursos

CodCurso int id
DescCurso varchar(50)
SEQXXX int

e uma Alunos

Matricula
CodCurso (FK)

a matricula seria formada pelo CodCurso + este SEQXXX. Entao ficaria
1001, 1002, 1003, 2001, 2002, 2003, e assim vai... isso a grosso modo logicamente heheheh ...

Pô qual a opiniao de vcs ?? eu faco o incremento na tabela , tipo ( SEQXXX = SEQXXX + 1 ) mas devido a problema de locks, concorrencia de transações, entre outras coisas , sabemos que essa forma não é a ideal ... alguem tem uma sugestao ????


Felipe_cduarte

Felipe_cduarte

Responder

Posts

11/10/2004

Marcus.magalhaes

Felipe, boa tarde.

Deixe me ver se entendi, vc tem o seguinte modelo:

[color=green:8f2c2d3160]Tabela : CURSO

codCurso Int (PK)
DescCurso VarChar(50)
SEQxxx Int -- Para que?

Tabela : Aluno

Matricula ??? (provalmente Int)
Codcurso Int (FK)[/color:8f2c2d3160]

Se isso estiver certo, eu vejo 2 coisas aí :
1) vc terá que cadastrar n vezes cada aluno, pois cada vez que ele fizer um curso seus dados terão que ser novamente inseridos
2) se vc quer gerar a chave da matricula a partir de codcurso + seqxxx, vc terá que cadastrar 1 curso n vezes, pois para cada alunos o seqxxx precisará ser diferente.

Se ainda estiver certo eu vejo este modelo da seguinte forma:

[color=red:8f2c2d3160]Tabela : curso

cod_curso Int Identity(1, 1) NOT NULL, (PK)
desc_curso VarChar(50) NOT NULL

Tabela : aluno

mat_aluno Int Identity(1, 1) NOT NULL, (PK)
nome_aluno VarChar(35) NOT NULL,
.
.
.
etc...

Tabela aluno_curso
cod_curso Int NOT NULL, (PK)(FK)
mat_aluno Int NOT NULL, (PK)(FK)[/color:8f2c2d3160]

esta terá relacionamento [b:8f2c2d3160]1xN[/b:8f2c2d3160] com curso e aluno, formando assim um relacionamento [b:8f2c2d3160]NxN[/b:8f2c2d3160] entre curso e aluno.

Espero ter ajudado.

Att,


Responder

12/10/2004

Felipe_cduarte

Fala marcus blz !

bom , vamos lá .. o lance da modelagem das tabelas nao é minha preocupação , mas acho q minha explicação ´a grosso modo´ ficou tao horrivel que nao deu pra entender :D , mas a ideia das tabelas seria +- isso que vc transcreveu... mas meu problema persiste: o aluno seria alocado a um curso.. vamos dizer que o curso tem codigo 123.. entao a matricula dele ( tipo uma funcao geraMatricula() ) tem que ser 123XXX onde esse XXX é sequencial .. por isso o problema do auto incremento com relação entendeu ?? se eu cadastrasse 3 alunos neste curso seria:

123001
123002
123003

mas se tivesse um curso 132, a numeração tb teria que iniciar do 1, tipo:

132001
132002 e assim vai...

Fico no aguardo de uma ajuda

[]´s


Responder

12/10/2004

Marcus.magalhaes

Boa noite Felipe.

Para fazer o q vc quer, só mesmo gerando na mão. Mas eu ainda não entendi o pq de vc querer fazer o código numa unica coluna, se vc fizer em 3 tabelas como eu te mostrei, fica mais flexivel, limpo e rápido.

Att,


Responder

12/10/2004

Felipe_cduarte

Fala Marcus blz ?!?

bom cara , eu tb acho q do jeito que você falou fica melhor ... mas quem paga a gente é o cliente ... vc sabe como são essas coisas ... mas brigado pela ajuda

[]´s


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar