Galera… para os que manjam bem de DB…
Estou usando o bando de dados Firebird e Hibernate para controle entre DB e Aplicaçao…
Na propria documentaçao do Hibernate não recomenda o uso de chaves compostas, mais isso n signica que n funcione…
Como seria melhor uso para mapeamento e criaçao de tabelas que precisam de dados de outras tabelas:
- Criando chave composta (Na TABELA INGERDIENTE) , por exemplo:
CREATE TABLE UNIDADE(
ID_UNIDADE Integer NOT NULL,
DESCRICAO Varchar(45) NOT NULL,
SIGLA_UNIDADE Varchar(20) NOT NULL,
PRIMARY KEY (ID_UNIDADE)
);
CREATE TABLE INGREDIENTE(
ID_INGREDIENTE Integer NOT NULL,
ID_UNIDADE Integer NOT NULL,
DESCRICAO Varchar(45) NOT NULL,
QUANT_ESTOQUE Numeric(15,2) NOT NULL,
QUANT_SAIDA Numeric(15,2) NOT NULL,
[b]PRIMARY KEY (ID_INGREDIENTE, ID_UNIDADE)[/b]
);
ALTER TABLE INGREDIENTE ADD CONSTRAINT FK_INGREDIENTE_1
FOREIGN KEY (ID_UNIDADE) REFERENCES UNIDADE (ID_UNIDADE) ON UPDATE NO ACTION ON DELETE NO ACTION;
OU Apenas criando uma foreign key, como mostrado abaixo…
CREATE TABLE UNIDADE(
ID_UNIDADE Integer NOT NULL,
DESCRICAO Varchar(45) NOT NULL,
SIGLA_UNIDADE Varchar(20) NOT NULL,
PRIMARY KEY (ID_UNIDADE)
);
CREATE TABLE INGREDIENTE(
ID_INGREDIENTE Integer NOT NULL,
ID_UNIDADE Integer NOT NULL,
DESCRICAO Varchar(45) NOT NULL,
QUANT_ESTOQUE Numeric(15,2) NOT NULL,
QUANT_SAIDA Numeric(15,2) NOT NULL,
[b]PRIMARY KEY (ID_INGREDIENTE)[/b]
);
ALTER TABLE INGREDIENTE ADD CONSTRAINT FK_INGREDIENTE_1
FOREIGN KEY (ID_UNIDADE) REFERENCES UNIDADE (ID_UNIDADE) ON UPDATE NO ACTION ON DELETE NO ACTION;
Qual das formas seria melhor para trabalhar, levando em conta mapeamentos com Hibernate.
Abraços…