Sunteți pe pagina 1din 19

1.

HealthSync oferă cadrelor medicale posibilitatea de a gestiona eficient informațiile


atat despre pacienții unui cabinet medical cat si despre serviciile oferite de acesta.
Datele sunt stocate într-un mod sistematic și bine organizat, facilitând astfel buna
organizare a cabinetului și îmbunătățind calitatea serviciilor medicale oferite.
Aplicatia permite doctorilor sa inregistreze date despre client, să planifice și să
monitorizeze tratamentele pentru fiecare client, sa planifice programari si sa tina
evidenta serviciilor oferite.
2.
 Bcnf :
CREATE TABLE pacienti (
id int(11) NOT NULL AUTO_INCREMENT,
nume varchar(255) NOT NULL,
telefon int(10) NOT NULL,
adresa varchar(255) NOT NULL,
varsta int(3) NOT NULL,
sex varchar(10) NOT NULL,
alergii varchar(255) NOT NULL,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE diagnostic (


id_diagnostic int(11) NOT NULL AUTO_INCREMENT,
id_pacient int(11),
PRIMARY KEY (id_diagnostic),
INDEX (id_pacient),
FOREIGN KEY (id_pacient) REFERENCES pacienti(id)
);

CREATE TABLE diagnostic_details (


id_diagnostic int(11) NOT NULL,
afectiune varchar(100),
simptome text,
tratament text,
numeutiliz varchar(255),
PRIMARY KEY (id_diagnostic),
FOREIGN KEY (id_diagnostic) REFERENCES diagnostic(id_diagnostic)
);

CREATE TABLE pacienti_nume (


id_pacient int(11) NOT NULL,
nume_pacient varchar(100),
PRIMARY KEY (id_pacient),
FOREIGN KEY (id_pacient) REFERENCES pacienti(id)
);

CREATE TABLE utilizatori (


Id int(11) NOT NULL AUTO_INCREMENT,
nume varchar(255) NOT NULL,
numeutilizator varchar(255) NOT NULL,
parola varchar(255) NOT NULL,
PRIMARY KEY (Id)
);

CREATE TABLE servicii (


id int(11) NOT NULL AUTO_INCREMENT,
denumire varchar(255) NOT NULL,
durata int(11) NOT NULL,
cost int(11) NOT NULL,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE programari (


id_programare int(11) NOT NULL AUTO_INCREMENT,
pacient_id int(11),
data varchar(100),
oramin varchar(100),
tip varchar(100),
camera varchar(255),
PRIMARY KEY (id_programare),
INDEX(pacient_id),
FOREIGN KEY (pacient_id) REFERENCES pacienti(id)
);

CREATE TABLE programari_details (


id_programare int(11) NOT NULL,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id_programare),
FOREIGN KEY (id_programare) REFERENCES programari(id_programare)
);
 Dependente functionale:
 id →{ nume, telefon, adresa, varsta, sex, alergii, numeutiliz}
 id_diagnostic →{ id_pacient, nume_pacient, afectiune, simptome,
tratament, numeutiliz}
 id →{ denumire, durata, cost, numeutiliz}
 id_programare → {pacient_id, nume_pacient, data, oramin, tip, camera,
numeutiliz}

3.ERD:
4.

 creare:
CREATE TABLE pacienti (
id int(11) NOT NULL AUTO_INCREMENT,
nume varchar(255) NOT NULL,
telefon int(10) NOT NULL,
adresa varchar(255) NOT NULL,
varsta int(3) NOT NULL,
sex varchar(10) NOT NULL,
alergii varchar(255) NOT NULL,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE diagnostic (


id_diagnostic int(11) NOT NULL AUTO_INCREMENT,
id_pacient int(11),
nume_pacient varchar(100) ,
afectiune varchar(100) ,
simptome text ,
tratament text ,
numeutiliz varchar(255) ,
PRIMARY KEY (id_diagnostic),
INDEX (id_pacient),
FOREIGN KEY (id_pacient) REFERENCES pacienti(id)
);
CREATE TABLE utilizatori (
Id int(11) NOT NULL AUTO_INCREMENT,
nume varchar(255) NOT NULL,
numeutilizator varchar(255) NOT NULL,
parola varchar(255) NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE servicii (
id int(11) NOT NULL AUTO_INCREMENT,
denumire varchar(255) NOT NULL,
durata int(11) NOT NULL,
cost int(11) NOT NULL,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id)

);
CREATE TABLE programari (
id_programare int(11) NOT NULL AUTO_INCREMENT,
pacient_id int(11) ,
nume_pacient varchar(100) ,
data varchar(100) ,
oramin varchar(100) ,
tip varchar(100) ,
camera varchar(255) ,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id_programare),
INDEX(pacient_id) ,
FOREIGN KEY (pacient_id) REFERENCES pacienti(id)
);
S-au creat cu succes tabelele:

 Modificarea structurii:
 ALTER TABLE servicii

CHANGE COLUMN denumire serviciu_denumire varchar(255) NOT NULL;


 ALTER TABLE pacienti

ADD COLUMN last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE


CURRENT_TIMESTAMP;

 ALTER TABLE programari


DROP COLUMN camera;

 Trunchiere:
TRUNCATE TABLE programari;

 Stergere:
Drop table servicii
 Redenumire
RENAME TABLE servicii TO servicii_oferite;

5.

 Confirmarea existentei tabelelor prin interogarea vederilor din dictionarul

datelor:

SELECT
TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = 'bazedate';
 Descrierea tabelelor

UTILIZATORI:

PACIENTI:

SERVICII:

DIAGNOSTIC:
PROGRAMARI:

 Constrangeri :

SELECT

CONSTRAINT_NAME,

COLUMN_NAME,

REFERENCED_TABLE_NAME,

REFERENCED_COLUMN_NAME

FROM

information_schema.KEY_COLUMN_USAGE

WHERE

TABLE_SCHEMA =’bazedate’;
7. Prelucrare asupra datelor

 Adaugare:
INSERT INTO pacienti (nume, telefon, adresa, varsta, sex, alergii, numeutiliz)
VALUES ('Maria Ionescu', 0722333444, 'Strada Molarului 56', 28, 'Feminin', 'Niciuna',
'dentist_1');

 Modificare

UPDATE programari

SET oramin = '04:30 PM', data = '2024-01-20'

WHERE id_programare = 1;

 Imbinare

SELECT pacienti.nume, pacienti.varsta, programari.data, programari.tip

FROM pacienti

JOIN programari ON pacienti.id = programari.pacient_id;


 Stergere

DELETE FROM programari

WHERE data >= '2024-01-20';

 Selectie

SELECT denumire, cost

FROM servicii

WHERE cost > 125;

6.

 Vedere:
 creare:

CREATE VIEW pacienti_diagnostic_view AS

SELECT

p.id AS pacient_id,
p.nume AS nume_pacient,

p.telefon,

p.adresa,

p.varsta,

p.sex,

p.alergii,

d.id_diagnostic,

d.afectiune,

d.simptome,

d.tratament

FROM

pacienti p

JOIN

diagnostic d ON p.id = d.id_pacient;

 Confirmare existanta vedere :

SELECT table_name

FROM information_schema.views

WHERE table_schema = 'bazedate' AND table_name = 'pacienti_diagnostic_view';

 Interogare vedere:
SELECT * FROM pacienti_diagnostic_view
WHERE afectiune = Parodontita;
 Modificare vedere :

CREATE OR REPLACE VIEW pacienti_diagnostic_view AS

SELECT

p.id AS pacient_id,

p.nume AS nume_pacient,

p.telefon,

p.adresa,

p.varsta,

p.sex,

p.alergii,

d.id_diagnostic,

d.afectiune,

d.simptome,

d.tratament

FROM

pacienti p

JOIN

diagnostic d ON p.id = d.id_pacient

WHERE

p.varsta > 18;

 Stergere:

DROP VIEW IF EXISTS pacienti_diagnostic_view;


 INDECSI
 Creare:

CREATE INDEX idx_telefon ON pacienti (telefon);

 Confirmare:

SHOW INDEX FROM pacienti WHERE Key_name = 'idx_telefon';

 Sergere:

DROP INDEX IF EXISTS idx_telefon ON pacienti;

 In mysql nu esite statement- ul ’CREATE SEQUENCE’ dar putem obtine un rezultat


asemanator folosind atributul ’AUTO_INCREMENT’
CREATE TABLE servicii (
id int(11) NOT NULL AUTO_INCREMENT,
denumire varchar(255) NOT NULL,
durata int(11) NOT NULL,
cost int(11) NOT NULL,
numeutiliz varchar(255) NOT NULL,
PRIMARY KEY (id)
);
ALTER TABLE sercivii AUTO_INCREMENT = 100; - autoincrementarea incepe de la valoarea
100

8. Interogari complexe
1.
vederea ofera informații despre pacienții care fie nu au programări , fie au avut
programări în trecut

CREATE VIEW view_pacienti _programari AS


SELECT p.id, p.nume, p.telefon, p.adresa, p.varsta, p.sex,
GROUP_CONCAT(DISTINCT d.afectiune ORDER BY d.afectiune ASC) AS
afectiuni_diagnosticate
FROM pacienti p
LEFT JOIN programari pr ON p.id = pr.pacient_id
LEFT JOIN diagnostic d ON p.id = d.id_pacient
WHERE pr.id_programare IS NULL OR (pr.data IS NOT NULL AND pr.data < CURDATE())
GROUP BY p.id, p.nume, p.telefon, p.adresa, p.varsta, p.sex;

2.

Interogare returnează numele pacienților al căror cost total al serviciilor depășește 1000,
luând în considerare programările și serviciile asociate acestora.
SELECT pacienti.nume, SUM(servicii.cost) AS total_cost
FROM pacienti
JOIN programari ON pacienti.id = programari.pacient_id
JOIN servicii ON programari.tip = servicii.denumire
GROUP BY pacienti.id
HAVING total_cost > 1000;

3.

vederea ofera informatii despre ultima programare, serviciul cel mai recent, costul total
al serviciilor, și, dacă există, ultimul diagnostic al fiecărui pacient.

CREATE VIEW ComplexDetaliiProgramari AS


SELECT
pa.id AS pacient_id,
pa.nume AS nume_pacient,
pa.telefon,
pa.adresa,
pa.varsta,
pa.sex,
pa.alergii,
MAX(p.id_programare) AS ultima_programare_id,
MAX(p.data) AS ultima_programare_data,
MAX(p.tip) AS ultimul_serviciu_id,
MAX(s.cost) AS cost_total_servicii,
(SELECT d.afectiune FROM diagnostic d WHERE d.id_pacient = pa.id ORDER BY
d.id_diagnostic DESC LIMIT 1) AS ultima_afectiune,
(SELECT d.simptome FROM diagnostic d WHERE d.id_pacient = pa.id ORDER BY
d.id_diagnostic DESC LIMIT 1) AS ultimele_simptome,
(SELECT d.tratament FROM diagnostic d WHERE d.id_pacient = pa.id ORDER BY
d.id_diagnostic DESC LIMIT 1) AS ultimul_tratament,
u.nume AS nume_utilizator
FROM
pacienti pa
JOIN
programari p ON pa.id = p.pacient_id
LEFT JOIN
servicii s ON p.tip = s.id
JOIN
utilizatori u ON p.numeutiliz = u.numeutilizator
GROUP BY
pa.id
ORDER BY
ultima_programare_data DESC;
4.
vederea furnizează informații despre serviciile cu un cost mai mare de 100. Include ID-ul,
numele, durata, costul, numărul total de programări pentru fiecare serviciu și costul
mediu al acestor servicii pentru care există programări.
CREATE VIEW view_servicii_scumpe_complex AS
SELECT
s.id,
s.denumire AS nume_serviciu,
s.durata AS durata_serviciu,
s.cost AS cost_serviciu,
COUNT(pr.id_programare) AS total_programari,
AVG(s.cost) AS cost_mediu_programare
FROM
servicii s
LEFT JOIN
programari pr ON s.denumire = pr.tip
WHERE
s.cost > 100
GROUP BY
s.id;

5.
Vederea combină informații detaliate despre pacienți, diagnostic, servicii și programări
într-un singur set de rezultate, ușor de utilizat pentru a obține o imagine de ansamblu a
datelor în legătură cu pacienții și serviciile medicale asociate lor.

SELECT
pr.id_programare,
pa.nume AS nume_pacient,
pr.data,
pr.oramin,
pr.tip,
di.afectiune,
di.simptome,
di.tratament,
se.denumire AS nume_serviciu,
se.durata AS durata_serviciu,
se.cost AS cost_serviciu
FROM
programari pr
JOIN
pacienti pa ON pr.pacient_id = pa.id
JOIN
diagnostic di ON pr.pacient_id = di.id_pacient
LEFT JOIN
servicii se ON pr.numeutiliz = se.numeutiliz
WHERE
di.afectiune = 'AfecțiuneCautată';

CREATE VIEW vedere_completa AS


SELECT
p.id AS pacient_id,
p.nume AS nume_pacient,
p.telefon,
p.adresa,
p.varsta,
p.sex,
p.alergii,
d.id_diagnostic,
d.afectiune,
d.simptome,
d.tratament,
d.numeutiliz AS nume_utilizator_diagnostic,
s.denumire AS denumire_serviciu,
s.durata AS durata_serviciu,
s.cost AS cost_serviciu,
s.numeutiliz AS nume_utilizator_serviciu,
pr.id_programare,
pr.data,
pr.oramin,
pr.tip,
pr.camera,
pr.numeutiliz AS nume_utilizator_programare
FROM pacienti p
LEFT JOIN diagnostic d ON p.id = d.id_pacient
LEFT JOIN utilizatori u ON d.numeutiliz = u.numeutilizator
LEFT JOIN servicii s ON d.numeutiliz = s.numeutiliz
LEFT JOIN programari pr ON p.id = pr.pacient_id AND d.numeutiliz = pr.numeutiliz;

S-ar putea să vă placă și