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:
- Escriba la relación, incluidos todos los nombres de atributos. Indicar claves y claves foráneas.
- Proporcione algunos datos de muestra para la relación.
- Indique la Clave para la relación y anote todas las Dependencias funcionales .
- Revise las definiciones de cada forma normal comenzando con 1NF y subiendo hasta BCNF (o 3NF dependiendo de los requisitos de su proyecto).
- Si una relación cumple con la definición de una forma normal, avance a la siguiente forma normal superior.
- 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.