Access
 sql >> Database >  >> RDS >> Access

Il progetto del database del parrucchiere

Aggiornato:22 gennaio 2018 da Richard Holowczak

I seguenti materiali documentano la progettazione e lo sviluppo di un'applicazione di database per supportare un piccolo parrucchiere. Il progetto inizia con una descrizione del business e procede attraverso la modellazione concettuale (E-R), la modellazione logica (relazionale), la modellazione fisica e infine l'implementazione di un'applicazione di database. Note (Commento) sono fornite alla fine di ogni sezione per spiegare alcune caratteristiche specifiche dei passaggi in corso.

Sommario

Io. Scenario aziendale
II. Modello ER utilizzando la notazione UML
III. Conversione al modello relazionale
IV. Normalizzazione
V. Creazione dello schema del database con SQL
VI. Applicazione di database
VII. Conclusioni

.

Io. Scenario aziendale

La nostra azienda possiede e gestisce un salone di parrucchieri e unghie nel centro di Manhattan da 7 anni. Abbiamo utilizzato fogli di calcolo e un registro cartaceo per tenere traccia di clienti, appuntamenti e pagamenti. Vorremmo sostituire questo metodo manuale di tracciamento dell'attività con un database.

Nella nostra attività, i clienti prendono appuntamenti con il loro parrucchiere preferito (persone che tagliano e acconciano i capelli dei clienti) o un altro dipendente e possono concedersi una serie di servizi come taglio/acconciatura di base, colore dei capelli, colpi di sole, permanente, trattamento viso, manicure, pedicure, ecc. Dobbiamo tenere traccia dei materiali (shampoo, colore dei capelli) e del tempo necessario per completare ogni servizio. Sebbene ogni servizio abbia un prezzo standard, promozioni e altri fattori possono influire sul prezzo effettivo applicato al Cliente per il servizio fornito.

Abbiamo anche bisogno di tenere traccia dei nostri dipendenti, incluso il loro indirizzo di casa, le informazioni di contatto e la tariffa retributiva. Dobbiamo tenere traccia delle informazioni di contatto di ciascun cliente e del loro sesso. Per Appuntamenti abbiamo bisogno di conoscere la data e l'ora dell'appuntamento e a quale cliente è rivolto l'appuntamento.

Commento

Sulla base della descrizione precedente, costruisci un modello Entity Relationship utilizzando la notazione UML che catturerà tutte le esigenze di dati dell'azienda.

II. Modello ER utilizzando la notazione UML

Sulla base della descrizione precedente, sviluppiamo il seguente modello Entity Relationship utilizzando la notazione UML.

Commento

Cosa ci piace di questo modello:

  • Tutte le linee di relazione si trovano in posizione orizzontale o verticale. Nessuna linea superata.
  • I nomi degli attributi sono scritti senza spazi nei nomi. Non vengono utilizzate abbreviazioni.
  • Ogni relazione ha due frasi da cui possiamo ricavare frasi di relazione (vedi la prossima sezione).
  • Il diagramma ha anche una "leggenda" nell'angolo in alto a destra, così possiamo dire cosa rappresenta il diagramma e chi ha modificato il diagramma per ultimo.

Frasi sui rapporti

Un Cliente potrebbe essere prendere uno o più Appuntamenti

Un Appuntamento deve essere una prenotazione per uno e un solo Cliente

Un SalonService potrebbe essere un servizio reso come uno o più ServiceRendered

Un ServiceRendered deve essere un rendering di uno e un solo SalonService

Un Dipendente potrebbe essere rendering uno o più ServiceRendered

Un ServiceRendered deve essere reso da uno e un solo Dipendente
 

Un Appuntamento potrebbe essere una prenotazione per fornire uno o più ServiceRendered

Un ServiceRendered deve essere un servizio specifico reso durante uno e un solo Appuntamento

Commento

Le frasi di relazione dovrebbero avere un senso. In questo esempio, le frasi verbali sono sottolineate. I nomi delle entità sono in grassetto. La cardinalità minima (può essere per 0 e deve essere per 1) sono scritti in corsivo. La cardinalità massima è scritta come "uno o più" per * e "uno e uno solo" per 1.

Con il modello ER finalizzato, passiamo al passaggio successivo:convertire il modello ER concettuale in un modello relazionale logico.

III. Conversione a Modello relazionale

Il passaggio successivo consiste nel convertire il diagramma Entity Relationship in un modello relazionale. Durante questo passaggio, gli identificatori nelle entità diventano chiavi nelle relazioni. Le relazioni uno-a-molti comportano la copia di una chiave esterna dal lato Uno al lato Molti della relazione.

Cliente (ID cliente (chiave), nome, cognome, numero di telefono, via, città, stato, codice postale)

Servizio Salone ( ServiceID (chiave), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials)

Dipendente (ID dipendente (chiave), Nome, Cognome, Via, Città, Stato, Codice postale, PayRate)

Appuntamento ( AppointmentID (chiave), AppointmentDate, AppotinmentTime, CustomerID (fk) )

Servizio reso ( AppointmentID (fk)(key), LineItemNumber(key), ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk))

Questo è l'"insieme iniziale di relazioni".

Commento

  • Nota che il ServiceRendered l'entità del modello ER dipende dall'ID, il che significa che necessita di un attributo oltre a LineItemNumber per formare una chiave composta.
  • Le chiavi sono mostrate con la designazione (chiave) e le chiavi esterne sono mostrate con la designazione (fk).

Il passaggio successivo consiste nel normalizzare l'insieme iniziale di relazioni.

IV. Normalizzazione

Il prossimo passo è normalizzare le relazioni.

I passaggi da seguire per ogni relazione sono:

  1. Scrivi la relazione includendo tutti i nomi degli attributi. Indica chiavi e chiavi esterne.
  2. Fornisci alcuni dati di esempio per la relazione.
  3. Indica la Chiave per la relazione e annotare tutte le Dipendenze Funzionali .
  4. Esamina le definizioni di ogni forma normale iniziando con 1NF e salendo fino a BCNF (o 3NF a seconda dei requisiti del tuo progetto).
  5. Se una relazione soddisfa la definizione di forma normale, passa alla successiva forma normale superiore.
  6. Se una relazione non soddisfa la definizione di una forma normale (ad esempio, contiene una dipendenza a chiave parziale o contiene una dipendenza transitiva), dividere la relazione in due nuove relazioni.
    Iniziare il processo di normalizzazione dall'inizio con ciascuna di queste due nuove relazioni.

Relazione con il cliente

Cliente (ID cliente (chiave), Nome, Cognome, Telefono cliente, Via, Città, Stato, Codice postale, Sesso)

Dati campione

ID cliente Nome Cognome Numero di telefono Strada Città Stato Codice postale Sesso
C101 Elia Fawcett 201-222-2222 8989 Smith Road Garfield NJ 07026 F
C102 Ishwarya Robert 201-222-3333 65 Hope Road Garfield NJ 07026 M
C103 Federico Fawcett 201-222-2222 8989 Smith Road Garfield NJ 07026 M
C104 Goldie Montando 201-222-4321 5235 Ironwood Ln Garfield NJ 07026 F
C105 Dheeraj Alessandro 201-222-4545 666 22a Ave Bergenfield NJ 07621 M
C106 Josie Davis 201-333-6789 4200 Bluejay Ave Bergenfield NJ 07621 F
C107 Fai Glenn 201-333-4242 1522 Main Street Parco delle scogliere NJ 07010 F
C108 Lauren Hershey 201-444-1313 2360 Maxon Road Englewood NJ 07631 F

Chiave:ID cliente

FD1:ID cliente -> Nome, Cognome, Numero di telefono, Via, Città, Stato, Codice postale, Sesso

FD2:CAP -> Città, Stato

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:Esiste una dipendenza transitiva:CustomerID -> CAP e CAP -> Città, Stato

Soluzione:dividere la relazione con il cliente in due nuove relazioni denominate CustomerData e CAP:

Dati cliente (ID cliente (chiave), Nome, Cognome, Telefono cliente, Via, Codice postale (fk), Sesso)

Chiave:ID cliente

FD1:ID cliente -> Nome, Cognome, Numero di telefono, Via, Codice postale (fk), Sesso

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:nessuna dipendenza transitiva

BCNF:tutti i determinanti sono chiavi candidate

codici postali(codice postale (chiave), città, stato)

Chiave:codice postale

FD1:CAP -> Città, Stato

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:nessuna dipendenza transitiva

BCNF:tutti i determinanti sono chiavi candidate

Relazione SalonService

SalonService ( ServiceID (chiave), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials)

Dati di esempio:

ServiceID Durata del servizio Prezzo del servizio Materiali di servizio
SV101 Taglio di capelli da uomo 20 22:00 Nessuno
SV102 Taglio di capelli da donna 30 32.00 Nessuno
SV103 Taglio di capelli per bambini 20 15.00 Nessuno
SV104 Colore per capelli da donna 60 76.00 Colore, Reagente, Guanti, Pennello Reagente, Lamina
SV105 Acconciatura da donna 45 56.00 Shampoo, balsamo
SV106 Acconciatura da uomo 45 46.00 Shampoo, balsamo

Chiave:ServiceID

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

1NF:ServiceMaterials può essere trattato come un attributo multivalore. In questo caso SalonService non è in 1NF.

Soluzione:suddividi ServiceMaterials in una relazione separata.

Per questo esempio, tuttavia, manterremo ServiceMaterials come attributo della relazione SalonService.

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:nessuna dipendenza transitiva

BCNF:tutti i determinanti sono chiavi candidate

Rapporto con i dipendenti

Dipendente (ID dipendente (chiave), nome, cognome, via, città, stato, codice postale, tariffa retributiva)

EmployeeID Nome Cognome Strada Città Stato Codice postale Tasso retributivo
E300 Gioia Aveda 46 Easton Ave. Garfield NJ 07026 18.00
E400 Geraldo Geraldo 12 Fortis Boulevard. Apt. 2A Garfield NJ 07026 22:00
E500 Koy Petruzzio 70 Wilard St. Garfield NJ 07026 20.00
E600 Landry Monroe 73 Holly Terrace Parco delle scogliere NJ 07010 18.00
E700 Patto Reese 2 Lincoln Place Parco delle scogliere NJ 07010 23:00
E800 Inverno Abbronzante 215 Elm Ave Teaneck NJ 07665 23:00

Chiave:ID dipendente

FD1:ID dipendente -> Nome, Cognome, Via, Città, Stato, CAP, PayRate

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:Esiste una dipendenza transitiva:ID dipendente -> Codice postale e Codice postale -> Città, Stato

Soluzione:dividere la relazione con il cliente in due nuove relazioni denominate EmployeeData e CAP:

EmployeeData(EmployeeID (chiave), Nome, Cognome, Via, CAP (fk), PayRate)

Chiave:ID dipendente

FD1:ID dipendente -> Nome, Cognome, Via, CAP (fk), PayRate

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:nessuna dipendenza transitiva

BCNF:tutti i determinanti sono chiavi candidate

Nota:abbiamo già una relazione di codici postali da quando la relazione con il cliente è stata divisa. Quindi riutilizziamo la relazione ZipCodes. Non è necessario creare una seconda relazione ZipCodes.

Relazione per l'appuntamento

Appuntamento ( AppointmentID (chiave), AppointmentDate, AppotinmentTime, CustomerID (fk) )

Dati di esempio:

ID appuntamento AppuntamentoDate Appuntamento ID cliente
A400 22/10/2017 11:00:00 C101
A401 6/11/2017 12:45:00 C102
A402 7/12/2017 14:00:00 C106
A403 18/12/2017 15:30:00 C106
A404 21/12/2017 11:30:00 C108
A405 31/12/2017 10:00:00 C107
A406 11/01/2018 15:15:00 C103
A407 12/01/2018 14:30:00 C104
A408 22/01/2018 16:00:00 C105

Chiave:ID appuntamento

FD1:AppointmentID -> AppointmentDate, AppotinmentTime, CustomerID (fk)

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:nessuna dipendenza transitiva

BCNF:tutti i determinanti sono chiavi candidate

Relazione ServiceRendered

ServiceRendered ( AppointmentID (fk)(key), LineItemNumber(key), ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk))

Dati di esempio:

ID appuntamento LineItemNumber ServiceID Prezzo ServiceExtended ID dipendente
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

Chiave:AppointmentID, LineItemNumber

FD1:AppointmentID, LineItemNumber -> ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk)

1NF:Soddisfa la definizione di una relazione

2NF:nessuna dipendenza parziale dalla chiave

3NF:nessuna dipendenza transitiva

BCNF:tutti i determinanti sono chiavi candidate

Insieme di relazioni finali

Cliente ( CustomerID (chiave), Nome, Cognome, Numero di telefono, Via, Codice postale (fk), Sesso)

Codici postali ( CAP (chiave), Città, Stato)

Servizio Salone ( ServiceID (chiave), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials)

Dipendente (ID dipendente (chiave), Nome, Cognome, Via, CAP (fk), PayRate)

Appuntamento ( AppointmentID (chiave), AppointmentDate, AppotinmentTime, CustomerID (fk) )

Servizio reso ( AppointmentID (fk)(key), LineItemNumber(key), ServiceID (fk), ServiceExtendedPrice, EmployeeID(fk))

Commento

  • Nota che è richiesta solo una relazione ZipCodes. È condiviso con i rapporti con il Cliente e con i Dipendenti.
  • Come notato in precedenza, l'attributo ServiceMaterials non è stato normalizzato in questo esempio. Forse può essere fatto in un futuro incarico o miglioramento del modello.

Ora che le relazioni sono normalizzate, lo schema può essere creato in un sistema di gestione di database utilizzando il linguaggio di query strutturato (SQL).

V. Creazione dello schema del database con il linguaggio di query strutturato

Crea una tabella nel database per ciascuna delle relazioni nell'insieme finale di relazioni.

Il codice SQL seguente crea le sei tabelle e aggiunge a ciascuna il vincolo PRIMARY KEY:

CREATE TABLE ZipCodes( codice postale VARCHAR(12) NOT NULL, città VARCHAR(36), stato VARCHAR(4), CONSTRAINT pk_zipcodes CHIAVE PRIMARIA (codice postale))CREATE TABLE Customer( CustomerID VARCHAR(10) NOT NULL, FirstName VARCHAR( 35), Cognome VARCHAR(35), Numero di telefono VARCHAR(15), Via VARCHAR(35), Codice postale VARCHAR(12), Sesso VARCHAR(2), CONSTRAINT pk_customer CHIAVE PRIMARIA (ID cliente))CREATE TABLE Appuntamento( ID appuntamento VARCHAR(10) NOT NULL, AppointmentDateTime DATE, CustomerID VARCHAR(10) NOT NULL, CONSTRAINT pk_appointment CHIAVE PRIMARIA (AppointmentID))CREATE TABLE SalonService( ServiceID VARCHAR(10) NOT NULL, ServiceName VARCHAR(35), ServiceDuration INTEGER, ServicePrice NUMBER, ServiceMaterials VARCHAR(255 ), CONSTRAINT pk_salonservice CHIAVE PRIMARIA (ServiceID))CREATE TABLE Dipendente ( EmployeeID VARCHAR(10) NOT N ULL, Nome VARCHAR(35), Cognome VARCHAR(25), Via VARCHAR(45), Codice postale VARCHAR(12), PayRate NUMBER, CONSTRAINT pk_employee PRIMARY KEY (EmployeeID))CREATE TABLE ServiceRendered ( AppointmentID VARCHAR(10) NOT NULL, LineItemNumber INTEGER NOT NULL, ServiceID VARCHAR(10) NOT NULL, ServiceExtendedPrice NUMBER, EmployeeID VARCHAR(10) NOT NULL, CONSTRAINT pk_ServiceRendered CHIAVE PRIMARIA (AppointmentID, LineItemNumber))

Aggiunta di chiavi esterne

I seguenti codici SQL aggiungono i vincoli FOREIGN KEY per collegare le tabelle insieme:

ALTER TABLE Customer ADD CONSTRAINT fk_customer_zipcodes CHIAVE ESTERA (ZipCode) RIFERIMENTI CAP (ZipCode) ALTER TABLE Dipendente ADD CONSTRAINT fk_employee_zipcodes CHIAVE STRANIERA (ZipCode) RIFERIMENTI CAP (ZipCode) ALTER TABLE Appuntamento ADD CONSTRAINT fk_customer_appointment CHIAVE STRANIERA (CustomerID) RIFERIMENTO Cliente (CustomerID) )ALTER TABLE ServiceRendered ADD CONSTRAINT fk_ServiceRendered_Service FOREIGN KEY (ServiceID) REFERENCES SalonService (ServiceID)ALTER TABLE ServiceRendered ADD CONSTRAINT fk_ServiceRendered_Employee FOREIGN KEY (EmployeeID) REFERENCES Dipendente (EmployeeID)ALTER TABLE ServiceRendered ADD CONSTRAINT fk_IDServiceRendered_Appointment IDAppointment (FOREIGN KEY)  

Commento su SQL:

  • La maggior parte dei DBMS memorizzerà la DATA e l'ORA nella stessa colonna. Quindi AppointmentDate e AppointmentTime sono stati combinati in un'unica colonna nel database denominata AppointmentDateTime
  • Chiavi e chiavi esterne devono avere lo stesso nome esatto e tipo di dati. Ad esempio, l'ID cliente chiave è VARCHAR(10) nella tabella Cliente e anche VARCHAR(10) nella tabella Appuntamento.
  • Ai vincoli vengono assegnati nomi significativi come pk_customer per una chiave primaria e fk_customer_zipcodes per una chiave esterna.
  • Le colonne come Numero di telefono e Codice postale devono utilizzare il tipo di dati VARCHAR. Se viene utilizzato un tipo di dati NUMBER o INTEGER, gli zeri iniziali mancheranno.

Dopo aver creato le tabelle e aggiunto i vincoli di chiave esterna, lo schema del database ora è simile al seguente:

Vista relazione

Usando la Visualizzazione relazioni in Strumenti database, possiamo vedere le relazioni (chiavi esterne) tra le tabelle:

Aggiunta di dati alle tabelle utilizzando le istruzioni SQL INSERT

INSERISCI VALORI CAP ('07026', 'Garfield', 'NJ');INSERISCI VALORI CAP ('07621', 'Bergenfield', 'NJ');INSERISCI VALORI CAP ('07010', 'Cliffside Park', 'NJ');INSERT INTO CAP VALUES ('07631', 'Englewood', 'NJ');INSERT INTO ZipCodes VALUES ('07665', 'Teaneck', 'NJ');INSERT INTO Customer VALUES (' C101', 'Elia', 'Fawcett', '201-222-2222', '8989 Smith Rd', '07026', 'F');INSERT INTO Customer VALUES ('C102', 'Ishwarya', 'Roberts' , '201-222-3333', '65 Hope Rd', '07026', 'M');INSERT INTO Customer VALUES ('C103', 'Frederic', 'Fawcett', '201-222-2222', ' 8989 Smith Rd', '07026', 'M');INSERT INTO Customer VALUES ('C104', 'Goldie', 'Montand', '201-222-4321', '5235 Ironwood Ln', '07026', ' F');INSERT INTO Customer VALUES ('C105', 'Dheeraj', 'Alexander', '201-222-4545', '666 22nd Ave', '07621', 'M');INSERT INTO Customer VALUES (' C106', 'Josie', 'Davis', '201-333-6789', '4200 Bluejay Ave', '07621', 'F');INSERT INTO Customer VALUES ('C107', 'Faye', 'Glenn' , '201-333-4242', '1 522 Main St', '07010', 'F');INSERT INTO Customer VALUES ('C108', 'Lauren', 'Hershey', '201-444-1313', '2360 Maxon Rd', '07631', ' F');INSERT INTO SalonService VALUES ('SV101', 'Men's Haircut', 20, 22, 'Nessuno');INSERT INTO SalonService VALUES ('SV102', 'Women's Haircut', 30, 32' , 'Nessuno');INSERT INTO SalonService VALUES ('SV103', 'Child Haircut', 20, 15, 'Nessuno');INSERT INTO SalonService VALUES ('SV104', 'Women's Hair Color', 60, 76 , 'Colore, reagente, guanti, spazzola per reagenti, pellicola');INSERT INTO SalonService VALUES ('SV105', 'Women's Hair Style', 45, 56, 'Shampoo, Conditioner');INSERT INTO SalonService VALUES (' SV106', 'Uomini''s Hair Style', 45, 46, 'Shampoo, Conditioner');INSERT INTO Employee VALUES ('E300', 'Joy', 'Aveda', '46 Easton Ave.', '07026' , 18);INSERIRE VALORI Dipendenti ('E400', 'Geraldo', 'Geraldo', '12 Fortis Blvd. Apt. 2A', '07026', 22);INSERT INTO Employee VALUES ('E500', 'Koy', 'Petruzzio', '70 Wilard St. ', '07026', 20);INSERT INTO Employee VALUES ('E600', 'Landry', 'Monroe', '73 Holly Terrace', '07010', 18);INSERT INTO Employee VALUES ('E700', 'Pat', 'Reese', '2 Lincoln Place', '07010', 23);INSERT INTO Employee VALUES ('E800', 'Winter', 'Tanner', '215 Elm Ave', '07665', 23);INSERT IN APPUNTMENT VALUES ('A400', '22/10/2017 11:00:00 AM', 'C101');INSERIRE VALORI Appuntamento ('A401', '11/06/2017 12:45:00 PM', 'C102');INSERIRE VALORI Appuntamento ('A402', '12/07 /2017 14:00:00', 'C106');INSERIRE VALORI Appuntamento ('A403', '18/12/2017 03:30:00 PM', 'C106');INSERIRE VALORI Appuntamento ('A404 ', '21/12/2017 11:30:00', 'C108');INSERIRE NEI VALORI APPUNTAMENTO ('A405', '31/12/2017 10:00:00 AM', 'C107');INSERIRE INTO Appointment VALUES ('A406', '01/11/2018 03:15:00 PM', 'C103');INSERT IN Appointment VALUES ('A407', '01/12/2018 01:30:00 PM', 'C104');INSERIRE NEI VALORI Appuntamento ('A408', '0 22/01/2018 04:00:00 PM', 'C105');INSERT INTO ServiceRendered VALUES ('A400', 1, 'SV104', 75, 'E400');INSERT INTO ServiceRendered VALUES ('A400', 2 , 'SV102', 25, 'E400');INSERT INTO ServiceRendered VALUES ('A401', 1, 'SV101', 22, 'E500');INSERT INTO ServiceRendered VALUES ('A402', 1, 'SV104', 75 , 'E600');INSERT INTO ServiceRendered VALUES ('A402', 2, 'SV102', 30, 'E800');INSERT IN ServiceRendered VALUES ('A403', 1, 'SV105', 50, 'E300'); INSERT INTO ServiceRendered VALUES ('A404', 1, 'SV105', 55, 'E300');INSERT INTO ServiceRendered VALUES ('A405', 1, 'SV102', 30, 'E700');INSERT INTO ServiceRendered VALUES (' A405', 2, 'SV104', 70, 'E700');INSERT INTO ServiceRendered VALUES ('A405', 3, 'SV105', 50, 'E700');

Commento sui campioni di dati

  • Aggiungiamo dati sufficienti per poter testare le relazioni tra le tabelle e per offrire agli sviluppatori di applicazioni qualcosa con cui lavorare.
  • Fai attenzione all'ordine in cui vengono aggiunti i dati. Ad esempio, è necessario inserire prima tutti i codici postali, prima di poter inserire Cliente o Impiegato (che entrambi utilizzano il codice postale come chiave esterna).
  • Quando si aggiungono dati VARCHAR con virgolette incorporate, utilizzare due virgolette insieme. ad esempio, "Stile di capelli da donna"
  • A questo punto lo schema del database è pronto per consentire agli sviluppatori di applicazioni di iniziare a lavorare alla progettazione di moduli, report e query.

Ora che lo schema del database è stato creato e popolato con alcuni dati di esempio, è possibile sviluppare l'applicazione del database.

VI. Applicazione database

L'applicazione database è costituita da un insieme di moduli, rapporti e query collegati tra loro in un modulo di navigazione.

Il modulo di navigazione è il primo modulo che appare all'apertura del database.

Modulo di navigazione

È possibile visualizzare diversi moduli di immissione dati e report facendo clic sulla selezione sul lato sinistro.

Modulo di inserimento dati cliente

Il modulo Inserimento dati cliente viene utilizzato per cercare i clienti esistenti e per inserire le informazioni sui nuovi clienti. I campi Città e Stato vengono compilati automaticamente selezionando un codice postale dalla casella combinata. Il modulo ha diversi codici VBA personalizzati per convertire il nome e il cognome in caso corretto e per generare un nuovo ID cliente univoco quando viene visualizzato un campo ID cliente vuoto dopo aver creato un nuovo record.

Modulo di inserimento dati sui servizi del salone

Il modulo di inserimento dati sui servizi del salone viene utilizzato per richiedere, aggiornare e aggiungere nuovi servizi del salone.

Modulo di inserimento dati appuntamento

Il modulo Inserimento dati appuntamenti viene utilizzato per creare un nuovo appuntamento per un cliente. Come con il modulo Cliente, è possibile creare un nuovo ID appuntamento facendo clic in un campo ID appuntamento vuoto dopo la creazione di un nuovo record. Il Cliente può essere selezionato dalla casella combinata ID cliente come mostrato di seguito:

Se si tratta di un nuovo cliente che sta fissando un appuntamento, l'utente può fare clic sul pulsante Nuovo cliente per visualizzare il modulo di inserimento dei dati del cliente. Dopo aver salvato le informazioni del nuovo cliente, l'utente può tornare al modulo di inserimento dati appuntamento e fissare l'appuntamento.

Modulo per appuntamenti e servizi

Lo scopo di questo modulo è inserire diversi servizi associati a un appuntamento. Questo modulo può essere utilizzato anche per generare una fattura per il cliente. Il Servizio e il Dipendente possono essere selezionati dalle rispettive caselle combinate come mostrato di seguito:

Rapporto sui totali degli appuntamenti con i clienti

Questo rapporto fornisce un riepilogo del numero di appuntamenti e dell'importo totale speso da ciascun cliente.

Sulla base della domanda:

SELECT Customer.CustomerID, FirstName, LastName, SUM(q.TotalSpent) AS TotalSpent, COUNT(q.AppointmentID) AS NumberOfAppointmentsFROM Customer, Appointment, Query_Total_Spent_Each_Appointment AS qWHERE Customer.CustomerID =Appointment.CustomerID AND Appointment.AppointmentID =q. AppointmentIDGROUP BY Customer.CustomerID, FirstName, LastNameORDER BY LastName, FirstName;

E interroga Total_Spent_Each_Appuntamento

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

Rapporto Servizi e Sconti

Questo report mostra ciascuno dei servizi con i totali del prezzo del servizio regolare, del prezzo esteso e l'indicazione dell'importo dello sconto applicato ai servizi resi in passato.

Sulla base della domanda:

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;

Rapporto sugli indirizzi dei clienti

Questo rapporto mostra i nomi e gli indirizzi completi di ciascun Cliente.

VII. Conclusioni

Lo sviluppo di un'applicazione di database segue un ciclo di vita di sviluppo del sistema che inizia con la modellazione concettuale e si sposta attraverso una serie strutturata di passaggi che includono la modellazione logica, la normalizzazione, l'implementazione fisica e lo sviluppo dell'applicazione. L'esempio del progetto Hair Salon illustra ciascuno di questi passaggi principali. Tuttavia alcuni dettagli non sono stati completamente documentati. Ad esempio, potrebbe essere necessario del lavoro aggiuntivo per normalizzare la relazione con i servizi del salone per tenere conto dei diversi materiali utilizzati per ciascun servizio. È inoltre possibile aggiungere ulteriori dettagli sull'implementazione dell'applicazione come altri codici VBA e descrizioni più dettagliate dell'utilizzo di ciascun modulo e report.