500 likes | 720 Vues
ครั้งที่ 7 การจัดการไฟล์ และความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล. บรรยายโดย อาจารย์สายสุนนีย์ เจริญสุข. เนื้อหา. การทำ Normalization ขั้นตอนการทำ Normalization การสร้างและใช้งานฐานข้อมูล Access 2007. การจัดการเกี่ยวกับไฟล์ DriveListBOx, DirListBox และ FileListBox Rich Text Box
E N D
ครั้งที่ 7การจัดการไฟล์ และความรู้เบื้องต้นเกี่ยวกับฐานข้อมูล บรรยายโดย อาจารย์สายสุนนีย์ เจริญสุข
เนื้อหา • การทำ Normalization • ขั้นตอนการทำ Normalization • การสร้างและใช้งานฐานข้อมูล Access 2007 • การจัดการเกี่ยวกับไฟล์ • DriveListBOx, DirListBox และ FileListBox • Rich Text Box • ประเภทของไฟล์ • Sequential File • Radom Access File • Binary File • พื้นฐานความรู้เบื้องต้นเรื่องฐานข้อมูล • ฐานข้อมูลคืออะไร • ความสำคัญของฐานข้อมูล • องค์ประกอบในการทำงานร่วมกับของฐานข้อมูล • รู้จักกับฐานข้อมูลเชิงสัมพันธ์(Relational Database)
DriveListBox, DirListBoxและ FileListBox • กำหนดให้ปรากฎที่ ToolBox โดยคลิกขวาเลือก Choose Items และเลือกแท็บ .Net Framework Components แล้วเลือกเครื่องหมายเช็คที่ DriveListBox, DirListBoxและ FileListBox • DriveListBox คือ ออบเจ็กต์ที่ใช้เข้าถึงไดรฟ์ที่ต้องการ • DirListBox คือ ออบเจ็กต์ที่ใช้เข้าถึงโฟลเดอร์ภายในไดรฟ์ที่กำหนด • FileListBox ใช้แสดงไฟล์ที่มีอยู่ในไดเรอทอรีที่กำหนด • อีเวนต์ที่สำคัญของ Drive, Dir, File คือ SelectedIndexChange, SelectedValueChange : เมื่อมีการเปลี่ยนแปลงค่าที่เคยเลือกเอาไว้
DriveListBox, DirListBoxและ FileListBox • พร็อปเพอร์ตี้ (Property) ที่สำคัญ • Drive : หมายถึงไดรฟ์ที่เลือก (สำหรับ DriveListBox) • Path : กำหนดไดเรกทรอรี (สำหรับ DirListBox, FileListBox) • Pattern : กำหนดส่วนขยายของไฟล์ (เช่น .exe, .bmp) (สำหรับ FileListBox) • FileName : ชื่อไฟล์พร้อมไดเรกทอรี (สำหรับ FileListBox)
Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged DirListBox2.Path = DriveListBox1.Drive End Sub Private Sub DirListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DirListBox2.SelectedIndexChanged FileListBox1.Path = DirListBox2.Path End Sub Private Sub FileListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileListBox1.SelectedIndexChanged Label2.Text = DirListBox2.Path & "\" & FileListBox1.FileName End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged FileListBox1.Pattern = TextBox1.Text End Sub
DriveListBox, DirListBoxและ FileListBox • คำสั่งและฟังก์ชันที่น่าสนใจเกี่ยวกับการจัดการไฟล์ • Dir : เป็นการค้นหาว่าในไดเรกทอรีนั้นมีไฟล์ตามที่ระบุหรือไม่ ถ้ามีจะส่งชื่อไฟล์นั้นกลับมา หากไม่มีจะส่งเป็น “ “ ถ้าหากเราระบุเป็น Pattern เช่น *.exe จะส่งชื่อไฟล์แรกที่พบกลับมา รูปแบบ Dir “ไดเรกทรอรี” เช่น “C:\windows\”.exe” • ChDir : เปลี่ยนไปยัง Dir ที่กำหนด • MkDir : สร้าง dir ตามที่ระบุ • RmDir : ลบ dir ที่ระบุ • Kill : ลบไฟล์ที่ระบุ เช่น Kill(“c:\pic\test.jpg”) • FileLen : หาขนาดของไฟล์ในหน่วย Byte เช่น • x = FileLen(“C:\windows\readme.txt”) • FileDateTime : ตรวจสอบวันที่และเวลาที่มีการอัปเดตไฟล์ครั้งล่าสุด เช่น FileDateTime(“C:\Secrets\hacking.txt”) • FileCopy : เป็นการคัดลอกไฟล์จากต้นทางไปยังปลายทาง โดยใช้รูปแบบ FileCopy ต้นทาง,ปลายทาง เช่น FileCopy(“C:\mygirl\pic1.jpg”,”c:\Picture2”)
Rich Text BOx • เป็น Text Box สารพัดประโยชน์ที่สามารถจัดการเกี่ยวกับ Text ได้อย่างหลากหลาย เช่น การเปิดไฟล์ แก้ไขไฟล์ บันทึกไฟล์ เป็นต้น • Method ที่สำคัญ • Find : ค้นหาข้อความใน RTF • GetLineFromCharIndex : ค้นหาบรรทัดที่มีข้อความที่กำหนด • LoadFile : โหลดไฟล์เข้ามาเปิดใน RichTextBox โดยกำหนดพาธ เช่น RichTextBox1.LoadFile(“c:\redme.rtf”) • SaveFile : บันทึกไฟล์ • Property ที่สำคัญ • HideSelection : จะซ่อนแถบสีของข้อความที่เลือกหรือไม่ • SelectedText : ข้อความที่เลือก • SelectionColor : สีของข้อความที่เลือก • SelectionFont : รูปแบบของตัวอักษรของข้อความที่เลือก • SelectionLength : ความยาวของข้อความที่เลือก • SelectionStart : จุดเริ่มต้นของข้อความที่เลือก
ตัวอย่าง นำ RichTextBox,OpenFileDialog,SaveFileDialog,Button, TextBox มาวางดังรูป โดยกำหนด Name ของ Button เป็น BtnLoadFile, BtnSaveFile และ BtnFind ตามลำดับ
Private Sub BtSaveFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtSaveFile.Click SaveFileDialog1.ShowDialog() RichTextBox1.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End Sub Private Sub BtnLoadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLoadFile.Click OpenFileDialog1.Filter = "Text File(*.txt | *.txt" OpenFileDialog1.ShowDialog() RichTextBox1.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText) End Sub Private Sub BtFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtFind.Click Dim FoundPos As Integer Dim foundLine As Integer RichTextBox1.HideSelection = False If TextBox1.Text <> " " Then FoundPos = RichTextBox1.Find(TextBox1.Text) If FoundPos <> -1 Then foundLine = RichTextBox1.GetLineFromCharIndex(FoundPos) Else MsgBox("Word not found") End If End If End Sub
ประเภทของไฟล์ • Sequential File : เป็นไฟล์ที่เก็บข้อมูลในรูปแบบ ASCIIในการเข้าถึงไฟล์ชนิดนี้จะต้องเริ่มจากต้นไฟล์ไปจนถึงสุดท้ายที่กำหนด โดยไม่สามารถเลือกอ่านเฉพาะช่วงที่ต้องการได้ • Random Access File : ไฟล์ชนิดนี้มีโครงสร้างเป็นเรคอร์ดที่มีขนาดคงที่และเหมือนกันทุกเรคอร์ดโดยเราสามารถเข้าถึงเรคอร์ดที่ต้องการได้ทันทีโดยไม่จำเป็นต้องเริ่มจากต้นไฟล์ แต่ไฟล์ชนิดนี้แม้ว่าขนาดของข้อมูลจะไม่เต็มความยาวของเรคอร์ด แต่เนื้อที่ในการจัดเก็บยังเท่าเดิม เช่น ความยาวเรคอร์ดเท่ากับ 100 แต่เราเก็บข้อมูลเพียง 30 ส่วนอี 70 จะเหลือเป็นพื้นที่ว่าง ทำให้ไฟล์ชนิดนี้ต้องใช้พื้นที่มากกว่าแบบแรก • Binary File : เป็นไฟล์ที่ใช้ระบบการจัดเก็บข้อมูลในรูปแบบพิเศษ โดยจะเก็บตามขนาดของข้อมูลจริงทำให้ไฟล์มีขนาดเล็กและสามารถทำงานได้เร็ว
การหา File Number ด้วย FreeFile • การหาพื้นที่ว่างสำหรับเปิดไฟล์จะใช้คำสั่ง FreeFile โดยค่าที่คืนกลับมาจะเป็นพื้นที่แรกสุดที่หาพบ ลักษณะการกำหนดใช้งานคือ ตัวแปร = FreeFile() • ตัวอย่าง การเปิดไฟล์ สมมติไฟล์ที่ต้องการเปิดชื่อ TestFile • การเปิดไฟล์ Input Mode => FileOpen(1, “TestFile”,OpenMode.Input) • การเปิดไฟล์ใน Binary Mode โดยสามารถเขียนได้อย่างเดียว => • FileOpen(1,”TestFile”, OpenMode.Input) • การเปิดไฟล์ใน Random Mode โดยไฟล์บรรจุ records ของ structure Person • Structure Person • <VBFixedString(30)> Dim Name as string • dim ID as Integer • End Structure • ‘Count 30 for the string, plus 4 for the integer • FileOpen(1, “TestFile”,OpenMode.Random, , ,34)
ตัวอย่าง การเปิดไฟล์ สมมติไฟล์ที่ต้องการเปิดชื่อ TestFile (ต่อ) • การเปิดไฟล์ใน Output Mode สามารถ read หรือ write ไฟล์ได้จากโพรเซสอื่นๆ • FileOpen(1, “TestFile”, OpenMode.Output, OpenShare.shared) • การเปิดไฟล์ใน Binary Mode ให้สามารถอ่านได้อย่างเดียว แต่ไม่สามารถอ่านได้จากโพรเซส์อื่น => • FileOpen(1,”TestFile”, OpenMode.Binary,OpenAccess.Read,OpenShare.LockRead) • การปิดไฟล์ : การปิดไฟล์เพื่อคืนพื้นที่ให้กับหน่วยความจำ และควรทำทุกครั้งหลัการปิด • ใช้งานไฟล์ โดยมีรูปแบบคือ FileClose(FileNumber)
การหาขนาดและจุดสิ้นสุดการหาขนาดและจุดสิ้นสุด • การหาขนาดของไฟล์ที่เปิดใช้งานอยู่โดยใช้คำสั่ง LOF(FileNumber) • การหาจุดสิ้นสุดไฟล์ สำหรับการเปิดไฟล์ Mode Random หรือ Input โดยใช้คำสั่ง EOF(FileNumber) • ตัวอย่าง Private Sub btnLOF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLOF.Click Dim length As Integer FileOpen(1, "E:\data\eau\testfile.txt", OpenMode.Input) 'Open file length = LOF(1) 'Get length of file MsgBox(length) FileClose(1) 'close file End Sub
Private Sub btnEOF_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEOF.Click Dim textLine As String FileOpen(1, "E:\data\eau\testfile.txt", OpenMode.Input) 'Open file Do While Not EOF(1) 'Loop untill end of file textLine = LineInput(1) 'Read line into variable MsgBox(textLine) 'Print to the Message BOX. Loop FileClose(1) 'Close file End Sub
Sequential File • การอ่านข้อมูลจาก Sequential File ถ้าต้องการอ่านข้อมูล ต้องนำข้อมูลจาก Memory ออกมาแสดงโดยใช้ฟังก์ชัน Input • รูปแบบ Input(FileNumer,Value) โดยที่ Value คือตัวแปร • รูปแบบ InputString(FileName,CharCount) โดยที่ CharCount หมายถึง จำนวน Character ที่ต้องการอ่าน ตัวอย่าง ให้เปิดโปรแกรม NotePad จากนั้นพิมพ์ข้ความ aaa, bbbb,ccccc,dddddd แล้วบันทึกที่ E:\Data\EAU\abcd.txt
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim myChar As String Dim fiNum As Integer fiNum = FreeFile() FileOpen(fiNum, "E:/data/eau/abcd.txt", OpenMode.Input) 'Open File myChar = (InputString(fiNum, 3)) ' Get first three characters MsgBox(myChar) 'Print to the output window FileClose(fiNum) End Sub
Sequential File • การเพิ่มข้อมูลลงใน Sequential File • จะเป็นการนำข้อมูลใหม่มาต่อท้ายข้อมูลเดิม โดยระบุใช้คำสั่ง Append ในโหมดเปิดไฟล์ • การเพิ่มข้อมูลลงไฟล์ใช้คำสั่ง Print หรือ PrintLine • รูปแบบ Print(FileName,data) โดยที่ data หมายถึง ข้อมูลที่จะเขียนลงไป ตัวอย่าง จะเพิ่มข้อมูลที่ E:\Data\EAU\abcd.txt
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim myChar As String Dim fiNum As Integer fiNum = FreeFile() myChar = "Saisunee" FileOpen(fiNum, "E:/data/eau/abcd.txt", OpenMode.Append) PrintLine(fiNum, " ") 'new line Print(fiNum, myChar) FileClose(fiNum) End Sub
Sequential File • การบันทึกข้อมูลลงในไฟล์ • จะเป็นการนำข้อมูลที่เราสร้างขึ้นเก็บไว้ในไฟล์ ถ้าหากมีไฟล์ชื่อนั้นอยู่ในไดเรกทอรีนั้นๆ อยู่แล้วจะเป็นการแทนที่เนื้อหาเดิม หากไม่มีจะสร้างไฟล์นั้นให้โดยอัตโนมัติ โดยการใช้โหมด Output ในตอนเปิดไฟล์แทนคำว่า Input • การเพิ่มข้อมูลลงไฟล์ใช้คำสั่ง Print หรือ PrintLine • รูปแบบ Print(FileName,data) โดยที่ data หมายถึง ข้อมูลที่จะเขียนลงไป ตัวอย่าง จะเพิ่มข้อมูลที่ E:\Data\EAU\abcd.txt
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim myChar As String Dim fiNum As Integer fiNum = FreeFile() myChar = InputBox("Enter Text") FileOpen(fiNum, "E:/data/eau/TestSave.txt", OpenMode.Output) PrintLine(fiNum, " ") 'new line Print(fiNum, myChar) FileClose(fiNum) End Sub
Random Access File • การสร้าง Random Access File • ใช้โหมด Random ในขั้นตอนการเปิดไฟล์ และใช้คำสั่ง FilePut ในการบันทึกข้อมูล • รูปแบบ FilePut(FileNumber,recorData,recordNumber) โดยที่ recordData หมายถึง ข้อมูลของเรคอร์ดที่ต้องการ recordNumber หมายถึง หมายเลขเรคอร์ดที่ต้องการบันทึก • ในการกำหนดขนาดของข้อมูลที่จะใส่ลงในแต่ละเรคอร์ด มักกำหนดตัวแปรแบบ Structure เนื่องจากสามารถกำหนดความยาวของข้อมูลได้ ตัวอย่าง เพิ่มโมดูลเข้ามาในโปรเจ็กต์
Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim i, x As Integer Dim rec As myRecord i = FreeFile() FileOpen(i, "E:/data/eau/product.txt", OpenMode.Random, , , Len(rec)) For x = 1 To 5 rec.ID = x rec.Product = "Product -" & x rec.Price = x * 100 rec.Nxt = vbCrLf FilePut(i, rec, x) Next x FileClose(i) End Sub
Random Access File • การอ่านข้อมูลจาก Random Access File • ใช้คำสั่ง FileGet • รูปแบบ FileGet(FileNumber,recorData,recordNumber) โดยที่ recordData หมายถึง ข้อมูลของเรคอร์ดที่ต้องการ recordNumber หมายถึง หมายเลขเรคอร์ดที่ต้องการบันทึก ตัวอย่าง เพิ่มโมดูลเข้ามาในโปรเจ็กต์
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i, x As Integer Dim rec As myRecord i = FreeFile() FileOpen(i, "E:/data/eau/product.txt", OpenMode.Random, , , Len(rec)) x = TextBox1.Text FileGet(i, rec, x) TextBox2.Text = rec.ID TextBox3.Text = rec.Product TextBox4.Text = rec.Price FileClose(i) End Sub
Binary File • การเขียนข้อมูลแบบ Binary File • ใช้คำสั่ง FilePut • รูปแบบ FilePut(FileNumber, Data,Position) โดยที่ Position หมายถึง ตำแหน่งที่ต้องการใส่ข้อมูลลงไป • รูปแบบ FileGet(FileNumber, Data,Position) โดยที่ Position อาจหาได้โดยการใช้ฟังก์ชัน Seek(FillNumber) เช่น Pos = Seek(1) ตัวอย่าง เพิ่มโมดูลเข้ามาในโปรเจ็กต์
Private Sub BtnAddData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim pos, free As Integer Dim Myrecord As Record free = FreeFile() 'Open file for binary file FileOpen(free, "E:/data/eau/products2.txt", OpenMode.Binary) Myrecord.ID = TxtID.Text Myrecord.Product = TxtProduct.Text Myrecord.Price = TxtPrice.Text Myrecord.Nxt = vbCrLf 'New Line pos = LOF(1) + 1 FilePut(free, Myrecord, CInt(pos)) ‘ Write Data FileClose(free) TxtID.Text = " " TxtProduct.Text = " " TxtPrice.Text = "“ End Sub
Private Sub BtnReadData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnReadData.Click Dim i, free As Integer Dim str As String Dim Myrecord(5) As Record str = " " free = FreeFile() FileOpen(free, "E:/data/eau/products2.txt", OpenMode.Binary) 'Open binary For i = 1 To 5 FileGet(free, Myrecord(i)) 'read each record and keep in myrecord str += Myrecord(i).ID & " " & Myrecord(i).Product & " " & Myrecord(i).Price & vbCrLf Next MsgBox(str) FileClose(free) End Sub
ฐานข้อมูลคืออะไร • ฐานข้อมูล คือ: กลุ่มข้อมูลที่มีความสัมพันธ์กันและถูกเก็บรวบรวมไว้ในที่เดียวกันอย่างเป็นระบบ เพื่อนำไปใช้ในวัตถุประสงค์อย่างใดอย่างหนึ่งโดยกลุ่มผู้ใช้ตั้งแต่หนึ่งกลุ่มขึ้นไป • ข้อมูล (Data): ข้อเท็จจริงต่างๆ (real facts) ที่เกี่ยวข้องหรือแสดงคุณลักษณะของบุคคล สิ่งของ สถานที่ หรือเหตุการณ์ใดๆ ที่เป็นได้ทั้งตัวเลขเช่น ราคา ปริมาณ ส่วนสูง น้ำหนัก ระยะทาง รหัสวิชา เกรดเฉลี่ย และข้อเท็จจริงที่ไม่ใช่ตัวเลข เช่น ชื่อ นามสกุล ที่อยู่ ชื่อสินค้า ข้อความ รูปภาพ หรืออื่นๆ เป็นต้น
สรุปลักษณะที่สำคัญของฐานข้อมูลมีดังนี้สรุปลักษณะที่สำคัญของฐานข้อมูลมีดังนี้ • ข้อมูลทั้งหมดจะต้องมีความสัมพันธ์กันและถูกเก็บรวบรวมไว้ด้วยกัน • ต้องมีการจัดการข้อมูลน้นอย่างเป็นระบบ • ต้องสามารถนำข้อมูลนั้นไปใช้ได้ตามต้องการ • ตัวอย่าง • สมุดโทรศัพท์ ซึ่งมีข้อมูลเกี่ยวกับชื่อ ที่อยู่เบอร์โทรศัพท์ของบุคคลทั่วไป บริษัท ห้างร้าน องค์กรต่างๆ ทั้งภาครัฐและเอกชน • ข้อมูลในบริษัท เช่น ข้อมูลพนักงาน ข้อมูลลูกค้า ข้อมูลสินค้า ข้อมูลการสั่งซื้อสินค้าของลูกค้าแต่ละราย • ข้อมูลทะเบียนนักศึกษา เช่น รหัสประจำตัว ชื่อ-นามสกุล ที่อยู่ รหัสคณะ รหัสสาขาวิชา และอื่นๆที่เกี่ยวข้อง • ข้อมูลทะเบียนสำมะโนประชากรของประเทศ และอื่นๆ เป็นต้น
โครงสร้างข้อมูล • บิต(Bit) ย่อมาจาก Binary digit เป็นหน่วยข้อมูลที่เล็กที่สุด แทนด้วยเลขฐานสอง (0 หรือ 1 ) • ไบต์(Byte) คือ กลุ่มของบิตที่แทนตัวอักษร ตัวเลข หรือสัญลักษณ์พิเศษที่นำมารวมกันแล้วมีความหมาย เช่น ฟิลด์ชื่อสินค้า เก็บกลุ่มตัวอักษรที่แสดงชื่อสินค้า ฟิล์ราคาสินค้า เก็บกลุ่มตัวเลขที่แสดงราคาสินค้าต่อหน่วย เป็นต้น • เรคอร์ด (Record) หรือระเบียนข้อมูล ประกอบด้วยกลุ่มของฟิลด์ที่มีความสัมพันธ์กัน เช่น เรคอร์ดพนักงานจะมีฟิลด์รหัสพนักงาน ชื่อ นามสกุล แผนก ตำแหน่ง สถานภาพสมรส วันเข้าทำงาน ที่อยู่ และอื่นๆ โดย 1 เรคอร์ดจะเก็บข้อมูลพนักงาน 1 คน ในฟิลด์เดียวกันของทุกๆเรคอร์ดจะต้องเก็บข้อมูลชนิดเดียวกัน เช่น ฟิลด์ชื่อพนักงาน • ไฟล์ (File) หรือแฟ้มข้อมูล คือกลุ่มเรคอร์ดหลายๆเรคอร์ดที่เก็บข้อมูลซึ่งเป็นเรื่องเดียวกัน เช่น ไฟล์ข้อมูลพนักงาน ไฟล์ข้อมูลลูกค้า ไฟล์ข้อมูลการสั่งซื้อสินค้า ไฟล์ข้อมูลสินค้า เป็นต้น
ตัวอย่าง ไฟล์ข้อมูลพนักงานของบริษัทแห่งหนึ่ง ชื่อฟิลด์ (Field Name) ฟิลด์ (Field) เรคอร์ด (Record)
ไฟล์ข้อมูลพนักงาน ความสำคัญของฐานข้อมูล ไฟล์ข้อมูลการทำงานล่วงเวลา โปรแกรม Personnel ไฟล์ข้อมูลขาด/ลา/มาสาย แผนกบุคคล ไฟล์ข้อมูลรายได้/รายจ่าย โปรแกรม Payroll ไฟล์ข้อมูลคำนวณภาษี ไฟล์ข้อมูลพนักงานขาย ไฟล์ข้อมูลลูกค้า โปรแกรม Sales Analysis & Evaluation แผนกตลาด ไฟล์ข้อมูลการสั่งซื้อ ไฟล์ข้อมูลการส่งสินค้า ไฟล์ข้อมูลสินค้าคงคลัง ไฟล์ข้อมูลผู้ขาย แผนกจัดซื้อ โปรแกรม Inventory Control ไฟล์ข้อมูลจัดซื้อ ไฟล์ข้อมูลเบิกจ่ายสินค้า ไฟล์ข้อมูลสินค้าคงคลัง
ไฟล์ข้อมูลพนักงาน องค์ประกอบในการทำงานร่วมกับฐานข้อมูล ไฟล์ข้อมูลการทำงานล่วงเวลา โปรแกรม Personnel ไฟล์ข้อมูลขาด/ลา/มาสาย แผนกบุคคล ไฟล์ข้อมูลรายได้/รายจ่าย โปรแกรม Payroll ไฟล์ข้อมูลคำนวณภาษี DBMS ไฟล์ข้อมูลพนักงานขาย ไฟล์ข้อมูลลูกค้า โปรแกรม Sales Analysis & Evaluation แผนกตลาด ไฟล์ข้อมูลการสั่งซื้อ ไฟล์ข้อมูลการส่งสินค้า ไฟล์ข้อมูลสินค้าคงคลัง ไฟล์ข้อมูลผู้ขาย แผนกจัดซื้อ โปรแกรม Inventory Control ไฟล์ข้อมูลจัดซื้อ ไฟล์ข้อมูลเบิกจ่ายสินค้า ไฟล์ข้อมูลสินค้าคงคลัง
Table ลูกค้า รู้จักกับฐานข้อมูลเชิงสัมพันธ์ (Relational Database) Table สินค้า Table การสั่งซื้อ
ชนิดของความสัมพันธ์ระหว่างตารางชนิดของความสัมพันธ์ระหว่างตาราง • ความสัมพันธ์ของข้อมูลรหว่างตาราง สามารถแยกออกได้ 3 ชนิดคือ • One-To-One : ข้อมูล 1 เร็คคอร์ดที่อยู่ในตารางหนึ่งมีความสัมพันธ์หรือเชื่อมโยงกับข้อมูลที่อยู่ในอีกตารางหนึ่ง โดยที่สามารถอ้างอิงได้เพียง 1 เร็คคอร์ดเท่านั้น เช่น นักศึกษา 1 คน มีรหัสประจำตัวได้ 1 หมายเลข ในทางกลับกันรหัสประจำตัวแต่ละหมายเลขสามารถอ้างอิงนักศึกษาได้ 1 คนเท่านั้น • One-To-Many : ข้อมูล 1 เร็คคอร์ดที่อยู่ในตารางหนึ่งมีความสัมพันธ์หรือเชื่อมโยงกับข้อมูลที่อยู่ในอีกตารางหนึ่ง โดยที่สามารถอ้างอิงได้มากกว่า 1 เร็คคอร์ด เช่น มหาวิทยาลัยมีนักศึกษาได้หลายคนในทางกลับกันมีนักศึกษาหลายคนศึกษาในมหาวิทยาลัยเดียวกัน • Many-To-Many : ข้อมูลหลายเร็คคอร์ดที่อยู่ในตารางหนึ่งมีความสัมพันธ์หรือเชื่อมโยงกับข้อมูลที่อยู่ในอีกตารางหนึ่ง โดยที่สามารถอ้างอิงข้อมูลได้มากกว่า 1 เร็คคอร์ด เช่น นักศึกษา 1 คนลงทะเบียนได้หลายวิชา และแต่ละวิชามีนักศึกษาลงทะเบียนได้หลายคนเช่นกัน
Normalization • Normalization : ขั้นตอนหรือกระบวนการที่ใช้สำหรับจัดระเบียบ,สจัดรูปแบบ,จัดโครงสร้าง, ลดความซ้ำซ้อนของข้อมูลที่คุณจัดเก็บในแต่ละตาราง เพื่อให้ข้อมูลที่เก็บอยู่มีความน่าเชื่อถือไม่ขัดแย้งกันเอง • การทำ Normalizaton กับฐานข้อมูล เป็นการแบ่งตารางออกเป็นตารางย่อยๆ ตารางที่แบ่งย่อยออกมาจะถูกเรียกเป็นระดับๆ ว่า Normal Form มีทั้งหมด 5ระดับคือ First Normal Form(1NF) ไปจนถึง 5NF แล้วแต่ว่าฐานข้อมูลมีขอบเขตการใช้งานและขนาดของฐานข้อมูลมากเท่าใด เงื่อนไขการทำงานของระบบ • การทำ Normalization อีกวิธีเรียกว่า BCNF (Boyce-Codd Normal Form) อาจเรียกวิธีลัดในการทำให้ตารางอยู่ในระดับ 3NF โดยไม่ตามลำดับ 1NF ไปจนถึง 3NF
จุดประสงค์ในการทำ Normalization • ควบคุมความถูกต้องของข้อมูล : ป้องกันไม่ให้ข้อมูลขัดแย้งกันเอง เช่น ตารางข้อมูลลูกค้ากับตารางขายสินค้า สมมติว่า ลูกค้าเปลี่ยนชื่อ-นามสกุล ส่งผลให้ข้อมูลในตารางลูกค้ากับตารางขายสินค้าต้องเปลี่ยนไปทั้ง 2 ตาราง • ควบคุมและจัดการข้อมูลได้ง่าย : สามารถปรับปรุง แก้ไข และเพิ่มเติมข้อมูลในฐานข้อมูลของคุณโดยที่มีขั้นตอนเท่าที่จำเป็นเท่านั้น เพื่อให้เกิดประสิทธิภาพในการทำงานของระบบมากที่สุดเช่น สมมติว่า บริษัทต้องการเพิ่มเติมรายการสินค้าที่ต้องการขาย ควรที่จะเกี่ยวข้องกับตารางสินค้าเท่านั้น ไม่ควรไปเกี่ยวข้องกับตารางอื่นๆ ในฐานข้อมูล ไม่ใช่ว่าต้องการเพิ่มรายการสินค้ารายการเดียวแต่ต้องไปแก้ไข 5 ตาราง 10 ตาราง หรือพนักงานย้ายแผนกแต่ต้องไปแก้ไขตารางอื่นอีกมากมาย เป็นต้น
ขั้นที่สอง • ในขั้นตอนนี้ต้องแก้ไขให้ตาราง TranID แสดงข้อมูลว่า นักศึกษาคนใดลงทะเบียนวิชาใดบ้าง ซึ่งเป็นข้อมูลของตารางเดิมที่มีอยู่ก่อนการแก้ไข ส่วนตาราง Student และตาราง Major ใช้ได้แล้ว มีเหตุผลคือ • ทราบมหาวิทยาลัยนี้เปิดสอนกี่สาขา โดยดูจากตาราง Major • ถ้ามีนักศึกษาใหม่เพิ่มเข้ามา จะเพิ่มชื่อที่ตาราง Student เพียงตารางเดียว • ถ้านักศึกษาต้องการเปลี่ยนชื่อ-นามสกุล หรือเปลี่ยนสาขา คุณก็สามารถแก้ไขที่ตาราง Student เดียวเท่านั้น • ข้อเสียของตาราง TranID มีดังนี้ • ข้อมูลที่อยู่ในเร็คคอร์ดจะมีค่าซ้ำซ้อนเท่ากับจำนวนนักศึกษาที่ลงทะเบียน ซึ่งจะเหมือนกับตาราง Student เดิมในตอนแรก และถ้าในภายหลังนักศึกษาต้องการลงทะเบียนเรียนเพิ่มทุกคน จะเกิดความซ้ำซ้อนเพิ่มมากขึ้นไปอีก • ถ้าต้องการเปิดสอนวิชาใหม่ ไม่สามารถเพิ่มได้เพราะว่า เมื่อเพิ่มเข้ามา 10 วิชา จะไปเพิ่มรหัสนักศึกษา 10 หมายเลข ดังนั้นฟิวด์ StudentID กับ CourseIDไม่ควรอยู่ด้วยกัน
ขั้นที่สาม • ในขั้นตอนนี้พิจารณาว่าในใบลงทะเบียนควรจะมีข้อมูลอะไรบ้าง ซึ่งควรจะมีใบลงทะเบียน , รหัสนักศึกษา, รหัสวิชา, ชื่อวิชา และหน่วยกิตของแต่ละวิชา ดังตัวอย่าง
แบบฝึกหัดท้ายบท ข้อที่ 1 จงออกแบบฐานข้อมูลของระบบสารสนเทศที่แต่ละกลุ่มได้ยื่นหัวข้อไว้ โดยให้ทำการ Normalization ด้วย