erd drugstore database
Embed Size (px)
DESCRIPTION
this is one of my classwork making ERD of drugstoreTRANSCRIPT

Bagaimana Jalannya Bagaimana Jalannya Apotek?Apotek?Pasien yang melakukan pemeriksaan
akan dimintai data-datanya berupa Nama, usia, Alamat, dan nomor telepon. Kemudian Apotek akan memberikan ID untuk tiap pasien.
Dokter yang bekerja sama dengan apotik tertentu akan dicatat datanya berupa Nama, Spesialisasi, dan pengalaman bekerja sebagai dokter.
Tiap Pasien pasti ditangani dokter. Dan hanya satu dokter. Tiap dokter boleh tidak menangani pasien dan boleh menangani lebih dari satu pasien.

Bagaimana Jalannya Bagaimana Jalannya Apotek? (2)Apotek? (2)Tiap pabrik obat diidentifikasi dengan
nama perusahaan, kota dan nomor telepon.
Untuk setiap obat, merek dagang dan formula yang terdapat di dalamnya harus dicatat. Setiap obat dijual sesuai dengan kebijakan dan ketentuan apotek yang bersangkutan. Dan merek dagang menunjukkan kekhususan produk tersebut. Dan apabila perusahaan obat dieliminasi dari data, maka produk yang dihasilkannya tidak perlu disimpan lagi.

Bagaimana Jalannya Bagaimana Jalannya Apotek? (3)Apotek? (3)Tiap apotek mempunyai nama toko, alamat,
kota, dan nomor telepon.Tiap-tiap apotek menjual berbagai macam
obat dan memberikan label harga untuk tiap merek obat tersebut. Sebuah merek obat haruslah dijual pada beberapa apotek, dan harga yang tercantum dapat berasal dari satu atau beberapa apotek yang bersangkutan.
Dokter memberikan resep untuk pasien. Seorang dokter dapat memberikan resep untuk satu atau lebih obat untuk beberapa pasien, dan seseorang pasien bisa mendapatkan resep obat dari beberapa orang dokter. Setiap resep mempunyai tanggal dan kuantitas.

Bagaimana Jalannya Bagaimana Jalannya Apotek? (4)Apotek? (4)Sebuah pabrik obat mempunyai perjanjian
kontrak jangka panjang dengan apotek. Sebuah pabrik obat dapat mengadakan kontrak dengan beberapa apotek, dan sebuah apotek dapat mengadakan kontrak dengan beberapa pabrik obat. Untuk setiap kontrak yang dilakukan, harus direkam/ dicatat tangal mulai kontrak, tanggal berakhirnya kontrak, dan isi dari kontrak tersebut.
Setiap apotek mengutus seorang pengawas untuk masing-masing kontrak Dan merupakan keharusan bila setiap kontrak tersebut diawasi oleh seorang pengawas.


ditangani
0,n0,n
0,n 0,n
0,n
0,n
dibuat
0,n
bertempat
lokasi
Pasien
PIDNamaPAlamatPUsiaTeleponP
<pi> A3VA30VA45N3N12
<M><M>
<M>
Identifier_1 <pi>
Dokter
DIDNamaDSpesialisPengalaman
<pi> A3VA45VA35I
<M><M>
<M>
Identifier_1 <pi>
Apotek
Nama_ApAlamat_ApTelepon_Ap
<pi><pi>
VA30VA50N12
<M><M>
Identifier_1 <pi>
Pabrik Obat
Nama_PabTelepon_Pab
<pi> VA30N12
<M><M>
Identifier_1 <pi>
Obat
MerekFormulaJenis
<pi> VA45VA75VA35
<M>
Identifier_1 <pi>
Resep
TanggalKuantitas
DI
menjual
Harga N10
Kontrak
Tgl_mulaiTgl_akhirIsiPengawas
DDVA80VA45
<M><M><M>
Kota
KIDNama
<pi> IVA40
<M><M>
Identifier_1 <pi>

FK_PASIEN_DITANGANI_DOKTER
FK_RESEP_RESEP_PASIEN FK_RESEP_RESEP2_DOKTER
FK_MENJUAL_MENJUAL_APOTEK FK_MENJUAL_MENJUAL2_OBAT
FK_KONTRAK_KONTRAK_APOTEK
FK_KONTRAK_KONTRAK2_PABRIK_O
FK_OBAT_DIBUAT_PABRIK_O
FK_RESEP_RESEP3_OBAT
FK_PABRIK_O_BERTEMPAT_KOTA
FK_APOTEK_LOKASI_KOTA
Pasien
PIDDIDNamaPAlamatPUsiaTeleponP
CHAR(3)CHAR(3)VARCHAR(30)VARCHAR(45)NUMERIC(3)NUMERIC(12)
<pk><fk>
Dokter
DIDNamaDSpesialisPengalaman
CHAR(3)VARCHAR(45)VARCHAR(35)INT4
<pk>
Apotek
Nama_ApAlamat_ApKIDTelepon_Ap
VARCHAR(30)VARCHAR(50)INT4NUMERIC(12)
<pk><pk><fk>
Pabrik Obat
Nama_PabKIDTelepon_Pab
VARCHAR(30)INT4NUMERIC(12)
<pk><fk>
Obat
Nama_PabMerekFormulaJenis
VARCHAR(30)VARCHAR(45)VARCHAR(75)VARCHAR(35)
<pk,fk><pk>
Resep
PIDDIDNama_PabMerekTanggalKuantitas
CHAR(3)CHAR(3)VARCHAR(30)VARCHAR(45)DATEINT4
<pk,fk1><pk,fk2><pk,fk3><pk,fk3>
menjual
Nama_ApAlamat_ApNama_PabMerekHarga
VARCHAR(30)VARCHAR(50)VARCHAR(30)VARCHAR(45)NUMERIC(10)
<pk,fk1><pk,fk1><pk,fk2><pk,fk2>
Kontrak
Nama_ApAlamat_ApNama_PabTgl_mulaiTgl_akhirIsiPengawas
VARCHAR(30)VARCHAR(50)VARCHAR(30)DATEDATEVARCHAR(80)VARCHAR(45)
<pk,fk1><pk,fk1><pk,fk2>
Kota
KIDNama
INT4VARCHAR(40)
<pk>

Yand bisa dilakukan dalam Yand bisa dilakukan dalam Database ApotekDatabase ApotekCari alamat pasien dokter nanda yang bernama
'angga'?SELECT p.alamatpFROM pasien p, dokter dWHERE p.did = d.did AND p.namap = 'angga‘
Cari merek, berapa saja harga obat dan nama apotik yang menjual obat dari pasien bernama 'angga'?
SELECT o.merek, m.nama_ap, m.hargaFROM pasien p, resep r, obat o, menjual mWHERE p.pid = r.pid AND (r.nama_pab =
o.nama_pab AND r.merek = o.merek)AND (o.nama_pab = m.nama_pab AND o.merek
= m.merek) AND namap = 'angga'

Yand bisa dilakukan dalam Yand bisa dilakukan dalam Database Apotek (2)Database Apotek (2)Temukan nama apotik, merek, dan harga termahal dari masing-masing obat pasien yang bernama 'angga'?SELECT m.merek, max(m.harga) as harga_termahalFROM menjual m, pasien p, obat o, resep rWHERE p.pid = r.pid AND (r.nama_pab = o.nama_pab AND r.merek = o.merek)AND (o.nama_pab = m.nama_pab AND o.merek = m.merek)AND p.namap = 'angga'group by m.merek
Temukan nama pasien yang usianya lebih tua dari pasien bernama sari?SELECT p.namapFROM pasien pWHERE p.usia > any(SELECT p2.usia FROM pasien p2WHERE p2.namap = 'sari');

Yand bisa dilakukan dalam Yand bisa dilakukan dalam Database Apotek (3)Database Apotek (3)Temukan nama pasien yang memilki usia
termuda?SELECT p.namapFROM pasien pWHERE p.usia <= all(SELECT p2.usiaFROM pasien p2 );
Temukan nama dan usia pasien dokter 'nanda' yang termuda?
SELECT p.namap, p.usiaFROM pasien p, dokter dWHERE p.did = d.did AND d.namad = 'nanda' AND p.usia <= all(SELECT p2.usia

Yand bisa dilakukan dalam Yand bisa dilakukan dalam Database Apotek (4)Database Apotek (4)Temukan nama dokter yang tidak menangani pasien?SELECT d.namadFROM dokter dWHERE d.did not in (SELECT p.did FROM pasien p)
Temukan merek obat yang dibeli pasien bernama 'angga' tetapi tidak dibeli oleh pasien bernama 'sari'?
SELECT o.merekFROM obat o, pasien p , resep rWHERE (o.merek = r.merek AND o.nama_pab = r.nama_pab)
AND r.pid = p.pidAND p.namap = 'angga' AND o.merek not in (SELECT
o2.merekFROM pasien p2, resep r2, obat o2WHERE (o2.merek = r2.merek AND o2.nama_pab =
r2.nama_pab) AND r2.pid = p2.pidAND p2.namap = 'sari' );

Yand bisa dilakukan dalam Yand bisa dilakukan dalam Database Apotek (5)Database Apotek (5)Temukan formula yang terkANDung dalam obat pasien bernama 'angga'?SELECT o.formulaFROM obat oWHERE o.merek in (SELECT r.merekFROM resep rWHERE r.pid in (SELECT p.pidFROM pasien pWHERE p.namap = 'angga'))
Temukan merek obat yang dibeli pasien bernama 'angga' atau 'sari'?SELECT o.merekFROM obat o, pasien p , resep rWHERE (o.merek = r.merek AND o.nama_pab = r.nama_pab) AND r.pid = p.pidAND p.namap = 'angga'unionSELECT o2.merekFROM obat o2, pasien p2 , resep r2WHERE (o2.merek = r2.merek AND o2.nama_pab = r2.nama_pab) AND r2.pid = p2.pidAND p2.namap = 'sari'

Function dalam Database Function dalam Database (1)(1)Prosedur untuk menghapus nama pasien! create function hapus_pasien (text)returns void as 'delete from pasien
where namap = $1;'language sql; Prosedur untuk menginputkan dokter! create function update_dokter (text, text, text, int4)returns void as'update dokter set namad = $1,
spesialis = $2,pengalaman = $4
where did = $3;'language SQL;

Function dalam Database Function dalam Database (2)(2)Prosedur untuk mendapatkan jumlah pasien yang ditangani oleh dokter tertentu!create function jumlah_pasien (char)returns setof pasien as 'select * from pasien
where did = $1;' language sql;

Function dalam Database Function dalam Database (3)(3)Prosedur urut nama pasien berdasarkan usia! create function urut_pasien ()returns int4 as $$DECLARE
nomor int4;rekord RECORD;
BEGINnomor :=1;
FOR rekord in select * from pasien order by usia asc
LOOPupdate pasien set usia = nomorwhere pid=rekord.pid;nomor := nomor + 1;
END LOOP;return 1;END;$$ language plpgsql;

TriggerTriggerMengubah nama dokter menjadi huruf depan menjadi KAPITALcreate or replace function p_kapital ()returns trigger as $$DECLARE
kata text;panjang int4;edit text;
BEGINkata = new.namad; panjang = char_length (kata);edit =upper(substring(kata from 1 for 1)) ||
lower(substring(kata from 2 for panjang-1));new.namad = edit;
RETURN new;END;$$ language plpgsql; create trigger n_baru before insert or update on dokter for each row execute procedure p_kapital
()

Trigger (2)Trigger (2)Mengubah nama apotek menjadi huruf KAPITAL semuacreate or replace function u_kapital ()returns trigger as $$declareasli text;edit text;beginasli = new.nama_ap;edit = upper (asli) ;new.nama_ap = edit;return new;end;$$ language plpgsql; create trigger nama_baru1 before insert or update on apotek
for each row execute procedure u_kapital ()