Assignment1 Group4
-
Upload
thiranaa-yenthaisong -
Category
Education
-
view
161 -
download
1
Transcript of Assignment1 Group4
Database Systems นาย ภวูพงศ์ ศรวีจิารณ์ 56-010126-2011-1 นาย ธรีวฒัน์ ผ่องสกลุ 56-010126-3015-9 นางสาว ธรีะนันท์ เยน็ไธสง 56-010126-3016-7
TextbookDatabase Systems: Concepts,Design
and Applications, 2nd Edition
by Shio Kumar SinghISBN: 9788131760925
Requirements of Railway Reservation System› เก็บขอ้มูลสถานีรถไฟ โดยท่ีสถานีรถไฟสามารถมรีถไฟได้หลายๆชนิด และ รถไฟแต่ละชนิดสามารถจอดได้หลายๆสถานี
› เก็บเสน้ทางรถไฟ จะขึ้นอยูกั่บเสน้ทางปลายทางของรถไฟ เชน่ เก็บหมายเลขของเสน้ทาง
› เก็บชนิดของรถไฟ สามารถเก็บขอ้มูลของรถไฟได้หลายชนิด› เก็บขอ้มูลเสน้ทางปลายทาง เชน่เก็บหมายเลขของรถไฟ เก็บวนัท่ีรถไฟมาถึง› เก็บขอ้มูลของท่ีนัง่บนรถไฟ เชน่เก็บหมายเลขของท่ีนัง่› เก็บขอ้มูลค่าโดยสาร โดยค่าโดยสารจะมรีาคาไมเ่ท่ากันขึ้นอยูกั่บเสน้ทางปลายทาง
ER Diagrams of Railway Reservation System
Notation for ER Diagrams
ER Diagrams of Railway Reservation System› Entity
1. TRAIN2. TRAIN TYPE3. RLY STATION4. DEST_ROUTE5. TRAIN ROUTE (Weak Entity) 6. FARE (Weak Entity) 7. SEAT (Weak Entity)
ER Diagrams of Railway Reservation System› Entity : TRAIN
Attribute - TRAIN_NO - TOTAL_NO_OF_SEAT
› Entity : RLY STATION Attribute
- STATION_ID - NAME- CITY- STATE
ER Diagrams of Railway Reservation System› Entity : TRAIN TYPE
Attribute- TRAIN_NAME- MAX_SEATS
› Entity : SEAT (Weak Entity) Attribute
- SEAT_NO
ER Diagrams of Railway Reservation System› Entity : DEST_ROUTE
Attribute- TRAIN_NO- WEEK_DAYS
› Entity : FARE (Weak Entity) Attribute
- FARE_CODE- AMOUNT- RESTRICTIONS
ER Diagrams of Railway Reservation System› Entity : TRAIN ROUTE (Weak Entity)
Attribute- ROUTE_NO
› Entity : ROUTE INSTANCE Attribute
- DATE- NO_OF_AVAL_SEATS
ER To Relational Mapping
ER To Relational Mapping› Step 1 Mapping of Regular Entity type
- สรา้งตารางสำาหรบัแต่ละ Entity- แปลงแต่ละ tuple เป็น instance
Entity : RLY STATION
› Entity : TRAIN TYPE
› Entity : TRAIN
› Entity : DEST_ROUTE
› Entity : ROUTE INSTANCE
ER to Relational Mapping› Step 2: Mapping of Weak Entity Types-สรา้งตารางขึ้นมาใหม่- ใส่ partial key ของ weak entity- นำา primary key ของ owner มาใสเ่ป็น foreign key
Entity : TRAIN ROUTETRAIN_NO เป็น Primary Key ของ owner(DEST_ROUTE)
ใสเ่ป็น foreign key
› Entity : FARE TRAIN_NO เป็น Primary Key ของ owner(DEST_ROUTE)
ใสเ่ป็น foreign key
› Entity : SEAT DATE เป็น Primary Key ของ owner(ROUTE INSTANCE) ใสเ่ป็น foreign key
› Step 3: Mapping of Binary 1:1 Relationship Types
› SKIP To Step 4
› Step 4: Mapping of Binary 1:N Relationship Types› - เลือกด้านท่ีเป็น N เอา Primary Key ของด้านท่ีเป็น 1 มาใสเ่ป็น
foreign key- แล้วเอา Attribute ของ Entity มาใส่- หากมี Attribute ของ Relation ก็ใสล่งไปด้วย
› ENTITY : RLY STATION 1:N TRAIN ROUTE
RLY STATION
TRAIN ROUTE
› ENTITY : TRAIN TYPE 1:N TRAIN
TRAIN TYPE
TRAIN
› Step 5: Mapping of Binary M:N Relationship Types- สรา้งตารางขึ้นมาใหม่- เอา Primary key ของทัง้สอง Entity มาเป็น foreign key- นำา Attribute ของ Relation มาใส่
ENTITY : RLY STATION M:N TRAIN TYPERLY STATION
CAN_STOP
TRAIN TYPE
› Step 5: Mapping of Multivalued attribute
› SKIP
Railway Reservation System
การทดลองและผลการทดลอง
Data type ของขอ้มูลแต่ละ Column ใน TableRLY STATION
- STATION_ID integer- NAME char(14)- CITY char(5)- STATE char(7)
CAN_STOP
- STATION_ID integer- TRAIN_NAME char(6)
TRAIN_TYPE
-TRAIN_NAME char(6)- MAX_SEATS integer
TRAIN
- TRAIN_NAME char(6)- TRAIN_NO integer- TOTAL_NO_OF_SEAT int(0-50)
TRAIN_ROUTE
- ROUTE_NO integer- TRAIN_NO integer- STATION_ID integer
DEST_ROUTE
- TRAIN_NO integer- WEEK_DAYS date
FARE
- FARE_CODE integer- TRAIN_NO integer- AMOUNTint(50,500000)- RESTRICTIONS char(30)
SEAT
-SEAT_NO integer -DATE date-CUST_NAME char(15)-CUST_PHONE int(10)
ROUTE INSTANCE
-DATE date-NO_OF_AVAL_SEATS int(0-50)-TRAIN_NO integer-ROUTE_NO integer-STATION_ID integer-ARR_TIME timestamp-DEP_TIME timestamp
SQL Statement ท่ีใชส้รา้งตาราง› sqlite>create table RLY_STATON(
Station_ID int ,City varchar(100),Name varchar(100),State varchar(100),primary key(Station_ID) );
› sqlite>create table TRAIN_TYPE ( Train_name varchar(100),
Max_seate int,primary key(Train_name) );
› sqlite>create table TRAIN(Train_NO int ,Total_no_of_seats int,Train_name varchar(100),primary key(Train_NO),foreign key(Train_name)references
TRAIN_TYPE(Train_name) );
› sqlite>create table CAN_STOP(Station_ID int,Train_name varchar(100), primary key(Station_ID, Train_name),foreign key(Station_ID)references RLY_STATON(Station_ID),foreign key(Train_name)references TRAIN_TYPE(Train_name) );
› sqlite>create table TRAIN_ROUTE(
Route_NO int,Station_ID int,Scheduleder_time varchar(100),Schedularr_time varchar(100),Train_NO int,primary key(Route_NO, Train_NO),foreign key(Train_NO),references TRAIN(Train_name),foreign key(Station_ID),references RLY_STATON(Station_ID) );
› sqlite>create table DEST_ROUTE(Train_NO int,Week_day varchar(100),primary key(Train_NO),foreign key(Train_NO)references TRAIN key(Train_NO) );
› sqlite>create table FARE(Train_NO int,Fare_code int,Restrictions varchar(100),Amount int,primary key(Train_NO, Fare_code),foreign key(Train_NO),references TRAIN(Train_NO) );
› sqlite>create table SEAT(Seat_NO int,Date varchar(100),Cust_phone int,Cust_name varchar(100),primary key(Seat_NO, Date),foreign key(Date),references ROUTE_INSTANCE(Date) );
› sqlite>create table ROUTE_INSTANCE (Date varchar(100),No_of_aval_seate int,Train_NO int,Route_NO int,Station_ID int,Arr_time varchar(100),Dep_time varchar(100),primary key(Date),foreign key(Train_NO),references TRAIN(Train_NO) ,foreign key(Route_NO),references
TRAIN_ROUTE(Route_NO),foreign key(Station_ID),references RLY_STATON(Station_ID)
);
Code ท่ีใช้ Insert ขอ้มูลลงใน Databaseimport random, string, sqlite3.connector,timefrom string import ascii_lowercaserfrom random import randint
start_time = time.time()conn = mysql.connector.connect(user='root', password='123456', host='127.0.0.1', database='train')c = conn.cursor()size=[100,150,200,250,300,350,400,450,500]mm=["01","02","03","04","05","06","07","08","09","10","11","12"]re1=["Yes","No"]re2=["Unlimit","15kg","30kg","45kg"]i=1day=1month=1year=0
def twochar(num): if num<10: cha="0"+str(num) else: cha=str(num) return chadef fourchar(no): if(no<10): out="000"+str(no) elif(no<100): out="00"+str(no) elif(no<1000): out='0'+str(no) else: out=str(no) return out
def twochar(num): if num<10: cha="0"+str(num) else: cha=str(num) return chadef fourchar(no): if(no<10): out="000"+str(no) elif(no<100): out="00"+str(no) elif(no<1000): out='0'+str(no) else: out=str(no) return out
while i<=1000000: amount = randint(50,50000) city = ''.join(random.choice(ascii_lowercase) for i in range(10)) tname = ''.join(random.choice(ascii_lowercase) for i in range(15)) rands = randint(0,8) y = randint(0,9999) ye = fourchar(y) ran1 = randint(0,1) ran2 = randint(0,3) res = "Smoke:"+re1[ran1]+"|WeightLimit:"+re2[ran2] m = randint(0,11) d = randint(1,30) y1 = randint(0,9999) m1 = randint(0,11) d1 = randint(1,30) h1 = randint(0,23) i1 = randint(0,59) s1 = randint(0,59)
y2 = randint(0,9999) m2 = randint(0,11) d2 = randint(1,30) h2 = randint(0,23) i2 = randint(0,59) s2 = randint(0,59) if m==1 and d >= 29 : d = 28 if m1==1 and d1 >= 29 : d1 = 28 if m2==1 and d2 >= 29 : d2 = 28 if day>=29 and month==2: day=1 month+=1 elif day>30: day=1 month+=1 if month>12: month=1 year+=1
arr = fourchar(y1)+"-"+mm[m1]+"-"+twochar(d1)+" "+twochar(h1)+":"+twochar(i1)+":"+twochar(s1) dep = fourchar(y2)+"-"+mm[m2]+"-"+twochar(d2)+" "+twochar(h2)+":"+twochar(i2)+":"+twochar(s2) weekday = ye+"-"+mm[m]+"-"+twochar(d) date = fourchar(year)+"-"+twochar(month)+"-"+twochar(day) fname = ''.join(random.choice(ascii_lowercase) for i in range(8)) lname = ''.join(random.choice(ascii_lowercase) for i in range(8)) aname = fname+" "+lname oname = ''.join(random.choice(ascii_lowercase) for i in range(8)) pname = ''.join(random.choice(ascii_lowercase) for i in range(8)) state = ''.join(random.choice(ascii_lowercase) for i in range(7)) rand_name = oname + ' ' + pname phone = ''.join(str(randint(0,9)) for i in range(10)) noaval = randint(0,50) total = size[rands]-noaval
exec_str1 = 'insert into RLY_STATION values ('+str(i)+',"'+city+'","'+rand_name+'","'+state+'")'exec_str2 = 'insert into TRAIN_TYPE values ("'+tname+'",'+str(size[rands])+')'exec_str3 = 'insert into CAN_STOP values ('+str(i)+',"'+tname+'")'exec_str4 = 'insert into TRAIN values ('+str(i)+','+str(total)+',"'+tname+'")'exec_str5 = 'insert into TRAIN_ROUTE values ('+str(i)+','+str(i)+',"'+arr+'","'+dep+'",'+str(i)+')'exec_str6 = 'insert into DEST_ROUTE values ('+str(i)+',"'+weekday+'")'exec_str7 = 'insert into FARE values ('+str(i)+','+str(i)+',"'+res+'",'+str(amount)+')'exec_str8 = 'insert into SEAT values ('+str(i)+',"'+date+'","'+phone+'","'+aname+'")'exec_str9 = 'insert into ROUTE_INSTANCE values ("'+date+'",'+str(noaval)+','+str(i)+','+str(i)+','+str(i)+',"'+arr+'","'+dep+'")'
c.execute(exec_str1) c.execute(exec_str2) c.execute(exec_str3) c.execute(exec_str4) c.execute(exec_str5) c.execute(exec_str6) c.execute(exec_str7) c.execute(exec_str8) c.execute(exec_str9) conn.commit() i+=1 day+=1conn.close()print('---%s seconds---'%(time.time()-start_time))
File Size
การเปรยีบเทียบประสทิธภิาพ
Processor : I3-4030U CPU 1.90 GHz RAM 4 GB
Processor : I7-4710HQ CPU 2.5 GHz RAM 8 GB
MySQL
select * from farewhere Amount = 2000;
125.019 sec 51.118 sec 2.906 sec
select * from TRAIN_TYPEwhere Max_seat = 200;
738.846 sec 540.465 sec 12.688 sec
› Processor: i3-4030U CPU 1.90 GHz RAM : 4.00 GB
Query : select * from fare where Amount = 2000; ครัง้ท่ี 1
ครัง้ท่ี 2
› Processor: i7-4710HQ CPU 2.5 GHz RAM : 8.00 GB
Query : select * from fare where Amount = 2000;
MySQL› Query : select * from fare where Amount = 2000;
› select * from TRAIN_TYPE where Max_seat = 200;
สรุป
› Database หรอืระบบฐานขอ้มูลเป็นระบบสำาหรบั จดัเก็บขอ้มูล กลุ่มของข้อมูลท่ีมคีวามสมัพนัธกั์น
โดยอาศัยการบรหิารจดัการฐานข้อมูลด้วยระบบDBMS
› เราใชร้ะบบฐานขอ้มูลเพื่อแทนระบบเก่าท่ีใชกั้นอยู่ ในยุคก่อน เชน่ ระบบแฟม้ขอ้มูล ซึ่งการจดัเก็บ
ข้อมูลในลักษณะแฟม้ข้อมูลนัน่อาจ จะทำาใหข้้อมูล ชนิดเดียวกัน หรอืเรื่องเดียวกันถกูเก็บไวห้ลาย ๆ
ทำาใหเ้กิดปัญหาต่าง ๆมากมาย› ข้อดีของฐานข้อมูล
- ลดความซำ้าซอ้นของข้อมูล- ไม่เกิดความความขัดแยง้กันของขอ้มูล- สามารถใชข้้อมูลรว่มกันอยา่งมปีระสทิธภิาพ- ใชร้ะบบรกัษาความปลอดภัยเพื่อเพิม่ความปลอดภัยใหกั้บฐานข้อมูล- ควบคุมความเป็นมาตรฐานเดียวกันได้- ข้อมูลเป็นอันหน่ึงอันเดียวกัน ขอ้มูลเรื่องเดียวกันต้องมค่ีาเดียวกัน- ข้อมูลมีความเป็นอิสระ ไม่ขึ้นอยูกั่บโปรแกรมท่ีพฒันาขึ้น
› ขอ้เสยีของฐานขอ้มูล- ระบบฐานขอ้มูลก่อใหเ้กิดต้นทนุสงู เชน่ ซอฟท์แวรท่ี์ใชใ้นการจดัการระบบฐานขอ้มูล บุคลากร ต้นทนุในการปฏิบติังาน และ ฮารด์แวร์ เป็นต้น- การเริม่ใชร้ะบบฐานขอ้มูล อาจก่อใหเ้กิด
ความซบัซอ้นได้ เชน่ การจดัเก็บขอ้มูล การ ออกแบบ การเขยีนโปรแกรม เป็นต้น
- เสีย่งต่อการหยุดชะงักของระบบ เน่ืองจาก ขอ้มูลถกูจดัเก็บไวใ้นลักษณะเป็นศูนยร์วม
ความล้มเหลวของการทำางานบางสว่นในระบบอาจทำาใหร้ะบบฐานขอ้มูลทัง้ระบบหยุดชะงักได้
THANKS YOU !