sql >> Base de Datos >  >> RDS >> Access

El proyecto de base de datos de peluquería

Actualizado:22 de enero de 2018 por Richard Holowczak

Los siguientes materiales documentan el diseño y desarrollo de una aplicación de base de datos para apoyar a una pequeña peluquería. El proyecto comienza con una descripción del negocio y continúa con el modelado conceptual (E-R), el modelado lógico (relacional), el modelado físico y finalmente la implementación de una aplicación de base de datos. Se proporcionan notas (Comentario) al final de cada sección para explicar algunas características específicas de los pasos que se llevan a cabo.

Índice

Yo. Escenario Empresarial
II. Modelo ER usando Notación UML
III. Conversión a Modelo Relacional
IV. Normalización
V. Creando el Esquema de la Base de Datos con SQL
VI. Aplicación de Base de Datos
VII. Conclusiones

.

Yo. Escenario empresarial

Nuestra empresa ha sido propietaria y operadora de un salón de peluquería y manicura en el centro de Manhattan durante 7 años. Hemos estado usando hojas de cálculo y un libro de registro en papel para realizar un seguimiento de los clientes, las citas y los pagos. Nos gustaría reemplazar este método manual de seguimiento del negocio con una base de datos.

En nuestro negocio, los Clientes programan Citas con su peluquero favorito (personas que cortan y peinan el cabello de los clientes) u otro empleado y pueden disfrutar de una serie de Servicios, como corte/peinado básico, coloración del cabello, mechas, permanente, tratamientos faciales, manicura, pedicura, etc. Necesitamos hacer un seguimiento de los materiales (champú, tinte para el cabello) y el tiempo que tomará completar cada servicio. Si bien cada servicio tiene un precio estándar, las promociones y otros factores pueden afectar el precio real otorgado al Cliente por el servicio dado.

También necesitamos realizar un seguimiento de nuestros Empleados, incluida su dirección particular, información de contacto y tasa de pago. Necesitamos realizar un seguimiento de la información de contacto de cada Cliente, así como de su género. Para las citas, necesitamos saber la fecha y la hora de la cita y para qué cliente es la cita.

Comentario

Con base en la descripción anterior, construya un modelo de relación de entidad utilizando la notación UML que capturará todas las necesidades de datos de la empresa.

II. Modelo ER usando notación UML

Con base en la descripción anterior, desarrollamos el siguiente modelo de relación de entidad utilizando la notación UML.

Comentario

Lo que nos gusta de este modelo:

  • Todas las líneas de relación van en posición horizontal o vertical. No se cruzan líneas.
  • Los nombres de los atributos se escriben sin espacios en los nombres. No se utilizan abreviaturas.
  • Cada relación tiene dos frases a partir de las cuales podemos hacer oraciones de relación (ver la siguiente sección).
  • El diagrama también tiene una "leyenda" en la esquina superior derecha para que podamos saber qué representa el diagrama y quién lo modificó por última vez.

Oraciones de relación

Un cliente puede ser hacer una o más Citas

Una Cita debe ser una reserva para uno y solo un Cliente

Un servicio de salón puede ser un servicio prestado como uno o más ServiceRendered

Un ServicioRenderizado debe ser una representación de uno y solo un SalonService

Un empleado puede ser representación uno o más ServiceRendered

Un ServicioRenderizado debe ser prestado por uno y solo un Empleado
 

Una Cita puede ser una reserva para proporcionar uno o más ServiceRendered

Un ServicioRenderizado debe ser un servicio específico prestado durante una y sólo una Cita

Comentario

Las oraciones de relación deben tener sentido. En este ejemplo, las frases verbales están subrayadas. Los nombres de las entidades están en negrita. La cardinalidad mínima (puede ser para 0 y debe ser para 1) se escriben en cursiva. La cardinalidad máxima se escribe como "uno o más" para * y "uno y solo uno" para 1.

Con el modelo ER finalizado, pasamos al siguiente paso:convertir el modelo ER conceptual en un modelo relacional lógico.

III. Conversión a Modelo Relacional

El siguiente paso es convertir el diagrama de relación de entidad en un modelo relacional. Durante este paso, los Identificadores en las Entidades se convierten en Claves en las Relaciones. Las relaciones uno a muchos dan como resultado que se copie una clave externa del lado uno al lado muchos de la relación.

Cliente (ID de cliente (clave), nombre, apellido, número de teléfono, calle, ciudad, estado, código postal)

Servicio de salón ( ServiceID (clave), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials )

Empleado (Id. de empleado (clave), Nombre, Apellido, Calle, Ciudad, Estado, Código postal, Tasa de pago)

Cita ( ID de cita (clave), fecha de cita, hora de cita, ID de cliente (fk) )

Servicio prestado ( Id. de cita (fk)(clave), Número de línea de artículo(clave), Id. de servicio (fk), Precio extendido del servicio, Id. de empleado(fk))

Este es el "conjunto inicial de relaciones".

Comentario

  • Observe que ServiceRendered La entidad del modelo ER depende de la ID, lo que significa que necesita un atributo además de LineItemNumber para formar una clave compuesta.
  • Las claves se muestran con la designación (clave) y las claves externas se muestran con la designación (fk).

El siguiente paso es normalizar el conjunto inicial de relaciones.

IV. Normalización

El siguiente paso es Normalizar las Relaciones.

Los pasos a seguir para cada relación son:

  1. Escriba la relación, incluidos todos los nombres de atributos. Indicar claves y claves foráneas.
  2. Proporcione algunos datos de muestra para la relación.
  3. Indique la Clave para la relación y anote todas las Dependencias funcionales .
  4. Revise las definiciones de cada forma normal comenzando con 1NF y subiendo hasta BCNF (o 3NF dependiendo de los requisitos de su proyecto).
  5. Si una relación cumple con la definición de una forma normal, avance a la siguiente forma normal superior.
  6. Si una relación no cumple con la definición de una forma normal (por ejemplo, contiene una dependencia de clave parcial o contiene una dependencia transitiva), divida la relación en dos nuevas relaciones.
    Comience el proceso de normalización desde el principio con cada una de estas dos nuevas relaciones.

Relación con el Cliente

Cliente (ID del cliente (clave), Nombre, Apellido, Teléfono del cliente, Calle, Ciudad, Estado, Código postal, Sexo)

Datos de muestra

ID de cliente Nombre Apellido Número de teléfono Calle Ciudad Estado Código postal Género
C101 Elia Fawcett 201-222-2222 8989 Smith Rd Garfield Nueva Jersey 07026 F
C102 Ishwarya Roberto 201-222-3333 65 Esperanza Rd Garfield Nueva Jersey 07026 M
C103 Federico Fawcett 201-222-2222 8989 Smith Rd Garfield Nueva Jersey 07026 M
C104 Goldie Montaje 201-222-4321 5235 Ironwood Ln Garfield Nueva Jersey 07026 F
C105 Dheeraj Alejandro 201-222-4545 666 Avenida 22 Bergenfield Nueva Jersey 07621 M
C106 Josie Davis 201-333-6789 4200 Bluejay Avenue Bergenfield Nueva Jersey 07621 F
C107 Faye Glenn 201-333-4242 Calle principal 1522 Parque del acantilado Nueva Jersey 07010 F
C108 Lauren Hershey 201-444-1313 2360 Maxon Rd Englewood Nueva Jersey 07631 F

Clave:ID de cliente

FD1:CustomerID -> Nombre, Apellido, Número de teléfono, Calle, Ciudad, Estado, Código postal, Género

FD2:Código Postal -> Ciudad, Estado

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Existe una dependencia transitiva:CustomerID -> ZipCode y ZipCode -> Ciudad, Estado

Solución:dividir la relación del cliente en dos nuevas relaciones denominadas CustomerData y ZipCodes:

CustomerData (CustomerID (key), FirstName, LastName, CustPhone, Street, ZipCode (fk), Gender )

Clave:ID de cliente

FD1:CustomerID -> Nombre, Apellido, Número de teléfono, Calle, Código postal (fk), Género

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Sin dependencias transitivas

BCNF:Todos los determinantes son claves candidatas

ZipCodes( ZipCode (clave), Ciudad, Estado)

Clave:código postal

FD1:Código Postal -> Ciudad, Estado

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Sin dependencias transitivas

BCNF:Todos los determinantes son claves candidatas

Relación de servicio de salón

Servicio de salón ( ID de servicio (clave), Nombre de servicio, Duración de servicio, Precio de servicio, Materiales de servicio )

Datos de muestra:

ID de servicio Duración del servicio Precio del servicio Materiales de servicio
SV101 Corte de pelo para hombres 20 22.00 Ninguno
SV102 Corte de pelo de mujer 30 32,00 Ninguno
SV103 Corte de pelo infantil 20 15.00 Ninguno
SV104 Color de pelo de mujer 60 76,00 Color, Reactivo, Guantes, Pincel de reactivo, Lámina
SV105 Peinado de mujer 45 56,00 Champú, Acondicionador
SV106 Peinado de hombre 45 46,00 Champú, Acondicionador

Clave:Id. de servicio

FD1:ServiceID -> ServiceName, ServiceDuration, ServicePrice, ServiceMaterials

1NF:ServiceMaterials puede tratarse como un atributo de varios valores. En este caso SalonService no está en 1NF.

Solución:dividir ServiceMaterials en una relación separada.

Sin embargo, para este ejemplo mantendremos ServiceMaterials como un atributo de la relación SalonService.

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Sin dependencias transitivas

BCNF:Todos los determinantes son claves candidatas

Relación con el empleado

Empleado(Id. de empleado (clave), Nombre, Apellido, Calle, Ciudad, Estado, Código postal, Tasa de pago)

Id. de empleado Nombre Apellido Calle Ciudad Estado Código postal Tarifa de pago
E300 Alegría Aveda Avenida Easton 46 Garfield Nueva Jersey 07026 18.00
E400 Geraldo Geraldo 12 Fortis Boulevard. Apto. 2A Garfield Nueva Jersey 07026 22.00
E500 Koy Petruzzio Calle Wilard 70 Garfield Nueva Jersey 07026 20.00
E600 Landry Monroe 73 Terraza de acebo Parque del acantilado Nueva Jersey 07010 18.00
E700 Pat Reese Lugar de Lincoln 2 Parque del acantilado Nueva Jersey 07010 23.00
E800 Invierno Tanner 215 Elm Ave cuello de té Nueva Jersey 07665 23.00

Clave:ID de empleado

FD1:Id. de empleado -> Nombre, Apellido, Calle, Ciudad, Estado, Código postal, Tasa de pago

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Existe una dependencia transitiva:Id. de empleado -> Código postal y Código postal -> Ciudad, Estado

Solución:dividir la relación del cliente en dos nuevas relaciones denominadas EmployeeData y ZipCodes:

EmployeeData(EmployeeID (key), FirstName, LastName, Street, ZipCode (fk), PayRate )

Clave:ID de empleado

FD1:Id. de empleado -> Nombre, Apellido, Calle, Código postal (fk), Tarifa de pago

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Sin dependencias transitivas

BCNF:Todos los determinantes son claves candidatas

Nota:Ya tenemos una relación ZipCodes de cuando se dividió la relación Cliente. Así que reutilizamos esa relación ZipCodes. No es necesario crear una segunda relación ZipCodes.

Relación de la cita

Cita ( ID de cita (clave), Fecha de cita, Hora de cita, ID de cliente (fk) )

Datos de muestra:

ID de cita Fecha de la cita Hora de la cita ID de cliente
A400 22/10/2017 11:00:00 a.m. C101
A401 6/11/2017 12:45:00 p. m. C102
A402 7/12/2017 14:00:00 C106
A403 18/12/2017 15:30:00 C106
A404 21/12/2017 11:30:00 a.m. C108
A405 31/12/2017 10:00:00 a.m. C107
A406 1/11/2018 15:15:00 C103
A407 1/12/2018 14:30:00 C104
A408 22/1/2018 4:00:00 p. m. C105

Clave:ID de cita

FD1:Id. de cita -> Fecha de cita, Hora de cita, Id. de cliente (fk)

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Sin dependencias transitivas

BCNF:Todos los determinantes son claves candidatas

Relación prestada por el servicio

ServiceRendered (Id. de cita (fk)(clave), Número de línea de artículo(clave), Id. de servicio (fk), Precio extendido del servicio, Id. de empleado(fk) )

Datos de muestra:

ID de cita Número de elemento de línea ID de servicio Precio AmpliadoServicio ID de empleado
A400 1 SV104 75,00 E400
A400 2 SV102 25,00 E400
A401 1 SV101 22.00 E500
A402 1 SV104 75,00 E600
A402 2 SV102 30,00 E800
A403 1 SV105 50,00 E300
A404 1 SV105 55,00 E300
A405 1 SV102 30,00 E700
A405 2 SV104 70,00 E700
A405 3 SV105 50,00 E700

Clave:Id. de cita, Número de elemento de línea

FD1:Id. de cita, Número de elemento de línea -> Id. de servicio (fk), ServiceExtendedPrice, Id. de empleado(fk)

1NF:Cumple con la definición de una relación

2NF:Sin dependencias clave parciales

3NF:Sin dependencias transitivas

BCNF:Todos los determinantes son claves candidatas

Conjunto final de relaciones

Cliente (ID de cliente (clave), nombre, apellido, número de teléfono, calle, código postal (fk), género)

Códigos postales ( Código Postal (clave), Ciudad, Estado)

Servicio de salón ( ServiceID (clave), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials )

Empleado (Id. de empleado (clave), Nombre, Apellido, Calle, Código postal (fk), Tarifa de pago)

Cita ( ID de cita (clave), fecha de cita, hora de cita, ID de cliente (fk) )

Servicio prestado ( Id. de cita (fk)(clave), Número de línea de artículo(clave), Id. de servicio (fk), Precio extendido del servicio, Id. de empleado(fk))

Comentario

  • Tenga en cuenta que solo se requiere una relación ZipCodes. Se comparte con las relaciones Cliente y Empleado.
  • Como se señaló anteriormente, el atributo ServiceMaterials no se ha normalizado en este ejemplo. Tal vez se pueda hacer en una futura asignación o mejora del modelo.

Ahora que las relaciones están normalizadas, el esquema se puede crear en un sistema de gestión de base de datos utilizando lenguaje de consulta estructurado (SQL).

V. Creación del esquema de base de datos con lenguaje de consulta estructurado

Cree una tabla en la base de datos para cada una de las relaciones en el conjunto final de relaciones.

El siguiente código SQL crea las seis tablas y agrega la restricción PRIMARY KEY a cada una:

CREATE TABLE ZipCodes( zipcode VARCHAR(12) NOT NULL, city VARCHAR(36), state VARCHAR(4), CONSTRAINT pk_zipcodes PRIMARY KEY (zipcode))CREATE TABLE Customer( CustomerID VARCHAR(10) NOT NULL, FirstName VARCHAR( 35), apellido VARCHAR(35), número de teléfono VARCHAR(15), calle VARCHAR(35), código postal VARCHAR(12), género VARCHAR(2), CONSTRAINT pk_customer CLAVE PRINCIPAL (ID de cliente)) CREAR TABLA Cita (ID de cita VARCHAR (10) NOT NULL, AppointmentDateTime DATE, CustomerID VARCHAR(10) NOT NULL, CONSTRAINT pk_appointment PRIMARY KEY (AppointmentID))CREATE TABLE SalonService( ServiceID VARCHAR(10) NOT NULL, ServiceName VARCHAR(35), ServiceDuration INTEGER, ServicePrice NUMBER, ServiceMaterials VARCHAR(255) ), RESTRICCIÓN pk_salonservice CLAVE PRINCIPAL (ID de servicio)) CREAR TABLA Empleado (ID de empleado VARCHAR (10) NOT N ULL, FirstName VARCHAR(35), LastName VARCHAR(25), Street VARCHAR(45), ZipCode VARCHAR(12), PayRate NUMBER, CONSTRAINT pk_employee PRIMARY KEY (EmployeeID))CREATE TABLE ServiceRendered (ID de cita VARCHAR(10) NOT NULL, LineItemNumber INTEGER NOT NULL, ServiceID VARCHAR(10) NOT NULL, ServiceExtendedPrice NUMBER, EmployeeID VARCHAR(10) NOT NULL, CONSTRAINT pk_ServiceRendered PRIMARY KEY (AppointmentID, LineItemNumber))

Agregar claves foráneas

Los siguientes códigos SQL agregan restricciones FOREIGN KEY para vincular las tablas:

ALTER TABLE Cliente ADD CONSTRAINT fk_customer_zipcodes FOREIGN KEY (ZipCode) REFERENCES ZipCodes (ZipCode)ALTER TABLE Empleado ADD CONSTRAINT fk_employee_zipcodes FOREIGN KEY (ZipCode) REFERENCES ZipCodes (ZipCode)ALTER TABLE Cita ADD CONSTRAINT fk_customer_appointment FOREIGN KEY (CustomerID) REFERENCE )ALTER TABLE ServiceRendered ADD CONSTRAINT fk_ServiceRendered_Service FOREIGN KEY (ServiceID) REFERENCIAS SalonService (ServiceID)ALTER TABLE ServiceRendered ADD CONSTRAINT fk_ServiceRendered_Employee FOREIGN KEY (EmployeeID) REFERENCIAS Empleado (EmployeeID)ALTER TABLE ServiceRendered ADD CONSTRAINT fk_ServiceRendered_Appointment FOREIGN KEY) (REFERENCIAS DE CITA) /pre> 

Comentario sobre SQL:

  • La mayoría de los DBMS almacenarán la FECHA y la HORA en la misma columna. Por lo tanto, Fecha de cita y Hora de cita se combinaron en una columna en la base de datos denominada Fecha y hora de cita.
  • Las claves y las claves foráneas deben tener exactamente el mismo nombre y tipo de datos. Por ejemplo, Key CustomerID es VARCHAR(10) en la tabla Cliente y también VARCHAR(10) en la tabla Cita.
  • A las restricciones se les dan nombres significativos como pk_customer para una clave principal y fk_customer_zipcodes para una clave externa.
  • Las columnas como Número de teléfono y Código postal deben usar el tipo de datos VARCHAR. Si se utiliza un tipo de datos NÚMERO o INTEGER, faltarán los ceros iniciales.

Después de crear las tablas y agregar las restricciones de clave externa, el esquema de la base de datos ahora tiene el siguiente aspecto:

Vista de relaciones

Usando la Vista de relaciones en Herramientas de base de datos, podemos ver las relaciones (claves foráneas) entre las tablas:

Agregar datos a las tablas usando sentencias SQL INSERT

INSERTAR EN LOS VALORES DE ZipCodes ('07026', 'Garfield', 'NJ');INSERTAR EN LOS VALORES DE ZipCodes ('07621', 'Bergenfield', 'NJ');INSERTAR EN LOS VALORES DE ZipCodes ('07010', 'Cliffside Park', 'NJ'); INSERTAR EN VALORES de códigos postales ('07631', 'Englewood', 'NJ'); INSERTAR EN VALORES de códigos postales ('07665', 'Teaneck', 'NJ'); INSERTAR EN VALORES de clientes (' C101', 'Elia', 'Fawcett', '201-222-2222', '8989 Smith Rd', '07026', 'F'); INSERTAR EN VALORES del cliente ('C102', 'Ishwarya', 'Roberts' , '201-222-3333', '65 Hope Rd', '07026', 'M'); INSERTAR EN VALORES del cliente ('C103', 'Frederic', 'Fawcett', '201-222-2222', ' 8989 Smith Rd', '07026', 'M');INSERTAR EN LOS VALORES DEL CLIENTE ('C104', 'Goldie', 'Montand', '201-222-4321', '5235 Ironwood Ln', '07026', ' F');INSERTAR EN LOS VALORES DEL CLIENTE ('C105', 'Dheeraj', 'Alexander', '201-222-4545', '666 22nd Ave', '07621', 'M');INSERTAR EN LOS VALORES DEL CLIENTE (' C106', 'Josie', 'Davis', '201-333-6789', '4200 Bluejay Ave', '07621', 'F'); INSERTAR EN VALORES DEL CLIENTE ('C107', 'Faye', 'Glenn' , '201-333-4242', '1 522 Main St', '07010', 'F'); INSERTAR EN LOS VALORES DEL CLIENTE ('C108', 'Lauren', 'Hershey', '201-444-1313', '2360 Maxon Rd', '07631', ' F'); INSERTAR EN VALORES de SalonService ('SV101', 'Corte de cabello para hombres', 20, 22, 'Ninguno'); INSERTAR EN VALORES de SalonService ('SV102', 'Corte de cabello para mujeres', 30, 32 , 'Ninguno'); INSERTAR EN LOS VALORES de SalonService ('SV103', 'Corte de pelo para niños', 20, 15, 'Ninguno'); INSERTAR EN LOS VALORES de SalonService ('SV104', 'Color de cabello de mujer', 60, 76 , 'Color, Reactivo, Guantes, Cepillo de reactivo, Lámina'); INSERTAR EN LOS VALORES de SalonService ('SV105', 'Peinado de mujer', 45, 56, 'Champú, Acondicionador'); INSERTAR EN LOS VALORES de SalonService (' SV106', 'Men's Hair Style', 45, 46, 'Shampoo, Conditioner'); INSERTAR EN VALORES de empleados ('E300', 'Joy', 'Aveda', '46 Easton Ave.', '07026' , 18);INSERTAR EN VALORES de empleados ('E400', 'Geraldo', 'Geraldo', '12 Fortis Blvd. Apto. 2A', '07026', 22);INSERTAR EN VALORES de empleados ('E500', 'Koy', 'Petruzzio', '70 Wilard St. ', '07026', 20);INSERTAR EN VALORES de empleados ('E600', 'Landry', 'Monroe', '73 Holly Terrace', '07010', 18); INSERTAR EN VALORES de empleados ('E700', 'Pat', 'Reese', '2 Lincoln Place', '07010', 23);INSERTAR EN VALORES de empleados ('E800', 'Winter', 'Tanner', '215 Elm Ave', '07665', 23);INSERTAR EN VALORES de citas ('A400', '22/10/2017 11:00:00 AM', 'C101'); INSERTAR EN VALORES de cita ('A401', '11/06/2017 12:45:00 PM', 'C102'); INSERTAR EN VALORES de cita ('A402', '12/07 /2017 02:00:00 p. m.', 'C106'); INSERTAR EN VALORES de citas ('A403', '18/12/2017 03:30:00 p. m.', 'C106'); INSERTAR EN VALORES de citas ('A404 ', '21/12/2017 11:30:00 a. m.', 'C108'); INSERTAR EN VALORES de citas ('A405', '31/12/2017 10:00:00 a. m.', 'C107'); INSERTAR EN VALORES de citas ('A406', '11/01/2018 03:15:00 p. m.', 'C103'); INSERTAR EN VALORES de citas ('A407', '12/01/2018 02:30:00 p. 'C104'); INSERTAR EN VALORES de cita ('A408', '0 22/1/2018 04:00:00 p. , 'SV102', 25, 'E400'); INSERTAR EN VALORES prestados por el servicio ('A401', 1, 'SV101', 22, 'E500'); INSERTAR EN VALORES prestados por el servicio ('A402', 1, 'SV104', 75 , 'E600'); INSERTAR EN VALORES prestados por el servicio ('A402', 2, 'SV102', 30, 'E800'); INSERTAR EN VALORES prestados por el servicio ('A403', 1, 'SV105', 50, 'E300'); INSERTAR EN LOS VALORES ServiceRendered ('A404', 1, 'SV105', 55, 'E300');INSERTAR EN LOS VALORES ServiceRendered ('A405', 1, 'SV102', 30, 'E700');INSERTAR EN LOS VALORES ServiceRendered (' A405', 2, 'SV104', 70, 'E700');INSERTAR EN VALORES prestados por el servicio ('A405', 3, 'SV105', 50, 'E700');

Comentario sobre muestras de datos

  • Añadimos los datos suficientes para poder probar las relaciones entre las tablas y dar a los desarrolladores de aplicaciones algo con lo que trabajar.
  • Tenga cuidado con el orden en que se agregan los datos. Por ejemplo, todos los códigos postales deben insertarse primero, antes de que se pueda insertar el cliente o el empleado (que usan el código postal como clave externa).
  • Al agregar datos VARCHAR con comillas incrustadas, use dos comillas juntas. p. ej., 'Peinado de mujer'
  • En este punto, el esquema de la base de datos está listo para que los desarrolladores de aplicaciones comiencen a diseñar formularios, informes y consultas.

Ahora que se ha creado el esquema de la base de datos y se ha completado con algunos datos de muestra, se puede desarrollar la aplicación de la base de datos.

VI. Aplicación de base de datos

La aplicación de la base de datos consta de un conjunto de formularios, informes y consultas que están vinculados en un formulario de navegación.

El formulario de navegación es el primer formulario que aparece cuando se abre la base de datos.

Formulario de navegación

Se pueden mostrar diferentes formularios de entrada de datos e informes haciendo clic en la selección en el lado izquierdo.

Formulario de entrada de datos del cliente

El formulario de Entrada de datos del cliente se utiliza para buscar clientes existentes y para ingresar información de nuevos clientes. Los campos Ciudad y Estado se completan automáticamente al seleccionar un código postal en el cuadro combinado. El formulario tiene varios códigos VBA personalizados para convertir el nombre y el apellido en mayúsculas y minúsculas y para generar una nueva ID de cliente única cuando aparece un campo de ID de cliente vacío. después de crear un nuevo registro.

Formulario de ingreso de datos de servicios de salón

El formulario de entrada de datos de servicios de salón se utiliza para consultar, actualizar y agregar nuevos servicios de salón.

Formulario de ingreso de datos de citas

El formulario de Entrada de datos de citas se utiliza para crear una nueva cita para un cliente. Al igual que con el formulario de Cliente, se puede crear una nueva ID de cita haciendo clic en un campo de ID de cita en blanco después de crear un nuevo registro. El cliente se puede seleccionar desde el cuadro combinado ID de cliente como se muestra a continuación:

Si se trata de un nuevo Cliente que solicita una cita, el usuario puede hacer clic en el botón Nuevo Cliente para que aparezca el formulario de Entrada de Datos del Cliente. Después de guardar la información del nuevo cliente, el usuario puede volver al formulario de ingreso de datos de citas y programar la cita.

Formulario de citas y servicios

El propósito de este formulario es ingresar diferentes servicios asociados a una cita. Este formulario también podría usarse para generar una factura para el cliente. El Servicio y el Empleado se pueden seleccionar desde sus respectivos cuadros combinados como se muestra a continuación:

Informe de totales de citas de clientes

Este informe proporciona un resumen de la cantidad de citas y el monto total gastado por cada cliente.

Basado en la consulta:

SELECT Customer.CustomerID, FirstName, LastName, SUM(q.TotalSpent) AS TotalSpent, COUNT(q.AppointmentID) AS NumberOfCitmentsFROM Customer, Appointment, Query_Total_Spent_Each_Cita AS qWHERE Cliente.CustomerID =Cita.CustomerID AND Cita.AppointmentID =q. GRUPO DE IDENTIFICACIÓN DE CITA POR Cliente.IDDeCliente, Nombre, ApellidoORDER BY Apellido, Nombre;

Y consulta Total_Spent_Each_Appointment

SELECT Appointment.AppointmentID, SUM(ServiceExtendedPrice) AS TotalSpentFROM Appointment, ServiceRenderedWHERE Appointment.AppointmentID =ServiceRendered.AppointmentIDGROUP BY Appointment.AppointmentIDORDER BY Appointment.AppointmentID;

Informe de Servicios y Descuentos

Este informe muestra cada uno de los servicios con los totales del precio del servicio regular, el precio extendido y una indicación del monto del descuento aplicado a los servicios prestados en el pasado.

Basado en la consulta:

SELECT SalonService.ServiceID, ServiceName, SUM(ServicePrice) AS TotalServicePrice, SUM(ServiceExtendedPrice) AS TotalExtPrice, FORMAT(1.0 - (SUM(ServiceExtendedPrice) / SUM(ServicePrice)), "0.00%") AS DiscountFROM SalonService, ServiceRenderedWHERE SalonService.ServiceID =ServiceRendered.ServiceIDGROUP BY SalonService.ServiceID, ServiceNameORDER BY SalonService.ServiceID, ServiceName;

Informe de direcciones de clientes

Este informe muestra los nombres y direcciones completos de cada Cliente.

VII. Conclusiones

El desarrollo de una aplicación de base de datos sigue un ciclo de vida de desarrollo de sistemas que comienza con el modelado conceptual y avanza a través de un conjunto estructurado de pasos que incluyen el modelado lógico, la normalización, la implementación física y el desarrollo de aplicaciones. El ejemplo del proyecto Hair Salon ilustra cada uno de estos pasos principales. Sin embargo, algunos detalles no han sido completamente documentados. Por ejemplo, es posible que se requiera algún trabajo adicional para normalizar la relación de Servicios de salón para dar cuenta de los diferentes materiales utilizados para cada servicio. También se podrían agregar detalles adicionales de implementación de la aplicación, como otros códigos VBA y descripciones más detalladas del uso de cada formulario e informe.