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? :?:
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
[quote=baison]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[/quote]
os codigos SQL coloca entre code tb!
[quote=baison][code]
public class Vaga
{
// atributos
}
public class Carro
{
// atributos
private Set ocupacao;
}
public class Ocupacao
{
private Carro carro;
private Vaga vaga;
private Date inicio;
private Date fim;
}
[/code][/quote]
Uma outra sugestão para expressar seu modelo, baseada na implementação do colega baison, seria:
[code]
public class Vaga {
// Uma vaga, em um determinado momento, pode ou não possuir um carro
private Carro carroEstacionado;
}
public class Carro {
private Set 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;
}
[/code]Quanto ao histórico de ocupações ( modelado aqui pelo atributo historico ), é preciso verificar nas especificações se você deseja saber o histórico de um Carro ou de uma Vaga. Dependendo da resposta a essa questão, o atributo fica na classe Carro ( conforme acima ) ou na classe Vaga.