¿Cómo trabajar con sql: 2011 en tiempo de aplicación tablas de época

Considere un ejemplo utilizando tablas de tiempo de SQL aplicación de periodo. Supongamos que una empresa quiere hacer un seguimiento de qué departamento pertenecen a sus empleados en cualquier momento a lo largo de su período de empleo. El negocio puede hacer esto mediante la creación de tablas período de tiempo de aplicación para los empleados y departamentos:

CREAR TABLA employee_atpt (EmpID INTEGER, EmpStart FECHA, EmpEnd FECHA, EmpDept VARCHAR (30), el plazo de EmpPeriod (EmpStart, EmpEnd)) -

La fecha y hora de partida (EmpStart en el ejemplo) se incluye en el período, pero la fecha y hora de finalización (EmpEnd en el ejemplo) no lo es. Esto se conoce como la semántica cerrado abiertos.

INSERT INTO employee_atptVALUES (12345, fecha `2011-01-01`, fecha `9999-12-31`, `Ventas`) -

La tabla resultante tiene una fila, como se muestra en la Tabla 7-1.

Video: Introducción al Analisis Service de SQL Server

EmpIDEmpStartEmpEndEmpDept
123452011-01-019999-12-31Ventas

La fecha de finalización de 9999-12-31 indica que el mandato de este empleado con la empresa no ha terminado todavía.

Supongamos ahora que el 15 de marzo de 2012, empleado 12345 se asigna temporalmente al departamento de ingeniería hasta el 15 de julio de 2012 volver al departamento de ventas a partir de entonces. Esto se puede hacer con la siguiente ACTUALIZAR declaración:

ACTUALIZACIÓN employee_atptFOR PARTE DEL EmpPeriodFROM FECHA `2012-03-15`TO FECHA` 2012-07-15`SET EmpDept = `Engineering`WHERE EmpID = 12345-

Después de la actualización, la mesa ahora tiene tres filas.

EmpIDEmpStartEmpEndEmpDept
123452011-01-012012-03-15Ventas
123452012-03-152012-07-15Ingenieria
123452012-07-159999-12-31Ventas

Suponiendo empleado 12345 sigue trabajando en el departamento de ventas, la tabla registra con precisión su pertenencia departamento desde el primer día del año 2011 de Año Nuevo hasta el momento actual.

Video: Abrir una base de datos ya creada con Sql Server

Eliminación de los datos de una tabla período de tiempo de aplicación puede ser un poco más complicado que simplemente eliminar filas de una mesa ordinaria no temporal. A modo de ejemplo, supongamos que los empleados 12345 deja la compañía en 15 de marzo 2012and es contratado nuevamente el 15 de julio del mismo año. Inicialmente, la tabla período de tiempo de aplicación tendrá una fila.

EmpIDEmpStartEmpEndEmpDept
123452011-01-019999-12-31Ventas

UN BORRAR declaración actualizará la tabla para mostrar el período durante el cual se había ido 12345 empleado:

DELETE employee_atptFOR PARTE DEL EmpPeriodFROM FECHA `2012-03-15`TO FECHA` 2012-07-15`WHERE EmpID = 12345-
EmpIDEmpStartEmpEndEmpDept
123452011-01-012012-03-15Ventas
123452012-07-159999-12-31Ventas

Ahora, la tabla refleja los períodos de tiempo durante el cual los empleados 12345 fue empleado por la empresa y muestra la brecha en la que ella no era empleado de la empresa.

Una tabla período de tiempo de aplicación de los empleados puede contener varias filas de un solo empleado. El número de identificación de empleado, por sí mismo, no se puede utilizar como clave primaria de la tabla. Los datos temporales deben ser añadidos a la mezcla.

Cómo designar las claves primarias de las tablas período de tiempo de aplicación

Para garantizar que no haya duplicación de filas, la fecha de inicio (EmpStart) y la fecha de finalización (EmpEnd) debe ser incluido en la clave principal. Sin embargo, sólo incluirlos no es suficiente. Considere el caso en que los empleados 12345 fue transferido a la Ingeniería durante unos meses, y luego regresó a su departamento de casa.

EmpIDEmpStartEmpEndEmpDept
123452011-01-019999-12-31Ventas
123452012-03-152012-07-15Ingenieria

Observe que los dos períodos de tiempo se superponen. Parece que los empleados 12345 es un miembro tanto del departamento de ventas y el departamento de ingeniería del 15 de marzo de 2012 hasta el 15 de julio de del 2012.

Esto se suma complicación y podría conducir a la corrupción de datos. La aplicación de una restricción que dice que un empleado puede ser un miembro de un único departamento a la vez es quizá lo que la mayoría de las organizaciones querrían hacer. Se puede agregar una restricción tal a una mesa con una ALTER TABLE declaración como la siguiente:

ALTER TABLE employee_atptADD PRIMARY KEY (EmpID, EmpPeriod sin superposiciones) -

Hay una mejor manera de hacer las cosas que la creación de una mesa de primera y la adición de su restricción de clave primaria más tarde - en su lugar, puede incluir la restricción de clave primaria en el original CREAR declaración. Podría ser similar al siguiente:

CREATE TABLE employee_atptEmpID INTEGER NOT NULL, EmpStart FECHA NO NULO, FECHA EmpEnd NO NULO, EmpDept VARCHAR (30), el plazo de EmpPeriod (EmpStart, EmpEnd) PRIMARY KEY (EmpID, EmpPeriod sin superposiciones)) -

Cómo aplicar las restricciones de referencia a las tablas período de tiempo de aplicación

Cualquier base de datos que está destinado a mantener más que una simple lista de artículos probablemente requerirá varias tablas. Si una base de datos tiene varias tablas, las relaciones entre las tablas deben ser definidos, y restricciones de integridad referencial debe ser puesto en su lugar.

Tiene una tabla período de tiempo de aplicación de los empleados y una mesa período de tiempo de aplicación departamento. No es una relación de uno a varios entre la tabla y el departamento de la tabla de empleados, debido a que un departamento puede tener varios empleados, pero cada empleado pertenece a uno y sólo un departamento.

Esto significa que usted necesita para poner una clave externa en la tabla de empleados que hace referencia a la clave primaria de la tabla departamento. Con esto en mente, utilice una más completa CREAR declaración, y crear una mesa de departamento:

CREAR employee_atpt TABLA EmpID INTEGER NOT NULL, EmpStart FECHA NO NULO, FECHA EmpEnd NO NULO, EmpName VARACHAR (30), EmpDept VARCHAR (30), el plazo de EmpPeriod (EmpStart, EmpEnd) PRIMARY KEY (EmpID, EmpPeriod sin superposiciones) CLAVE (EXTERIOR (EmpDept, PERIODO EmpPeriod) Referencias dept_atpt (DeptID, PERIODO DeptPeriod)) - CREAR dept_atpt TABLA (DeptID VARCHAR (30) NOT NULL, Gerente VARCHAR (40) NOT NULL, DeptStart FECHA NO NULO, DeptEnd FECHA NO NULO, PERIODO DE DeptTime ( DeptStart, DeptEnd), PRIMARY KEY (DeptID, DeptTime sin superposiciones)) -

Cómo consultar tablas período de tiempo de aplicación

Ahora, la información detallada se puede recuperar de la base de datos mediante el uso de SELECCIONAR declaraciones que hacen uso de los datos temporales.

Una cosa que usted puede querer hacer es hacer una lista de todas las personas que están empleadas actualmente por la organización. Incluso antes de SQL: 2011, usted podría hacerlo con una declaración similar a la siguiente:

* SELECT employee_atptWHERE EmpStart lt; = CURRENT_DATE () y EmpEnd gt; FECHA ACTUAL()-

Con el nuevo PERÍODO la sintaxis, se puede obtener el mismo resultado un poco más fácil, así:

Video: Base de Datos - Conexión a Sql Server | Desarrollo con Java #30

* SELECT employee_atptWHERE EmpPERIOD CONTIENE CURRENT_DATE () -

También puede recuperar los empleados que fueron empleados durante un período específico de tiempo, así:

SELECT * FROM employee_atptWHERE EmpPeriod OVERLAPSPERIOD (FECHA ( `2012-01-01`), FECHA ( `09/16/2012`)) -
Artículos Relacionados