SQL Primeira, Segunda e Terceira Formas Normais
Existem três fontes de anomalias modificação no SQL Estes são definidos como primeira, segunda e terceira formas normais
(1NF, 2NF, 3NF). Estas formas normais agir como remédios para modificação anomalias.Primeira forma normal
Para estar na primeira forma normal (1NF), uma tabela deve ter as seguintes qualidades:
A tabela é bidimensional com linhas e colunas.
Cada linha contém dados que pertencem a alguma coisa ou parte de uma coisa.
Cada coluna contém dados para um único atributo da coisa que está descrevendo.
Cada célula (intersecção de uma linha e uma coluna) da tabela deve ter apenas um único valor.
Entradas em qualquer coluna devem ser todos do mesmo tipo. Se, por exemplo, a entrada de uma linha de uma coluna contém um nome do funcionário, todas as outras linhas devem conter nomes de funcionários nessa coluna, também.
Cada coluna deve ter um nome único.
Não há duas filas podem ser idêntico (isto é, cada fila tem de ser único).
A ordem das colunas ea ordem das linhas não são significativas.
Uma tabela (relação) na primeira forma normal é imune a alguns tipos de anomalias de modificação, mas ainda está sujeita a outros. A tabela de vendas é na primeira forma normal, ea tabela está sujeita a deleção e inserção anomalias. Primeira forma normal pode ser útil em algumas aplicações, mas não confiável em outros.
Segundo forma normal
Para apreciar segunda forma normal, você deve entender a idéia de dependência funcional. UMA dependência funcional é uma relação entre duas ou mais atributos. Um atributo é funcionalmente dependente do outro, se o valor de atributo do segundo determina o valor do primeiro atributo. Se você sabe o valor do segundo atributo, é possível determinar o valor do primeiro atributo.
Suponhamos, por exemplo, uma tabela que tem atributos (colunas) StandardCharge, NumberOfTests, e Carga total que se relacionam por meio da seguinte equação:
TotalCharge = StandardCharge * NumberOfTests
Carga total é funcionalmente dependente tanto StandardCharge e NumberOfTests. Se você souber os valores de StandardCharge e NumberOfTests, você pode determinar o valor de Carga total.
Cada tabela na primeira forma normal deve ter uma chave primária única. Essa chave pode consistir de uma ou mais de uma coluna. Uma chave que consiste em mais do que uma coluna é chamado um chave composta. Para estar na segunda forma normal (2NF), todos os atributos não-chave devem depender da chave inteira. Assim, toda relação que está em 1NF com uma única chave de atributo é automaticamente na segunda forma normal.
Se uma relação tem uma chave composta, todos os atributos não-chave deve depender de todos os componentes da chave. Se você tem uma tabela onde alguns atributos não-chave não dependem de todos os componentes da chave, quebrar a tabela em duas ou mais tabelas de modo a que - em cada uma das novas tabelas - todos os atributos não-chave depender de todos os componentes da chave primária.
Parecer confuso? Olhe para um exemplo para esclarecer o assunto. Considere a tabela SALES. Em vez de gravar apenas uma única compra para cada cliente, você adicionar uma linha cada vez que um cliente compra um item pela primeira vez. Uma diferença adicional é que os clientes charter (aqueles com Identificação do Cliente valores de 1001-1007) obter um desconto sobre o preço normal.
Identificação do Cliente não identifica unicamente uma linha. Em duas linhas, Identificação do Cliente é 1001. Em duas outras linhas, Identificação do Cliente é 1010. A combinação da Identificação do Cliente e a coluna Produto coluna identifica unicamente uma linha. Estas duas colunas, juntos, são uma chave composta.
Se não fosse pelo fato de que alguns clientes beneficiar de um desconto e outros não, a tabela não seria na segunda forma normal, porque Preço (Um atributo não-chave) dependeria apenas de parte da chave (Produto). Porque alguns clientes se qualificam para um desconto, Preço depende tanto Identificação do Cliente e Produto, e a tabela está em segundo formulário normal.
Terceira forma normal
Tabelas em segunda forma normal são especialmente vulneráveis a alguns tipos de anomalias de modificação - em particular, aqueles que vêm de dependências transitivas.
UMA transitivo dependência ocorre quando um atributo depende de um segundo atributo, que depende de um terceiro atributo. Eliminações em uma mesa com uma tal dependência pode causar perda de informações indesejadas. A relação na terceira forma normal é uma relação na segunda forma normal, sem dependências transitivas.
Olhe novamente para a tabela de vendas, o que você sabe que é na primeira forma normal. Contanto que você restringir entradas para permitir que apenas uma linha para cada Identificação do Cliente, você tem uma chave primária de atributo único, e a mesa está na segunda forma normal. No entanto, a tabela ainda está sujeita a anomalias. O que se o cliente 1010 está descontente com a lixívia de cloro, por exemplo, e retorna o item para um reembolso?
Você deseja remover a terceira linha da tabela, que registra o fato de que o cliente comprou 1.010 alvejante. Você tem um problema: Se você remover essa linha, você também perde o fato de que lixívia de cloro tem um preço de US $ 4. Esta situação é um exemplo de uma dependência transitória. Preço depende de Produto, que, por sua vez, depende da chave primária Identificação do Cliente.
Quebrando tabela de vendas em duas tabelas resolve o problema de dependência transitiva. As duas tabelas compõem um banco de dados que está em terceira forma normal.