Estou com uma dúvida de iniciante sobre modelagem. Por exemplo, eu tenho uma classe chamada Carro e uma chamada Vaga. Um carro ocupa uma vaga em um determinado espaço de tempo (em dias). Eu quero saber em que vaga um carro estava em um determinado período. Mas um mesmo carro pode usar uma vaga por 2 dias e depois usar outra vaga por mais 5 dias. Como eu relaciono essas duas classes? Devo criar uma classe chamada Período para armazenar essas relações? Como isso ficaria nas tabelas, por exemplo? :?:
Modelagem de classe Java
3 Respostas
Bom, acho que poderia ser algo assim mesmo:
public class Vaga
{
// atributos
}
public class Carro
{
// atributos
private Set<Ocupacao> ocupacao;
}
public class Ocupacao
{
private Carro carro;
private Vaga vaga;
private Date inicio;
private Date fim;
}
Dessa forma um Carro pode ocupar quantas vagas ele quiser… as restrições de tempo vc implementaria em um método na classe Carro, para evitar que o Carro ocupe 2 vagas ao mesmo tempo, se esse for o caso.
No banco, vc teria:
CREATE TABLE carro
(
id integer NOT NULL,
// atributos
CONSTRAINT areainteresse_pkey PRIMARY KEY (id)
) ;
CREATE TABLE vaga
(
id integer NOT NULL,
// atributos
CONSTRAINT areainteresse_pkey PRIMARY KEY (id)
) ;
CREATE TABLE ocupacao
(
id integer NOT NULL,
idcarro integer NOT NULL,
idvaga integer NOT NULL,
inicio date NOT NULL,
fim date NOT NULL,
CONSTRAINT ocupacao_pkey PRIMARY KEY (id)
);
Então, foi como eu disse… esse modelo serve para um carro ocupando apenas uma vaga por vez.
Se vc quiser saber pelo objeto quais são os carros que estão ocupando uma vaga, é so colocar a lista de carros na classe Vaga.
Note que eu nao coloquei na tabela ocupacao uma chave composta, ja que um Carro deveria poder ocupar a mesma vaga mais de uma vez.
VLW
Bom, acho que poderia ser algo assim mesmo:public class Vaga { // atributos } public class Carro { // atributos private Set<Ocupacao> ocupacao; } public class Ocupacao { private Carro carro; private Vaga vaga; private Date inicio; private Date fim; }Dessa forma um Carro pode ocupar quantas vagas ele quiser… as restrições de tempo vc implementaria em um método na classe Carro, para evitar que o Carro ocupe 2 vagas ao mesmo tempo, se esse for o caso.
No banco, vc teria:
CREATE TABLE carro ( id integer NOT NULL, // atributos CONSTRAINT areainteresse_pkey PRIMARY KEY (id) ) ;CREATE TABLE vaga ( id integer NOT NULL, // atributos CONSTRAINT areainteresse_pkey PRIMARY KEY (id) ) ;CREATE TABLE ocupacao ( id integer NOT NULL, idcarro integer NOT NULL, idvaga integer NOT NULL, inicio date NOT NULL, fim date NOT NULL, CONSTRAINT ocupacao_pkey PRIMARY KEY (id) );Então, foi como eu disse… esse modelo serve para um carro ocupando apenas uma vaga por vez.
Se vc quiser saber pelo objeto quais são os carros que estão ocupando uma vaga, é so colocar a lista de carros na classe Vaga.
Note que eu nao coloquei na tabela ocupacao uma chave composta, ja que um Carro deveria poder ocupar a mesma vaga mais de uma vez.
VLW
os codigos SQL coloca entre code tb! 
Uma outra sugestão para expressar seu modelo, baseada na implementação do colega baison, seria:public class Vaga { // atributos } public class Carro { // atributos private Set<Ocupacao> ocupacao; } public class Ocupacao { private Carro carro; private Vaga vaga; private Date inicio; private Date fim; }
public class Vaga {
// Uma vaga, em um determinado momento, pode ou não possuir um carro
private Carro carroEstacionado;
}
public class Carro {
private Set<Ocupacao> historico;
}
public class Ocupacao {
// O carro correspondente a esta ocupação pode ser obtido através do objeto vaga
private Vaga vaga;
// Substituindo Date por Calendar
private Calendar inicio;
private Calendar fim;
}