segunda-feira, 16 de abril de 2012

Restrições na Tabela Mysql

alter table INFORMACOES_NUT add constraint FK_INFO_PRODUTO foreign key (PROD_ID)
references PRODUTOS (PROD_ID) on delete restrict on update restrict;
Para se criar uma restrição em uma chave estrangeira, primeiro é preciso da coluna de referência, neste cado produto, o nome da chave FK_INFO_PRODUTO, on delete significa o que será feito na deleção, on update significa o que será feito na atualização.
As instruções de On delete e On update são;
RESTRICT, NO ACTION, CASCADE, SET NULL, SET DEFAULT
Vamos conhecer um pouco dos tipos de relacionamentos entre as tabelas, os quais são:
1:1; 1:N e N:M
Os relacionamentos podem também ser opcionais ou obrigatórios.
Vejamos como as instruções se comportam.
RESTRICT: vai restringir a algum conjunto de valores predeterminados.
NO ACTION: caso a condição seja satisfeita, nenhuma ação será executada.
CASCADE: caso uma operação afeta alguma linha, será verificado se essa operação desencadeou uma espécie de 'efeito dominó', ou seja, um efeito cascata: o que alterei em cima, vai alterar em baixo e assim por diante.
SET NULL: torna aquela instância para valores NULL.
SET DEFAULT: vai 'setar' os valores para o valor padrão correspondente. Ex.: valor númerico, o default seria 0; já para um campo do tipo caractere, o valor padrão seria o caractere vazio '' ou string vazia "".





principalmente no tipo de chave que é utilizada, por exemplo:
/*==============================================================*/
/* Table: PRODUTOS */
/*==============================================================*/
create table PRODUTOS
(
PROD_ID int not null AUTO_INCREMENT COMMENT 'Identifica de forma unica o produto',
PROD_NOME char(60) not null COMMENT 'Armazena o nome do produto',
PROD_DESCRICAO text not null COMMENT'Armazena a descricao',
PROD_PESO int not null COMMENT 'Armazena o Peso',
primary key (PROD_ID)
)ENGINE = InnoDB;
/*==============================================================*/
/* Table: UNIDADE */
/*==============================================================*/
create table UNIDADE
(
UNI_ID int not null AUTO_INCREMENT COMMENT 'Identifica de forma unica a unidade',
UNIDADE char(10) not null UNIQUE COMMENT 'Armazena a unidade',
primary key (UNI_ID)
);
/*==============================================================*/
/* Table: PRODUTO_UNIDADE */
/*==============================================================*/
create table PRODUTO_UNIDADE
(
PROD_ID int not null UNIQUE COMMENT 'Armazena o Produto Relacionado',
UNI_ID int not null COMMENT 'Armazena a unidade relacionada',
primary key (PROD_ID, UNI_ID)
);
No exemplo acima a tabela UNIDADE que irá armazenar a unidade de medida de um produto por exemplo o campo Unidade só armazenará valores únicos, por exemplo: grama, ml, kg, etc, não pode ser repetidos deveido a instrução UNIQUE.
Depois ainda há uma alteração na tabela com a inserção de uma chave estrangeira tratando-se de uma relação 1:N devido à restrição construída, cada produto só poderá ter apenas uma unidade de medida, e a unidade de medida poderá se relacionar com vários produtos. Ou seja, produto 1 grama, produto 2 grama, produto 3 ml, e assim por diante.
alter table PRODUTO_UNIDADE add constraint FK_PRODUTO_UNIDADE foreign key (PROD_ID)
references PRODUTOS (PROD_ID) on delete cascade on update cascade;
alter table PRODUTO_UNIDADE add constraint FK_PRODUTO_UNIDADE2 foreign key (UNI_ID)
references UNIDADE (UNI_ID) on delete cascade on update cascade;
As instruções: RESTRICT, NO ACTION, CASCADE, SET NULL e SET DEFAULT, irão dizer o que dever ser feito na relação.
Mas trata-se de uma combinação das chaves, índices, instruções unique, e o tipo de comprotamento das restrições.

Este artigo pode ser baixado em:
http://sdrv.ms/ZsXcb5


Ajude a manter este blog. Clique nos anúncios.