erd drugstore database

17
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.

Upload: sifa-addini

Post on 08-Aug-2015

171 views

Category:

Documents


7 download

DESCRIPTION

this is one of my classwork making ERD of drugstore

TRANSCRIPT

Page 1: ERD Drugstore Database

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.

Page 2: ERD Drugstore Database

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.

Page 3: ERD Drugstore Database

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.

Page 4: ERD Drugstore Database

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.

Page 5: ERD Drugstore Database
Page 6: ERD Drugstore Database

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>

Page 7: ERD Drugstore Database

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>

Page 8: ERD Drugstore Database

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'

Page 9: ERD Drugstore Database

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');

Page 10: ERD Drugstore Database

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

Page 11: ERD Drugstore Database

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' );

Page 12: ERD Drugstore Database

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'

Page 13: ERD Drugstore Database

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;

Page 14: ERD Drugstore Database

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;

Page 15: ERD Drugstore Database

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;

Page 16: ERD Drugstore Database

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

()

Page 17: ERD Drugstore Database

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 ()