Como trabalhar com sql: 2011 tabelas de período de tempo de aplicação
Considere um exemplo usando tabelas de tempo do período de aplicação SQL. Suponha que uma empresa quer acompanhar o que departamento de seus funcionários pertencem a qualquer momento durante todo o período de trabalho. O negócio pode fazer isso criando tabelas de período de tempo de aplicação para os funcionários e departamentos:
Conteúdo
- Video: access com vba (cadastro, consulta, relatório)
- Como designar chaves primárias em tabelas de período de tempo de aplicação
- Video: cadastro de cliente ii cadastrar, alterar, excluir e consulta em c#
- Como aplicar restrições de referência para tabelas de período de tempo de aplicação
- Como consultar tabelas de período de tempo de aplicação
CRIAR employee_atpt TABLE (EmpID INTEIRO, EmpStart DATA, EmpEnd DATA, EmpDept VARCHAR (30), o prazo de EmpPeriod (EmpStart, EmpEnd)) -
A data e hora de partida (EmpStart no exemplo) está incluído no período, mas a data e hora de fim (EmpEnd no exemplo) não é. Isto é conhecido como semântica fechou-abertas.
INSERT INTO employee_atptVALUES (12345, data `2011-01-01`, data `9999-12-31`, `Vendas`) -
O quadro resultante tem uma linha, conforme mostrado na Tabela 7-1.
EmpID | EmpStart | EmpEnd | EmpDept |
---|---|---|---|
12345 | 2011-01-01 | 9999-12-31 | Vendas |
A data final de 9999-12-31 indica que a posse deste funcionário com a empresa ainda não acabou.
Agora, suponha que em 15 de março de 2012, empregado 12345 é temporariamente atribuído ao departamento de Engenharia até 15 de julho de 2012, retornando para o departamento de vendas depois. Você pode fazer isso com o seguinte ATUALIZAR declaração:
ATUALIZAÇÃO employee_atptFOR PARTE DO EmpPeriodFROM DATA `2012-03-15`TO DATA` 2012-07-15`SET EmpDept = `Engineering`WHERE EmpID = 12345-
Após a atualização, a tabela tem agora três linhas.
EmpID | EmpStart | EmpEnd | EmpDept |
---|---|---|---|
12345 | 2011-01-01 | 2012-03-15 | Vendas |
12345 | 2012-03-15 | 2012-07-15 | Engenharia |
12345 | 2012-07-15 | 9999-12-31 | Vendas |
Assumindo empregado 12345 ainda é empregado no departamento de vendas, a tabela registra com precisão sua filiação departamento de Dia de Ano Novo de 2011, até o presente momento.
Excluindo dados de uma tabela de período de tempo de aplicação pode ser um pouco mais complicado do que simplesmente apagando registros de, uma tabela nontemporal comum. Como exemplo, suponha que o empregado 12345 deixa a empresa em 15 de Março 2012and é recontratado em 15 de julho do mesmo ano. Inicialmente, a tabela período, o tempo de aplicação terá uma linha.
EmpID | EmpStart | EmpEnd | EmpDept |
---|---|---|---|
12345 | 2011-01-01 | 9999-12-31 | Vendas |
UMA EXCLUIR declaração irá atualizar a tabela para mostrar o período durante o qual 12345 empregado tinha ido embora:
Video: Access Com VBA (Cadastro, Consulta, Relatório)
APAGAR employee_atptFOR PARTE DO EmpPeriodFROM DATA `2012-03-15`TO DATA` 2012-07-15`WHERE EmpID = 12345-
EmpID | EmpStart | EmpEnd | EmpDept |
---|---|---|---|
12345 | 2011-01-01 | 2012-03-15 | Vendas |
12345 | 2012-07-15 | 9999-12-31 | Vendas |
A tabela agora reflete os períodos de tempo durante o qual empregado 12345 foi empregado pela empresa e mostra o fosso durante o qual ela não foi empregado pela empresa.
Uma tabela de período de tempo de aplicação de funcionários pode conter várias linhas para um único empregado. O número de identificação do funcionário, por si só, não é utilizável como chave primária da tabela. Os dados temporais devem ser adicionados à mistura.
Como designar chaves primárias em tabelas de período de tempo de aplicação
Para garantir que não haja duplicação de linhas, a data de início (EmpStart) e data final (EmpEnd) deve ser incluída na chave primária. No entanto, apenas incluí-los não é suficiente. Considere o caso em que o trabalhador 12345 foi transferido para Engenharia por alguns meses, e depois voltou para seu departamento casa.
EmpID | EmpStart | EmpEnd | EmpDept |
---|---|---|---|
12345 | 2011-01-01 | 9999-12-31 | Vendas |
12345 | 2012-03-15 | 2012-07-15 | Engenharia |
Note-se que os dois períodos de tempo sobrepostos. Parece empregado 12345 é membro tanto do departamento de vendas eo departamento de engenharia de 15 de Março de 2012 até 15 de julho de 2012.
Isso adiciona complicação e pode levar à corrupção de dados. Impor uma restrição que diz que um empregado pode ser um membro de apenas um departamento de cada vez é talvez o que a maioria das organizações iria querer fazer. Você pode adicionar uma tal restrição a uma tabela com um ALTERAR A TABELA declaração como a seguinte:
ALTER TABLE employee_atptADD PRIMARY KEY (EmpID, EmpPeriod SEM sobreposições) -
Há uma maneira melhor de fazer as coisas do que criar uma tabela primeiro e adicionando a sua restrição de chave primária depois - em vez disso, você pode incluir a restrição de chave primária no original CRIO declaração. Pode parecer o seguinte:
Video: Cadastro de Cliente II Cadastrar, Alterar, Excluir e Consulta em C#
CREATE TABLE employee_atptEmpID INTEGER NOT NULL, EmpStart DATE NOT NULL, DATA EmpEnd NOT NULL, EmpDept VARCHAR (30), o prazo de EmpPeriod (EmpStart, EmpEnd) CHAVE PRIMÁRIA (EmpID, EmpPeriod SEM sobreposições)) -
Como aplicar restrições de referência para tabelas de período de tempo de aplicação
Qualquer banco de dados que se destina a manter mais do que uma simples lista de itens, provavelmente vai exigir várias tabelas. Se um banco de dados tem várias tabelas, as relações entre as tabelas devem ser definidos, e restrições de integridade referencial deve ser posta em prática.
Você tem uma tabela de período de tempo de aplicação dos funcionários e uma mesa período de tempo de aplicação departamento. Existe uma relação de um-para-muitos entre a tabela de departamento e a tabela de funcionários, porque um departamento pode ter vários funcionários, mas cada funcionário pertence a um e apenas um departamento.
Isso significa que você precisa colocar uma chave estrangeira para a tabela de funcionários que referencia a chave primária da tabela de departamento. Com isto em mente, use a mais completa CRIO declaração, e criar uma tabela departamento:
CRIAR employee_atpt TABLE (EmpID INTEGER NOT NULL, EmpStart DATE NOT NULL, EmpEnd DATE NOT NULL, EmpName VARACHAR (30), EmpDept VARCHAR (30), o prazo de EmpPeriod (EmpStart, EmpEnd) CHAVE PRIMÁRIA (EmpID, EmpPeriod SEM sobreposições) FOREIGN KEY (EmpDept, PERÍODO EmpPeriod) Referências dept_atpt (DEPTID, PERÍODO DeptPeriod)) - CRIAR dept_atpt TABLE (DEPTID VARCHAR (30) NOT NULL, Gerente de VARCHAR (40) NOT NULL, DeptStart DATE NOT NULL, DATA DeptEnd NOT NULL, o prazo de DeptTime ( DeptStart, DeptEnd), PRIMARY KEY (DEPTID, DeptTime SEM sobreposições)) -
Como consultar tabelas de período de tempo de aplicação
Agora, informações detalhadas podem ser recuperadas a partir do banco de dados usando SELECIONAR declarações que fazem uso dos dados temporais.
Uma coisa que você pode querer fazer é listar todas as pessoas que estão atualmente empregados pela organização. Mesmo antes de SQL: 2011, você poderia fazê-lo com uma declaração semelhante ao seguinte:
* SELECT FROM employee_atptWHERE EmpStart lt; = CURRENT_DATE () E EmpEnd gt; DATA ATUAL()-
Com o novo PERÍODO sintaxe, você pode obter o mesmo resultado um pouco mais fácil, como este:
* SELECT FROM employee_atptWHERE EmpPERIOD CONTÉM CURRENT_DATE () -
Você também pode recuperar empregados que foram contratados durante um período de tempo específico, assim:
SELECT * DE employee_atptWHERE EmpPeriod OVERLAPSPERIOD (DATE ( `2012-01-01`), DATE ( `2012/09/16`)) -