คำว่าความสมบูรณ์ของข้อมูลหมายถึงอะไร ความสมบูรณ์ของฐานข้อมูล ความสมบูรณ์ของข้อมูลเชิงความหมาย

ความสมบูรณ์ของข้อมูลและขั้นตอนการจัดเก็บ

คำว่า "ความสมบูรณ์ของข้อมูล" เราหมายถึงสถานะของฐานข้อมูลเมื่อข้อมูลทั้งหมดที่จัดเก็บไว้ในนั้นถูกต้อง หากข้อมูลที่ไม่ถูกต้องถูกเก็บไว้ในฐานข้อมูล ความสมบูรณ์ของข้อมูลจะสูญหายไป ในส่วนนี้เราจะอธิบาย วิธีการต่างๆการรักษาความสมบูรณ์ของข้อมูลและประเภทความสมบูรณ์ที่กำหนดไว้ในฐานข้อมูล เซิร์ฟเวอร์ SQLตลอดจนข้อจำกัดประเภทต่างๆ ที่ทำหน้าที่ในการใช้ความสมบูรณ์ถูกต้องของข้อมูลและวิธีการนำข้อจำกัดเหล่านี้ไปใช้ในฐานข้อมูล

ใน ตาราง SQLสามารถกำหนดเซิร์ฟเวอร์ด้วยคุณสมบัติหลายประเภทหลายประเภทเพื่อให้มั่นใจถึงความสมบูรณ์ของข้อมูล ซึ่งรวมถึงประเภทข้อมูล คำจำกัดความ ไม่เป็นโมฆะและ ค่าเริ่มต้น, คุณสมบัติ ตัวตนข้อจำกัด กฎ ทริกเกอร์ และดัชนี

ในส่วนนี้ เราจะเรียนรู้เกี่ยวกับวิธีการความสมบูรณ์ของข้อมูลทั้งหมดและประเภทของความสมบูรณ์ของข้อมูลที่ SQL Server รองรับ เราก็จะอุทิศเวลาเช่นกัน ประเภทต่างๆความสมบูรณ์ของข้อมูล รวมถึงเอนทิตี โดเมน การอ้างอิง และความสมบูรณ์ที่ผู้ใช้กำหนด

การตรวจสอบความสมบูรณ์ของข้อมูลช่วยรับประกันคุณภาพของข้อมูล สมมติว่าเราได้สร้างตารางในฐานข้อมูล บุคคล- ค่าคอลัมน์ รหัสบุคคลต้องระบุบุคคลที่ป้อนข้อมูลลงในตารางโดยไม่ซ้ำกัน ดังนั้นหากมีค่า รหัสบุคคลสำหรับบุคคลหนึ่งคือ 834 ดังนั้นสำหรับบุคคลอื่น ค่านี้จะเท่ากันไม่ได้ ต่อไป สมมติว่ามีคอลัมน์ การให้คะแนนบุคคลซึ่งกำหนดการจัดอันดับบุคคล - อยู่ในช่วงตั้งแต่ 1 ถึง 10 ในกรณีนี้คือคอลัมน์ การให้คะแนนบุคคลไม่ควรยอมรับตัวเลข 11 หรือค่าใดๆ นอกเหนือจากตัวเลขตั้งแต่ 1 ถึง 10 ในทั้งสองกรณี คุณควรใช้วิธีใดวิธีหนึ่งที่ SQL Server รองรับเพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์

ในบรรดาวิธีการของ SQL Server ที่ออกแบบมาเพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์นั้นเป็นคำจำกัดความ ไม่เป็นโมฆะและ ค่าเริ่มต้น, คุณสมบัติ ตัวตนข้อจำกัด กฎ ทริกเกอร์ และดัชนี บางส่วนได้ถูกกล่าวถึงไปแล้ว มาให้ ณ ที่นี้ คำอธิบายสั้น ๆ- คุณสมบัติตารางบางอย่าง เช่น คำจำกัดความ ไม่เป็นโมฆะและ ค่าเริ่มต้นบางครั้งถือเป็นข้อจำกัดประเภทพิเศษ อย่างไรก็ตาม ตามวัตถุประสงค์ของหลักสูตร เราจะพิจารณาแยกจากข้อจำกัดต่างๆ

ชนิดข้อมูลเป็นแอตทริบิวต์ที่ระบุประเภท (อักขระ จำนวนเต็ม ไบนารี ฯลฯ) ของข้อมูลที่สามารถจัดเก็บไว้ในฟิลด์ พารามิเตอร์ หรือตัวแปร SQL Server รองรับข้อมูลระบบหลายประเภทซึ่งคุณสามารถสร้างชนิดข้อมูลแบบกำหนดเองได้ ชนิดข้อมูลระบบกำหนดชนิดข้อมูลทั้งหมดที่สามารถใช้ใน SQL Server ประเภทช่วยให้มั่นใจในความสมบูรณ์ของข้อมูลเนื่องจากข้อมูลที่ป้อนจะต้องตรงกับประเภทที่ระบุสำหรับออบเจ็กต์



ตัวอย่างเช่น คุณไม่สามารถจัดเก็บนามสกุลในคอลัมน์ที่มีการกำหนดชนิดข้อมูลได้ วันที่และเวลาเนื่องจากคอลัมน์ที่มีประเภทข้อมูลนี้ยอมรับเฉพาะวันที่เท่านั้น

โดยการตั้งค่าฟิลด์ให้อนุญาตค่า Null เราจะพิจารณาว่าคอลัมน์ในตารางนั้นสามารถเก็บค่า Null ได้หรือไม่ ค่า Null ที่ไม่ใช่ศูนย์ ช่องว่าง หรือ สายอักขระความยาวเป็นศูนย์ เช่น "" ค่าว่างหมายความว่าไม่มีการป้อนข้อมูล กล่าวคือ ไม่ทราบค่าหรือไม่ได้กำหนด ความสามารถในการป้อนค่า Null ลงในคอลัมน์จะถูกระบุเมื่อมีการกำหนดคอลัมน์ระหว่างการสร้างตารางหรือการแก้ไขตาราง เนื่องจากความซับซ้อนที่เกี่ยวข้องกับการจัดการค่า Null ใน SQL Server คุณจึงควรใช้คำหลักเพื่อกำหนดทั้งคอลัมน์ที่เป็นค่าว่างและไม่เป็นค่าว่างเสมอ โมฆะหรือ ไม่เป็นโมฆะ- หากคอลัมน์อนุญาตให้มีค่าว่าง ให้ใช้ คำหลัก โมฆะ, ถ้าไม่ - ไม่เป็นโมฆะ.

ค่าเริ่มต้นระบุค่าที่จะใช้หากไม่ได้ระบุค่าฟิลด์เมื่อเพิ่มแถว คำจำกัดความ ค่าเริ่มต้นสร้างขึ้นเมื่อมีการกำหนดตาราง (เป็นส่วนหนึ่งของคำจำกัดความนั้น) หรือเพิ่มลงในตารางที่มีอยู่ อนุญาตให้ใช้ DEFAULT ได้เพียงรายการเดียวต่อคอลัมน์

ในตารางใดๆ คุณได้รับอนุญาตให้สร้างคอลัมน์เดียวที่มีค่าลำดับที่ระบบสร้างขึ้นซึ่งระบุแต่ละแถวในตารางโดยไม่ซ้ำกัน โดยทั่วไปแล้วค่าคอลัมน์ ID จะไม่ซ้ำกันภายในตารางที่กำหนดไว้ กล่าวอีกนัยหนึ่งอาจเป็นไปได้ว่าค่าของคอลัมน์ตัวระบุอาจเหมือนกันในตารางที่ต่างกัน อย่างไรก็ตาม สถานการณ์ดังกล่าวมักจะไม่ก่อให้เกิดปัญหา เนื่องจากค่า ID มักจะใช้ในบริบทของตารางเดียวกัน และคอลัมน์ ID จากตารางที่ต่างกันจะไม่เกี่ยวข้องกัน

ข้อจำกัดช่วยให้คุณกำหนดวิธีที่ SQL Server บังคับใช้ความสมบูรณ์ของข้อมูลโดยอัตโนมัติ ข้อจำกัดกำหนดกฎที่ตรวจสอบค่าคอลัมน์ที่ถูกต้องและเป็นกลไกความสมบูรณ์มาตรฐาน ข้อจำกัดจะดีกว่าทริกเกอร์ กฎ หรือค่าเริ่มต้น เครื่องมือเพิ่มประสิทธิภาพแบบสอบถามยังใช้เพื่อสร้างแผนการสืบค้นที่มีประสิทธิภาพสูง

กฎทำหน้าที่หลายอย่างคล้ายกับฟังก์ชันข้อจำกัด ตรวจสอบและใช้เพื่อให้แน่ใจว่าเข้ากันได้กับเวอร์ชันก่อนหน้า ควรใช้ข้อจำกัดมากกว่า ตรวจสอบซึ่งก็คือ ในลักษณะมาตรฐานข้อจำกัดค่าฟิลด์ นอกจากนี้ข้อจำกัดต่างๆ ตรวจสอบชัดเจนกว่ากฎเกณฑ์ คุณสามารถใช้กฎได้เพียงกฎเดียวกับคอลัมน์ ในขณะที่สามารถกำหนดข้อจำกัดได้หลายข้อในคอลัมน์เดียว ตรวจสอบ- ข้อจำกัด ตรวจสอบถูกระบุเป็นส่วนหนึ่งของตัวดำเนินการ สร้างตารางในขณะที่กฎถูกสร้างขึ้นเป็น วัตถุแต่ละชิ้นซึ่งผูกไว้กับคอลัมน์แล้ว

ขั้นแรก คุณต้องสร้างกฎโดยใช้โอเปอเรเตอร์ สร้างกฎ- หลังจากนั้นจึงใช้ระบบการจัดเก็บขั้นตอน sp_bindruleมันถูกผูกไว้กับคอลัมน์หรือ ประเภทที่กำหนดเองข้อมูล. เรียนรู้เพิ่มเติมเกี่ยวกับการใช้งาน สร้างกฎหรือ sp_bindrule- ในการอ้างอิง Transact-SQL ใน SQL Server Books Online

ทริกเกอร์เป็นคลาสพิเศษของขั้นตอนการจัดเก็บที่จะดำเนินการโดยอัตโนมัติเมื่อมีการดำเนินการคำสั่ง อัปเดต, แทรกหรือ ลบสำหรับโต๊ะหรือมุมมอง ทริกเกอร์คือ เครื่องมืออันทรงพลังใช้เพื่อใช้ตรรกะทางธุรกิจโดยอัตโนมัติเมื่อแก้ไขข้อมูล ทริกเกอร์สามารถขยายตรรกะการตรวจสอบความสมบูรณ์ที่มีให้โดยข้อจำกัด ค่าเริ่มต้น และกฎของ SQL Server (แม้ว่าเมื่อใดก็ตามที่ข้อจำกัดสามารถให้ฟังก์ชันการทำงานที่จำเป็นได้ ก็ควรใช้แทนทริกเกอร์)

ดัชนีเป็นโครงสร้างที่จัดระเบียบค่าของคอลัมน์ตั้งแต่หนึ่งคอลัมน์ขึ้นไปในฐานข้อมูล ดัชนีจะชี้ไปยังค่าที่จัดเก็บไว้ในคอลัมน์ตารางที่ระบุ จากนั้นจัดเรียงตามลำดับการจัดเรียงที่ระบุ การใช้ดัชนีของฐานข้อมูลก็เหมือนกับการขอให้ผู้อ่านทำ ดัชนีหัวเรื่องหนังสือ: ค้นหาค่าบางอย่างผ่านดัชนี จากนั้นใช้ดัชนีเพื่อค้นหาแถวที่มีค่าที่ต้องการ ดัชนีที่ไม่ซ้ำช่วยให้แน่ใจว่าค่าของคอลัมน์ไม่ซ้ำกัน

ประเภทความสมบูรณ์ถูกต้องของข้อมูล

SQL Server รองรับความสมบูรณ์ของข้อมูลสี่ประเภท: เอนทิตี โดเมน การอ้างอิง และความสมบูรณ์ที่ผู้ใช้กำหนด

แหล่งข้อมูลบางแห่งจะกำหนดความสมบูรณ์ของข้อมูลมากกว่า (หรือน้อยกว่า) สี่ประเภท อย่างไรก็ตาม โดยทั่วไปแล้วทั้งสี่ประเภทที่ระบุไว้ถือเป็นประเภทหลักของความสมบูรณ์ถูกต้องของข้อมูล

ความสมบูรณ์ที่จำเป็น

ความสมบูรณ์ประเภทนี้กำหนดแถวของตารางเป็นอินสแตนซ์เฉพาะของเอนทิตีบางตัว ความสมบูรณ์ของเอนทิตีช่วยให้มั่นใจในความสมบูรณ์ของคอลัมน์ตัวระบุหรือคีย์หลักของตาราง (ผ่านดัชนี ข้อจำกัด มีเอกลักษณ์, คีย์หลักหรือคุณสมบัติ ตัวตน).

ความสมบูรณ์ของโดเมน

ความสมบูรณ์ประเภทนี้ช่วยให้แน่ใจว่าคอลัมน์บางคอลัมน์มีเพียงค่าที่ถูกต้องเท่านั้น คุณสามารถรับประกันความสมบูรณ์ของโดเมนได้โดยการจำกัดประเภท (ผ่านประเภทข้อมูล) รูปแบบ (โดยใช้ข้อจำกัด ตรวจสอบและกฎเกณฑ์) หรือช่วงของค่าที่ยอมรับได้ (โดยใช้ ข้อ จำกัด ต่างประเทศคีย์และตรวจสอบ คำจำกัดความเริ่มต้น ไม่ใช่คำจำกัดความและกฎ NULL)

ความสมบูรณ์ของการอ้างอิง

ความสมบูรณ์ประเภทนี้ช่วยให้แน่ใจว่าความสัมพันธ์ระหว่างตารางจะถูกรักษาไว้เมื่อมีการเพิ่มหรือลบบันทึก ใน SQL Server ความสมบูรณ์ของการอ้างอิงจะขึ้นอยู่กับความสัมพันธ์ระหว่างคีย์ภายนอกและคีย์หลัก หรือระหว่างคีย์ภายนอกและคีย์เฉพาะ (ผ่านข้อจำกัด กุญแจต่างประเทศและ ตรวจสอบ- ความสมบูรณ์ในการอ้างอิงช่วยให้แน่ใจว่าค่าคีย์ในตารางที่เกี่ยวข้องมีความสอดคล้องกัน ความสอดคล้องนี้กำหนดให้ไม่มีการอ้างอิงถึงค่าที่ไม่มีอยู่จริง และการอ้างอิงไปยังคีย์ตลอดทั้งฐานข้อมูลจะเปลี่ยนแปลงอย่างสม่ำเสมอเมื่อคีย์มีการเปลี่ยนแปลง

เมื่อมั่นใจในความสมบูรณ์ของการอ้างอิง SQL Server จะป้องกันไม่ให้ผู้ใช้ทำสิ่งต่อไปนี้:

การเพิ่มบันทึกลงในตารางที่เกี่ยวข้องหากบันทึกที่ต้องการไม่อยู่ในตารางหลัก

การเปลี่ยนแปลงค่าในตารางหลักซึ่งจะส่งผลให้บันทึก "ค้าง" ในตารางที่เกี่ยวข้อง

การลบบันทึกออกจากตารางหลักหากมีบันทึกที่เกี่ยวข้องในตารางภายนอก

จากการก่อสร้าง

ออกแบบ จากจะต้องระบุไว้ในแต่ละคำสั่ง เลือกซึ่งดึงข้อมูลจากตารางหรือมุมมอง โครงสร้างนี้ช่วยให้คุณสามารถระบุรายการตารางและมุมมองที่มีคอลัมน์ที่อ้างอิงโดยรายการและโครงสร้างที่เลือก ที่ไหน- ตารางและมุมมองเหล่านี้สามารถกำหนดนามแฝงในโครงสร้างได้ เช่น- ออกแบบ จากนอกจากนี้ ยังช่วยให้คุณสามารถรวมตารางได้โดยการระบุเงื่อนไขการรวมในโครงสร้าง เข้าร่วม.

ออกแบบ จากคือรายการตาราง มุมมอง และชื่อโครงสร้าง เข้าร่วมคั่นด้วยเครื่องหมายจุลภาค ในตัวอย่างต่อไปนี้ในคำสั่ง เลือกออกแบบ จากกำหนดตาราง บุคคล:

เลือก * จากบุคคล

ออกแบบ จากใช้เพื่อกำหนดการรวมระหว่างสองตารางหรือมุมมอง การเชื่อมต่อจะกล่าวถึงรายละเอียดเพิ่มเติมในหัวข้อถัดไป

ที่ไหน จัดกลุ่มตาม และมีส่วนคำสั่ง

ในตัวดำเนินการ เลือกการออกแบบ ที่ไหนและ มีกำหนดแถวของตารางต้นฉบับที่จำเป็นในการสร้างชุดผลลัพธ์ การก่อสร้าง ที่ไหนและ มีมีบทบาทเป็นตัวกรอง โดยจะระบุชุดเงื่อนไขการค้นหา: เลือกเฉพาะแถวที่ตรงกับเงื่อนไขการค้นหาเท่านั้นเพื่อสร้างชุดผลลัพธ์ เช่น ในแถลงการณ์ เลือกออกแบบ ที่ไหนส่งคืนเฉพาะบรรทัดที่ระบุเมืองครัสโนยาสค์เป็นสถานที่เกิดของบุคคล:

เลือก PersonId, LastName, FirstName

สถานที่เกิด = "ครัสโนยาสค์"

ออกแบบ มีโดยปกติ (แต่ไม่จำเป็น) จะใช้ร่วมกับการก่อสร้าง จัดกลุ่มตาม- ออกแบบ มีระบุตัวกรองเพิ่มเติมที่ใช้หลังจากการกรองที่กำหนดโดยโครงสร้างเสร็จสมบูรณ์ ที่ไหน- ในสคริปต์ต่อไปนี้ในคำสั่ง เลือกการออกแบบที่ใช้ ที่ไหน, จัดกลุ่มตามและ มี:

เลือก OrdD1OrderId เป็น OrderId

SUM(OrdD1.Quantity) เป็น "หน่วยที่ขาย"

SUM(OrdD1.UnitPrice * OrdD1.Quantity) AS รายได้

จาก AS OrdD1

WHERE OrdD1OrderId IN (เลือกความแตกต่าง OrdD2.OrderId

จาก AS OrdD2

โดยที่ OrdD2.UnitPrice > $1,000)

จัดกลุ่มตาม OrdD1.OrderId

มี SUM(OrdD1.Quantity) > 50

นี่คือการออกแบบ ที่ไหนส่งคืนคำสั่งซื้อที่มีราคามากกว่า $1,000 แล้วจึงออกแบบ มีจำกัดผลลัพธ์โดยเลือกคำสั่งซื้อสินค้ามากกว่า 50 หน่วย ออกแบบ จัดกลุ่มตามจำกัดแถวสำหรับค่าฟิลด์เฉพาะแต่ละค่า รหัสคำสั่งซื้อ.

จัดกลุ่มตามข้อ

ออกแบบ จัดกลุ่มตามใช้เพื่อให้ได้ค่ารวมในแต่ละแถวของชุดผลลัพธ์ เมื่อใช้โอเปอเรเตอร์ เลือกโดยไม่ต้องออกแบบ จัดกลุ่มตาม ฟังก์ชันรวมส่งคืนค่าสุดท้ายเพียงค่าเดียวเท่านั้น

หลังจากคำหลัก จัดกลุ่มตามตามรายการคอลัมน์ ซึ่งเรียกว่าการจัดกลุ่มคอลัมน์ ออกแบบ จัดกลุ่มตามจำกัดแถวของชุดผลลัพธ์ เป็นไปได้เพียงแถวเดียวสำหรับแต่ละค่าเฉพาะของคอลัมน์หรือคอลัมน์การจัดกลุ่ม แต่ละแถวของชุดผลลัพธ์ประกอบด้วยผลรวมที่เกี่ยวข้องกับค่าบางค่าในคอลัมน์การจัดกลุ่ม

หากอยู่ในตัวดำเนินการ เลือกมีการออกแบบ จัดกลุ่มตาม SQL Server กำหนดข้อจำกัดในรายการที่เลือก รายการที่เลือกสามารถมีได้เฉพาะคอลัมน์การจัดกลุ่มและนิพจน์ที่ส่งคืนค่าเดียวเท่านั้นสำหรับแต่ละค่าของคอลัมน์การจัดกลุ่ม เช่น ฟังก์ชันการรวม (การรวมเวกเตอร์) ที่มีชื่อคอลัมน์เป็นหนึ่งในพารามิเตอร์

โดยปกติแล้วการออกแบบ มีใช้กับการออกแบบ จัดกลุ่มตามแม้ว่าจะสามารถใช้แยกกันได้ก็ตาม นิพจน์ใดๆ สามารถกลายเป็นนิพจน์การจัดกลุ่มได้ตราบใดที่ไม่มีฟังก์ชันรวม

ในการออกแบบ จัดกลุ่มตามคุณต้องระบุชื่อคอลัมน์ของตารางหรือมุมมอง ไม่ใช่ชื่อคอลัมน์ชุดผลลัพธ์ที่กำหนดโดยใช้โครงสร้าง เช่น.

ในการออกแบบ จัดกลุ่มตามอนุญาตให้ระบุหลายคอลัมน์เป็นกลุ่มที่ซ้อนกันได้ กล่าวคือ จัดกลุ่มตารางโดยใช้คอลัมน์ผสมกัน

ทำความเข้าใจลำดับที่ถูกต้องในการใช้โครงสร้าง ที่ไหน, จัดกลุ่มตามและ มีช่วยสร้างแบบสอบถามที่มีประสิทธิภาพพอสมควร:

ออกแบบ ที่ไหนกรองแถวที่เป็นผลลัพธ์ของการดำเนินการที่ระบุในส่วนคำสั่ง FROM

ข้อมูลเอาต์พุตการออกแบบ ที่ไหนจัดกลุ่มตามการออกแบบ กลุ่มโดย;

แถวของผลลัพธ์ที่จัดกลุ่มจะถูกกรองโดยใช้โครงสร้าง มี.

เงื่อนไขการค้นหาใด ๆ ที่ได้รับอนุญาตให้ใช้ทั้งก่อนและหลังการดำเนินการจัดกลุ่มควรระบุในการก่อสร้าง ที่ไหน- วิธีนี้ทำให้คุณสามารถลดจำนวนแถวที่ต้องจัดกลุ่มได้ ในการออกแบบ มีคุณควรระบุเฉพาะคำค้นหาที่จำเป็นต้องใช้หลังจากการดำเนินการจัดกลุ่มเสร็จสิ้นแล้วเท่านั้น

เรียงตามข้อ

ออกแบบ สั่งซื้อโดยเรียงลำดับผลลัพธ์แบบสอบถามตามหนึ่งหรือหลายฟิลด์ การเรียงลำดับสามารถเป็นได้ทั้งจากน้อยไปหามาก ( เอ.เอส.ซี.) และจากมากไปน้อย ( รายละเอียด- หากไม่มีการระบุประเภทการเรียงลำดับ ค่าเริ่มต้นคือ เอ.เอส.ซี.- ถ้าในการออกแบบ สั่งซื้อโดยมีการตั้งชื่อคอลัมน์หลายคอลัมน์และดำเนินการเรียงลำดับแบบซ้อน

คำสั่งต่อไปนี้จะเรียงลำดับแถวของตาราง บุคคลขึ้นต้นด้วยนามสกุล (จากมากไปน้อย) จากนั้นตามชื่อ (จากน้อยไปมากสำหรับแต่ละคน) และสุดท้ายตามอายุ (จากน้อยไปมากเนื่องจากไม่ได้ระบุพารามิเตอร์ รายละเอียด).

เลือก PersonId, นามสกุล, ชื่อ, อายุ

เรียงตามนามสกุล DESC, ชื่อ, อายุ

แพ็คเกจ ขั้นตอนการจัดเก็บ และทริกเกอร์

ถุงพลาสติกคือกลุ่มของคำสั่ง Transact-SQL หนึ่งคำสั่งขึ้นไปที่แอปพลิเคชันส่งไปยัง SQL Server พร้อมกันเพื่อดำเนินการ SQL Server รวบรวมคำสั่งแบตช์เป็นหน่วยปฏิบัติการเดียว ( แผนการดำเนินการแผนปฏิบัติการ- หลังจากนี้ ผู้ดำเนินการตามแผนนี้จะถูกดำเนินการตามลำดับ

ข้อผิดพลาดในการคอมไพล์ เช่น ข้อผิดพลาดทางไวยากรณ์ หยุดกระบวนการคอมไพล์แผนการดำเนินการ ในกรณีนี้ จะไม่มีการดำเนินการคำสั่งแพ็คเกจใดๆ

ข้อผิดพลาดรันไทม์ เช่น เลขคณิตล้นหรือการละเมิดข้อจำกัด อาจส่งผลอย่างใดอย่างหนึ่งต่อไปนี้

ข้อผิดพลาดรันไทม์ส่วนใหญ่จะหยุดการดำเนินการของคำสั่งปัจจุบันและคำสั่งที่ตามมาในชุดงาน

ข้อผิดพลาดรันไทม์บางอย่าง เช่น การละเมิดข้อจำกัด หยุดการดำเนินการเฉพาะคำสั่งปัจจุบันเท่านั้น ในกรณีนี้ คำสั่งอื่นๆ ทั้งหมดของแพ็คเกจจะถูกดำเนินการ

คำสั่งที่ดำเนินการก่อนคำสั่งที่ทำให้เกิดข้อผิดพลาดรันไทม์จะไม่ได้รับผลกระทบจากข้อผิดพลาดนั้น ข้อยกเว้นเพียงอย่างเดียวคือ ถ้าชุดงานเป็นธุรกรรม ถ้าเกิดข้อผิดพลาด ธุรกรรมจะถูกย้อนกลับ การดำเนินการนี้จะยกเลิกการแก้ไขที่ไม่มีข้อผูกมัดทั้งหมดที่ทำก่อนที่จะเกิดข้อผิดพลาดรันไทม์

เช่น แพ็คเกจประกอบด้วย 3 คำสั่ง หากในคำสั่งที่สองจะได้รับอนุญาต ข้อผิดพลาดทางไวยากรณ์จะไม่มีการดำเนินการคำสั่งแบตช์ใดๆ หากแพ็คเกจได้รับการคอมไพล์แล้วและการดำเนินการของคำสั่งที่สองล้มเหลว ผลลัพธ์ของคำสั่งแรกยังคงไม่เปลี่ยนแปลง (เนื่องจากได้รับมาแล้ว)

กฎต่อไปนี้ใช้เมื่อประมวลผลแพ็กเก็ต:

ผู้ประกอบการ สร้างค่าเริ่มต้น, สร้างขั้นตอน, สร้างกฎ, สร้างทริกเกอร์และ สร้างมุมมองไม่สามารถอยู่ร่วมกันในแพ็คเกจกับผู้ให้บริการรายอื่นได้ แพ็กเก็ตต้องขึ้นต้นด้วยคำสั่ง สร้าง- ข้อความที่ตามมาทั้งหมดจะถูกตีความเป็นส่วนหนึ่งของคำจำกัดความที่สร้างขึ้นโดยข้อความแรก สร้าง;

ภายในแพ็คเกจเดียวกัน คุณไม่สามารถแก้ไขตารางและเข้าถึงคอลัมน์ใหม่ได้

หากผู้ปฏิบัติงาน ดำเนินการ- คำสั่งแรกของแพ็คเกจ ไม่จำเป็นต้องใช้คีย์เวิร์ด EXECUTE แต่มีความจำเป็นเมื่อผู้ปฏิบัติงาน ดำเนินการไม่ใช่คำสั่งแรกของแพ็คเกจ

ดังนั้นแพ็กเก็ตคือชุดของคำสั่งตั้งแต่หนึ่งคำสั่งขึ้นไปที่ไคลเอ็นต์ส่งเป็น กลุ่มเดียว- เมื่อรวบรวมแต่ละแพ็คเกจ จะได้แผนปฏิบัติการหนึ่งแผน หากแพ็คเกจประกอบด้วยคำสั่ง SQL หลายคำสั่ง แผนการดำเนินการเดียวจะถูกสร้างขึ้นจากขั้นตอนที่ได้รับการปรับปรุงทั้งหมดที่จำเป็นในการดำเนินการแต่ละคำสั่ง

มีหลายวิธีในการระบุแพ็คเกจ

คำสั่ง SQL ทั้งหมดที่แอปพลิเคชันส่งไปยังเซิร์ฟเวอร์เป็นหน่วยการดำเนินการประกอบด้วย แพคเกจเดียวและสร้างแผนปฏิบัติการหนึ่งแผน

คำสั่งทั้งหมดในขั้นตอนการจัดเก็บหรือทริกเกอร์ในรูปแบบแพ็คเกจเดียว เมื่อมีการรวบรวมขั้นตอนหรือทริกเกอร์ที่เก็บไว้ จะจัดทำแผนการดำเนินการเดียว

สตริงที่ประมวลผลโดยตัวดำเนินการ ดำเนินการถูกตีความว่าเป็นแพ็คเกจที่เมื่อคอมไพล์แล้วจะจัดทำแผนการดำเนินการเดียว

สตริงดำเนินการโดยขั้นตอนการจัดเก็บของระบบ sp_executesqlเป็นแพ็คเกจที่เมื่อคอมไพล์แล้วจะจัดทำแผนการดำเนินการเดียว

หากแอปพลิเคชันส่งแพ็กเก็ตที่มีคำสั่ง ดำเนินการแผนการดำเนินการสำหรับสตริงหรือขั้นตอนการจัดเก็บที่กำลังประมวลผลจะถูกดำเนินการแยกจากแผนการดำเนินการคำสั่ง ดำเนินการ- แผนการดำเนินการที่สร้างขึ้นสำหรับรายการที่กระบวนงานที่เก็บไว้ดำเนินการ sp_executesqlจะถูกแยกออกจากแผนการดำเนินการของแพ็คเกจที่เหลือซึ่งมีการเรียกใช้โพรซีเดอร์อยู่ sp_executesql.

หากคำสั่งแพ็คเกจเรียกใช้ทริกเกอร์ แผนการดำเนินการของทริกเกอร์จะถูกดำเนินการแยกจากแผนการดำเนินการของแพ็คเกจดั้งเดิม

ตัวอย่างเช่น แพคเกจที่ประกอบด้วยคำสั่งสี่คำสั่งต่อไปนี้จะสร้างแผนการดำเนินการห้าแผน:

ผู้ดำเนินการ ดำเนินการดำเนินการขั้นตอนการจัดเก็บ;

การเรียกขั้นตอน sp_executesqlเพื่อประมวลผลสตริง

ผู้ดำเนินการ ดำเนินการ, การประมวลผลสตริง;

ผู้ดำเนินการ อัปเดตซึ่งหมายถึงตารางที่มีทริกเกอร์การอัปเดต

EXEC ขั้นตอนแรก

EXEC sp_executesql N "เลือก * จาก AdventureWorks.HumanResources.Employee

โดยที่ ID ผู้จัดการ = @level",

N"@ระดับจิ๋ว",

SET PersonName = "คุคุ"

ขั้นตอนการจัดเก็บเป็นกลุ่มของคำสั่ง Transact-SQL ที่ถูกคอมไพล์ครั้งเดียวแล้วสามารถดำเนินการได้หลายครั้ง ฟังก์ชันนี้ช่วยปรับปรุงประสิทธิภาพเนื่องจากไม่จำเป็นต้องคอมไพล์คำสั่ง Transact-SQL ใหม่

สิ่งกระตุ้นเป็น Stored Procedure ชนิดพิเศษที่ผู้ใช้ไม่ได้เรียกใช้โดยตรง เมื่อสร้างทริกเกอร์ เงื่อนไขสำหรับการดำเนินการจะถูกกำหนด: ทริกเกอร์จะต้องดำเนินการเมื่อมีการแก้ไขข้อมูลในตารางหรือคอลัมน์ที่กำหนด

ผู้ประกอบการ สร้างขั้นตอนและ สร้างทริกเกอร์ไม่สามารถอยู่ในหลายแพ็คเกจได้ กล่าวอีกนัยหนึ่ง ขั้นตอนการจัดเก็บหรือทริกเกอร์จะถูกสร้างขึ้นในแพ็คเกจเดียวเสมอและคอมไพล์เป็นแผนการดำเนินการ

ร้านค้า SQL Server เท่านั้น แหล่งที่มาขั้นตอนการจัดเก็บและทริกเกอร์ เมื่อมีการดำเนินการขั้นตอนหรือทริกเกอร์ที่เก็บไว้เป็นครั้งแรก ซอร์สโค้ดจะถูกคอมไพล์เป็นแผนการดำเนินการ หากขั้นตอนที่เก็บไว้หรือทริกเกอร์ถูกดำเนินการอีกครั้งก่อนที่แผนการดำเนินการจะเก่าและถูกลบออกจากหน่วยความจำ กลไกเชิงสัมพันธ์จะตรวจพบแผนที่มีอยู่และนำมาใช้ใหม่ หากแผนล้าสมัยและถูกลบออกจากหน่วยความจำ ก แผนใหม่การดำเนินการ กระบวนการนี้ชวนให้นึกถึง การประมวลผล SQLเซิร์ฟเวอร์ของคำสั่ง SQL ทั้งหมด ประสิทธิภาพที่เพิ่มขึ้นเมื่อใช้ขั้นตอนการจัดเก็บและทริกเกอร์เกิดจากการคงอยู่ของคำสั่ง SQL ซึ่งทำให้ SQL Server สามารถใช้แผนการดำเนินการที่มีอยู่ได้

ใน รุ่นก่อนหน้าสำหรับ SQL Server ประสิทธิภาพที่เพิ่มขึ้นเมื่อใช้ขั้นตอนการจัดเก็บจะสังเกตเห็นได้ชัดเจนเป็นพิเศษ มากกว่า รุ่นแรกๆ SQL Server ไม่ได้พยายามที่จะนำแผนการดำเนินการกลับมาใช้ใหม่สำหรับแพ็คเกจที่ไม่ใช่ขั้นตอนหรือทริกเกอร์ที่เก็บไว้ วิธีเดียวเท่านั้น ใช้ซ้ำแผนการดำเนินการเกี่ยวข้องกับการเขียนโปรแกรมคำสั่ง SQL เป็นขั้นตอนการจัดเก็บ

แผนการดำเนินการของขั้นตอนที่เก็บไว้และทริกเกอร์จะดำเนินการแยกต่างหากจากแผนการดำเนินการของแพ็คเกจที่เรียกขั้นตอนที่เก็บไว้หรือทริกเกอร์ คุณลักษณะนี้ช่วยให้คุณสามารถนำแผนการดำเนินการกลับมาใช้ใหม่สำหรับขั้นตอนการจัดเก็บและทริกเกอร์ได้บ่อยขึ้น

ความสมบูรณ์ของฐานข้อมูล – แนวทางปฏิบัตินี้จะช่วยให้มั่นใจได้ว่าข้อมูลที่จัดเก็บไว้ในฐานข้อมูลมีความถูกต้อง สม่ำเสมอ และปราศจากข้อผิดพลาด ข้อผิดพลาดเพียงเล็กน้อยในการสะกดหรือซ้ำข้อมูลอาจทำให้เกิดปัญหาใหญ่สำหรับฐานข้อมูล ดังนั้นความสมบูรณ์ของฐานข้อมูลจึงเป็นปัญหาร้ายแรง มีข้อจำกัดด้านความสมบูรณ์สามประการ ได้แก่ ความสมบูรณ์ของเอนทิตี ความสมบูรณ์ของโดเมน และความสมบูรณ์ในการอ้างอิง นอกจากข้อจำกัดทั้งสามนี้แล้ว การตรวจสอบการทำให้เป็นมาตรฐานและข้อผิดพลาดยังถูกนำมาใช้เพื่อรับรองความสมบูรณ์อีกด้วย กระบวนการเหล่านี้ส่วนใหญ่เป็นไปโดยอัตโนมัติ แต่ผู้ดูแลระบบมักจะตรวจสอบด้วยตนเองเพื่อให้แน่ใจว่าไม่มีข้อผิดพลาดในฐานข้อมูล
เมื่อผู้ดูแลระบบต้องการเพิ่ม เปลี่ยนแปลง หรือลบข้อมูลจากฐานข้อมูล จะต้องตรวจสอบความสมบูรณ์ของฐานข้อมูล การรวมหรือเปลี่ยนแปลงข้อมูลใดๆ อาจเป็นหายนะได้ เนื่องจากข้อมูลอาจมีผลกระทบในวงกว้างต่อตารางและพาร์ติชันอื่นๆ ในฐานข้อมูล เพื่อลดโอกาสที่จะเกิดเหตุการณ์เช่นนี้ และเพื่อให้ข้อมูลในฐานข้อมูลมีความถูกต้องอยู่เสมอ ความสมบูรณ์ของฐานข้อมูลจะถูกตรวจสอบเสมอก่อนที่จะทำการเปลี่ยนแปลงใดๆ

ความสมบูรณ์ของเอนทิตีเป็นข้อจำกัดประการแรกในการรับรองความสมบูรณ์ของฐานข้อมูล ซึ่งจะตรวจสอบตารางที่ผู้ดูแลระบบต้องการทำงานด้วยและดูชื่อแถว หากแถวในตารางเดียวกันมีชื่อเหมือนกัน จะสามารถสร้างข้อมูลที่ซ้ำซ้อนที่สร้างความสับสนให้กับฐานข้อมูลทั้งหมดได้

ถัดมาคือความสมบูรณ์ของโดเมนวิธีนี้จะตรวจสอบประเภทของข้อมูลที่เพิ่มลงในส่วนของตารางในภายหลังหรือให้ข้อมูลใหม่ที่ตรงกับประเภทข้อมูลนั้น ตัวอย่างเช่น หากตารางมีเพียงวันที่และมีคนพยายามป้อนคำ กระบวนการความสมบูรณ์ของโดเมนจะแจ้งเตือนผู้ดูแลระบบถึงข้อผิดพลาดด้านความสอดคล้อง เนื่องจากได้รับการออกแบบมาเพื่อรองรับวันที่เท่านั้น ดังนั้นคำนี้อาจทำให้การประมวลผลปกติยุ่งเหยิงและอาจนำไปสู่ข้อผิดพลาดในอนาคต

ข้อจำกัดประการที่สามเกี่ยวกับความสมบูรณ์ของฐานข้อมูลคือความสมบูรณ์ของข้อมูลตารางในฐานข้อมูลไม่ค่อยอยู่คนเดียว - ตารางอื่นๆ มักจะอ้างอิงถึงตารางเหล่านั้น และตารางเหล่านั้นก็อ้างอิงถึงตารางอื่นด้วย หากผู้ดูแลระบบป้อนคำสั่งสำหรับตารางหนึ่งโดยอ้างอิงถึงอีกตารางหนึ่ง แต่ข้อมูลในตารางที่สองไม่ถูกต้องหรือไม่มีอยู่ จะทำให้เกิดข้อผิดพลาดในการประมวลผล Referential Integrity จะตรวจสอบการอ้างอิงทั้งหมดว่าถูกต้องหรือไม่

นอกจากปัญหาความสมบูรณ์ทั้งสามข้อนี้แล้ว กฎการปรับมาตรฐานและการตรวจสอบข้อผิดพลาดยังนำไปใช้กับความสมบูรณ์ที่แท้จริงของฐานข้อมูลด้วย การทำให้เป็นมาตรฐานจะค้นหาข้อมูลที่ซ้ำซ้อนและบันทึกที่ยาวโดยไม่จำเป็น กำจัดความซ้ำซ้อนและแทนที่บันทึกที่ยาวด้วยบรรทัดสั้นๆ หลายบรรทัด ตรวจสอบข้อผิดพลาด วิเคราะห์ฐานข้อมูลอื่นๆ ข้อผิดพลาดที่เป็นไปได้และรับประกันว่าข้อมูลทั้งหมดถูกต้อง

ความสมบูรณ์ของฐานข้อมูลคือการปฏิบัติตามข้อมูลในฐานข้อมูลด้วยตรรกะภายใน โครงสร้าง และกฎที่ระบุไว้อย่างชัดเจนทั้งหมด ทุกกฎเกณฑ์ที่กำหนดข้อจำกัดบางประการ สภาพที่เป็นไปได้ฐานข้อมูลเรียกว่าข้อจำกัดด้านความสมบูรณ์

ความสมบูรณ์ของฐานข้อมูลไม่ได้รับประกันความน่าเชื่อถือของข้อมูลที่มีอยู่ในนั้น แต่จะให้ตามนั้น อย่างน้อยความน่าเชื่อถือของข้อมูลนี้ ปฏิเสธคุณค่าที่เหลือเชื่อและเป็นไปไม่ได้อย่างเห็นได้ชัด ดังนั้นไม่ควรสับสนระหว่างความสมบูรณ์ของฐานข้อมูลกับความน่าเชื่อถือของฐานข้อมูล ความน่าเชื่อถือ (หรือความจริง) คือความสอดคล้องของข้อเท็จจริงที่เก็บไว้ในฐานข้อมูลกับโลกแห่งความเป็นจริง แน่นอนว่าจำเป็นต้องมีเพื่อกำหนดความน่าเชื่อถือของฐานข้อมูล ความรู้เต็มรูปแบบทั้งเกี่ยวกับเนื้อหาของฐานข้อมูลและเกี่ยวกับโลกแห่งความเป็นจริง ในการพิจารณาความสมบูรณ์ของฐานข้อมูล คุณเพียงแค่ต้องมีความรู้เกี่ยวกับเนื้อหาของฐานข้อมูลและกฎที่ระบุไว้เท่านั้น ดังนั้น DBMS สามารถ (และควร) ควบคุมความสมบูรณ์ของฐานข้อมูลได้ แต่โดยพื้นฐานแล้วไม่สามารถควบคุมความน่าเชื่อถือของฐานข้อมูลได้ การตรวจสอบความน่าเชื่อถือของฐานข้อมูลสามารถมอบหมายให้กับบุคคลเท่านั้นและในขนาดที่จำกัด เนื่องจากในบางกรณีผู้คนยังไม่มีความรู้ที่สมบูรณ์เกี่ยวกับโลกแห่งความเป็นจริง

หนึ่งใน งานที่สำคัญที่สุดปัญหาที่แก้ไขโดย DBMS คือการรักษาความสอดคล้อง ความถูกต้อง และความถูกต้องของข้อมูลที่จัดเก็บไว้ในฐานข้อมูลได้ตลอดเวลา กระบวนการนี้เรียกว่าการประกันความสมบูรณ์ของฐานข้อมูล

จำเป็นต้องแยกแยะระหว่างปัญหาในการรับรองความสมบูรณ์ของฐานข้อมูลและการปกป้องฐานข้อมูลจากการเข้าถึงโดยไม่ได้รับอนุญาต . การรักษาความสมบูรณ์ของฐานข้อมูลสามารถตีความได้ว่าเป็นการปกป้องข้อมูลจาก การกระทำที่ผิดผู้ใช้หรืออิทธิพลภายนอกแบบสุ่ม ในทั้งสองสถานการณ์ การละเมิดความสมบูรณ์ของฐานข้อมูลเกิดขึ้นโดยไม่ได้ตั้งใจ

ความสมบูรณ์ของฐานข้อมูลอาจถูกบุกรุกอันเป็นผลมาจากความล้มเหลวของฮาร์ดแวร์ ข้อผิดพลาดของซอฟต์แวร์ใน DBMS ระบบปฏิบัติการหรือ โปรแกรมประยุกต์- การกระทำของผู้ใช้ที่ไม่ถูกต้อง สถานการณ์เหล่านี้สามารถเกิดขึ้นได้แม้ในระบบที่ผ่านการทดสอบและทำงานได้ดี แม้ว่าจะมีระบบควบคุมอยู่แล้วก็ตาม ดังนั้น DBMS จะต้องมีวิธีการในการตรวจจับสถานการณ์ดังกล่าวและฟื้นฟูสถานะฐานข้อมูลที่ถูกต้อง

ความสมบูรณ์ของฐานข้อมูลได้รับการดูแลผ่านชุดกฎตรรกะพิเศษที่กำหนดกับข้อมูล เรียกว่าข้อจำกัดด้านความสมบูรณ์ ข้อ จำกัด ด้านความสมบูรณ์คือข้อความเกี่ยวกับค่าที่ยอมรับได้ของหน่วยข้อมูลแต่ละหน่วยและความสัมพันธ์ระหว่างหน่วยข้อมูลเหล่านั้น ข้อจำกัดด้านความสมบูรณ์จะถูกจัดเก็บไว้ในพจนานุกรมฐานข้อมูล

การตรวจสอบความสมบูรณ์ของข้อมูลช่วยรับประกันคุณภาพของข้อมูลในตาราง

เมื่อวางแผนตารางจะมีสองแบบ ขั้นตอนสำคัญ: กำหนดค่าที่ถูกต้องสำหรับคอลัมน์และตัดสินใจว่าจะตรวจสอบความสมบูรณ์ของข้อมูลในคอลัมน์นั้นได้อย่างไร ความสมบูรณ์ของข้อมูลแบ่งออกเป็นประเภทต่างๆ ดังต่อไปนี้:

  • 1. ความสมบูรณ์ของเอนทิตี -- กำหนดแถวให้เป็นเอนทิตีที่ไม่ซ้ำกันในตารางใดตารางหนึ่ง ช่วยให้มั่นใจในความสมบูรณ์ของคอลัมน์ข้อมูลประจำตัวของตารางหรือคีย์หลักโดยใช้ดัชนีและ ข้อ จำกัด ที่ไม่ซ้ำใครหรือคีย์หลัก
  • 2. ความสมบูรณ์ของโดเมนคือความน่าเชื่อถือของบันทึกในคอลัมน์ที่ระบุ ประกอบด้วยข้อจำกัดประเภทข้อมูล ข้อจำกัดด้านรูปแบบโดยใช้ข้อจำกัดและกฎของ CHECK และข้อจำกัดเกี่ยวกับช่วงของค่าที่เป็นไปได้โดยใช้ FOREIGN KEY, CHECK, ข้อจำกัด DEFAULT, คำจำกัดความ NOT NULL และกฎ
  • 3. Referential Integrity -- รักษาความสัมพันธ์บางอย่างระหว่างตารางเมื่อมีการเพิ่มหรือลบแถว

ใน SQL Server ความสมบูรณ์ของการอ้างอิงจะขึ้นอยู่กับความสัมพันธ์ระหว่างหลักและ กุญแจต่างประเทศ(หรือคีย์ต่างประเทศและคีย์เฉพาะ) และบังคับใช้โดยใช้ข้อจำกัด FOREIGN KEY และ CHECK Referential Integrity ช่วยให้มั่นใจได้ว่าค่าคีย์จะสอดคล้องกันในทุกตาราง ความสมบูรณ์ประเภทนี้กำหนดให้ไม่มีการอ้างอิงค่าที่ไม่มีอยู่ และยังช่วยให้แน่ใจว่าการอ้างอิงเปลี่ยนแปลงอย่างสม่ำเสมอทั่วทั้งฐานข้อมูลเมื่อค่าคีย์เปลี่ยนแปลง

เมื่อมั่นใจในความสมบูรณ์ของการอ้างอิง SQL Server จะไม่อนุญาต ขั้นตอนต่อไปผู้ใช้:

  • - การเพิ่มหรือการเปลี่ยนแปลงแถวในตารางที่เกี่ยวข้องหากไม่มีแถวที่สอดคล้องกันในตารางหลัก
  • - การเปลี่ยนแปลงค่าในตารางหลักซึ่งนำไปสู่แถวที่ถูกละเลยในตารางที่เกี่ยวข้อง
  • - การลบแถวออกจากตารางหลักหากมีแถวที่เกี่ยวข้องในตารางที่เกี่ยวข้อง
  • 4. ความสมบูรณ์แบบกำหนดเอง - ช่วยให้คุณสามารถกำหนดกฎเกณฑ์ทางธุรกิจที่ไม่รวมอยู่ในหมวดหมู่ความสมบูรณ์ใดๆ ความสมบูรณ์แบบกำหนดเองได้รับการสนับสนุนโดยหมวดหมู่ความสมบูรณ์อื่นๆ ทั้งหมด: ข้อจำกัดระดับคอลัมน์และระดับตารางทุกประเภทในคำสั่ง CREATE TABLE, กระบวนการจัดเก็บ และทริกเกอร์

ข้อ จำกัด ความสมบูรณ์ของการอ้างอิงเชิงความหมาย

ในระหว่างการพัฒนาชิ้นส่วน ระบบสารสนเทศวี MySQL DBMSปัญหาเกิดจากการรับรองความสมบูรณ์ของข้อมูล ขอให้เราพิจารณาแนวคิดเรื่องความซื่อสัตย์อย่างแท้จริง

ความสมบูรณ์คือสถานะของข้อมูลเมื่อพวกเขารักษาเนื้อหาข้อมูลและการตีความที่ชัดเจนภายใต้เงื่อนไขของอิทธิพลแบบสุ่ม

ประโยคที่อธิบายความสมบูรณ์ของข้อมูลเรียกว่า ข้อจำกัดด้านความสมบูรณ์.

การใช้ข้อจำกัดด้านความสมบูรณ์ของข้อมูลถือเป็นการปกป้องข้อมูลจากข้อผิดพลาดที่ไม่ได้ตั้งใจ (การบิดเบือนหรือการทำลายโดยไม่ได้ตั้งใจ) และการป้องกัน เช่น การใช้ฟังก์ชันการปกป้องข้อมูลดังกล่าวเป็นการรักษาความปลอดภัย ดังนั้นปัญหาของความสมบูรณ์คือต้องแน่ใจว่าข้อมูลในฐานข้อมูลถูกต้องตลอดเวลา อย่างไรก็ตาม เป้าหมายนี้สามารถบรรลุได้ภายในขอบเขตที่กำหนดเท่านั้น โดยเฉพาะอย่างยิ่งระบบไม่สามารถควบคุมความถูกต้องของแต่ละค่าที่ป้อนลงในฐานข้อมูลได้ (แม้ว่าจะสามารถตรวจสอบความน่าเชื่อถือได้ก็ตาม) อย่างไรก็ตาม แม้จะมีข้อยกเว้น แต่ก็จำเป็นต้องรับประกันความเป็นไปได้ที่จะได้รับการสนับสนุน ระดับสูงความสมบูรณ์ในฐานข้อมูล การรักษาความสมบูรณ์ควรถือเป็นการปกป้องข้อมูลจากการเปลี่ยนแปลงหรือการทำลายที่ไม่เหมาะสม (ตรงข้ามกับที่ผิดกฎหมาย)

ความสมบูรณ์ของข้อมูลเชิงความหมาย

ความสมบูรณ์ของข้อมูลเชิงความหมาย - สภาพที่จำเป็นการทำงานของระบบสารสนเทศทุกประเภท นี่คือรายการข้อจำกัดหลักเกี่ยวกับความสมบูรณ์ของความหมาย ตามตัวอย่าง ให้เลือกฐานข้อมูล "Salon" ซึ่งประกอบด้วยตาราง เช่น "ลูกค้า" "หลัก" "บริการ" ย่อหน้านี้ให้วิธีการทางทฤษฎีในการนำข้อจำกัดด้านความสมบูรณ์ข้อใดข้อหนึ่งไปใช้ บทที่ II จะหารือในรายละเอียดเพิ่มเติม วิธีปฏิบัติการดำเนินการตามข้อจำกัดความสมบูรณ์ถูกต้องของข้อมูลประเภทข้างต้น

ทุกๆวัตถุใน โมเดลเชิงสัมพันธ์ข้อมูลมีลักษณะเฉพาะโดยตัวระบุที่กำหนด คีย์หลักมีเอกลักษณ์ในความหมาย ในเรื่องนี้ ในระหว่างการทำงานของ IS จะรับประกันความสมบูรณ์ของข้อมูลโดยการเปรียบเทียบค่าคีย์หลักอินพุตกับค่าที่มีอยู่ในฐานข้อมูล และหากค่าตรงกัน จะห้ามไม่ให้เพิ่มบันทึกด้วยคีย์หลักเดียวกัน

ลองยกตัวอย่าง: ให้ในฐานข้อมูล "Salon" ในตาราง "Client" มีวัตถุ "Client" ซึ่งมีลักษณะเฉพาะด้วยชุดคุณสมบัติบางชุดขึ้นอยู่กับ งานข้อมูล- ในฐานะคีย์หลัก คุณสามารถเลือกคุณสมบัติ เช่น “หมายเลขซีรี่ส์และหนังสือเดินทาง” หรือ “รหัสลูกค้า” วี ในกรณีนี้คีย์หลักเป็นแบบผสม เนื่องจากชุดข้อมูลหรือหมายเลขหนังสือเดินทางที่แยกต่างหากไม่ใช่ค่าที่ไม่ซ้ำกัน และคีย์ "รหัสลูกค้า" อาจเป็นแบบผสมหรือแบบธรรมดาก็ได้

ในหลายกรณี จำเป็นต้องตรวจสอบความเป็นเอกลักษณ์ของค่าคุณสมบัติที่ไม่ได้ถูกกำหนดโดยตัวระบุ และในกรณีนี้พวกเขาจะพูดถึงการกำหนดคุณลักษณะ คีย์ที่เป็นไปได้- สำหรับออบเจ็กต์ "ไคลเอนต์" คีย์ที่เป็นไปได้อาจเป็นแอตทริบิวต์ เช่น "หมายเลข บัตรธนาคาร" หรือ "หมายเลข บัตรโบนัสลูกค้า." ข้อจำกัดประเภทนี้ เช่นเดียวกับการตรวจสอบความสมบูรณ์ของคีย์หลัก นั้นมีโครงสร้าง ซึ่งควบคุมโดยการตรวจสอบความเท่าเทียมกันของข้อมูลอินพุตและข้อมูลที่มีอยู่

ข้อจำกัดด้านความสมบูรณ์อีกประเภทหนึ่งคือข้อจำกัดเกี่ยวกับค่าจริงที่มีอยู่ในฐานข้อมูล ข้อจำกัดนี้มีหลายประเภทย่อย:

1) ค่าที่ถูกต้องอยู่ใน กำหนดช่วงเวลา- ข้อจำกัดนี้ถือว่ามีค่าคุณสมบัติอยู่ บางช่วงค่านิยม สมมติว่าในร้านเสริมสวยมีการจำกัดอายุคนงาน: นายต้องไม่อายุน้อยกว่า 20 ปีและมากกว่า 50 ปี ดังนั้นข้อจำกัดด้านความสมบูรณ์จึงมีลักษณะดังนี้: "สำหรับแต่ละวัตถุของคลาส "Master" ค่าของแอตทริบิวต์ "อายุ" จะอยู่ในช่วง 20-50 ปี"

2) ค่าแอตทริบิวต์สามารถนับได้ เมื่อเพิ่มหรือแก้ไขข้อมูล ระบบจะขอให้คุณเลือกค่าฟิลด์ที่ต้องการจากรายการ แต่ให้เพิ่ม ค่าลักษณะเฉพาะต้องห้าม. ในฐานข้อมูลของเรา คุณลักษณะต่างๆ เช่น เพศของลูกค้าในตารางลูกค้าสามารถนับได้ ข้อจำกัดนี้เกิดขึ้นจากการแสดงรายการค่าที่เป็นไปได้ทั้งหมดและห้ามมิให้ผู้อื่นเข้ามา

3) ค่าแอตทริบิวต์สามารถนับได้ตามเงื่อนไข: ข้อมูลถูกเลือกจากรายการ และสามารถเพิ่มองค์ประกอบลงในรายการได้ กำลังสมัคร ข้อจำกัดนี้ความสมบูรณ์ของแอตทริบิวต์ "ชื่อบริการ" ของตาราง "บริการ" เราได้รับสูตรต่อไปนี้: "ค่าของคุณสมบัติ "ชื่อบริการ" สามารถนับได้ตามเงื่อนไขและสามารถรับค่าใดก็ได้หรือหนึ่งในรายการที่สร้างขึ้นตาม รวมค่าที่ไม่ซ้ำกันของข้อมูลที่ป้อนแล้วสำหรับคุณสมบัติที่ระบุ” .

4) ข้อจำกัดด้านรูปแบบ: ข้อมูลมีการกำหนดไว้อย่างเคร่งครัด รูปร่าง- ข้อจำกัดนี้ถูกใช้บ่อยกว่าข้อจำกัดอื่นๆ เนื่องจากส่วนใหญ่จะเกี่ยวข้องกับประเภทของข้อมูลที่มีอยู่ในแอตทริบิวต์ ต่อไปนี้เป็นตัวอย่างข้อจำกัดความสมบูรณ์ของรูปแบบหลายประเภท:

ค่าของคุณสมบัติ "นามสกุล", "ชื่อ", "นามสกุล" มีรูปแบบดังต่อไปนี้: อักขระตัวแรก - ตัวอักษรตัวพิมพ์ใหญ่ซีริลลิกตัวต่อมา - ตัวพิมพ์เล็ก ไม่อนุญาตให้ใส่ตัวเลข

รูปแบบของวันเกิดของลูกค้าและเจ้านาย วันที่ไปที่ร้านทำผม ตลอดจนวันลาพักร้อนหรือการลาป่วยที่มอบให้อาจารย์คือ วว/ดด/ปป

5) ข้อห้ามใน NULL - ค่าแอตทริบิวต์ ข้อจำกัดประเภทนี้มีผลกับตัวระบุออบเจ็กต์ซึ่งเป็นคีย์หลักเป็นหลัก รวมถึงคุณสมบัติเหล่านั้นด้วย ค่าว่างซึ่งเป็นที่ยอมรับไม่ได้

ตัวอย่างเช่น นอกเหนือจากตัวระบุแล้ว ค่าว่างสำหรับฟิลด์ต่างๆ เช่น ชื่อเต็มของลูกค้าหรือหลัก หรือการไม่มีข้อมูลเกี่ยวกับบริการที่มอบให้กับลูกค้าเมื่อระบุต้นทุนทั้งหมดที่ลูกค้าชำระนั้นเป็นสิ่งที่ยอมรับไม่ได้ .

6) ข้อ จำกัด เกี่ยวกับค่าของฟิลด์ที่เกี่ยวข้องเชิงความหมาย ในกรณีนี้จะมีการกำหนดเงื่อนไขบางประการกับพวกเขาหรือ การพึ่งพาการทำงาน- ดังนั้นในฐานข้อมูลของเราค่าของฟิลด์ "วันที่เริ่มต้นวันหยุด" และ "วันที่สิ้นสุดวันหยุด" จึงมีความสัมพันธ์กันทางความหมาย: วันแรกน้อยกว่าวันที่สอง ในกรณีนี้ ควรกำหนดข้อจำกัดด้านความสมบูรณ์ไว้ แบบฟอร์มต่อไปนี้: : “สำหรับแต่ละอ็อบเจ็กต์ของคลาสที่กำหนด ระหว่างค่าของคุณสมบัติ C1 และ C2 จะต้องเป็นไปตามเงื่อนไขต่อไปนี้เสมอ: C1<С2».

ลักษณะสำคัญของการนำข้อจำกัดความสมบูรณ์ของความหมายไปใช้ก็คือ ข้อจำกัดหลายประเภทสามารถกำหนดให้กับมูลค่าของทรัพย์สินได้พร้อมๆ กัน ตัวอย่างเช่น ค่าของคุณสมบัติ "อายุ" ในตาราง "หลัก" มีข้อจำกัดเกี่ยวกับช่วงเวลา (20-50 ปี) ในรูปแบบ คุณสามารถเลือกค่าจากรายการช่วงเวลาได้ด้วย

ความสมบูรณ์ของข้อมูลหมายความว่าข้อมูลถูกต้องและสม่ำเสมอ โดยทั่วไปยังรวมถึงความสมบูรณ์ของความสัมพันธ์ด้วย ซึ่งป้องกันข้อผิดพลาดในความสัมพันธ์ระหว่างคีย์หลักและคีย์รอง ตัวอย่างการละเมิดความสมบูรณ์ของข้อมูล:

  • การมีอยู่ของบันทึกเด็กกำพร้า (บันทึกย่อยที่ไม่เกี่ยวข้องกับบันทึกผู้ปกครอง)
  • การมีอยู่ของคีย์หลักที่เหมือนกัน

การเข้ารหัสใช้ฟังก์ชันแฮชเพื่อตรวจสอบความสมบูรณ์ของข้อมูล เช่น MD5 ฟังก์ชันแฮชจะแปลงลำดับไบต์ที่มีขนาดตามใจชอบให้เป็นลำดับไบต์ที่มีขนาดคงที่ (ตัวเลข) หากข้อมูลเปลี่ยนแปลง ตัวเลขที่สร้างโดยฟังก์ชันแฮชก็จะเปลี่ยนไปด้วย

ความสมบูรณ์ของข้อมูลเป็นคุณสมบัติที่ข้อมูลรักษารูปแบบและคุณภาพที่กำหนดไว้ล่วงหน้า

คำจำกัดความจากมาตรฐาน

แนวคิด” ความสมบูรณ์ของวัตถุ“(ความสมบูรณ์ของภาษาอังกฤษ) ถูกใช้เป็นคำในทฤษฎีความปลอดภัยของข้อมูล (IS) วัตถุถูกเข้าใจว่าเป็นข้อมูล ข้อมูลพิเศษ หรือทรัพยากรของระบบอัตโนมัติ ความสมบูรณ์ของข้อมูล (ในฐานะทรัพยากรของระบบอัตโนมัติ) เป็นหนึ่งในสามคุณสมบัติหลักของวัตถุความปลอดภัยของข้อมูล คุณสมบัติวัตถุความปลอดภัยของข้อมูล:

  • ความพร้อมใช้งาน (ความพร้อมใช้งานภาษาอังกฤษ);
  • ความซื่อสัตย์สุจริต (อังกฤษ ความซื่อสัตย์);
  • การรักษาความลับ (อังกฤษ การรักษาความลับ)

บางครั้งพวกเขาก็เพิ่มเข้าไปในรายการนี้:

  • การไม่ปฏิเสธ (อังกฤษ: การไม่ปฏิเสธ);
  • ความรับผิดชอบ (อังกฤษ ความรับผิดชอบ);
  • ความถูกต้องหรือความจริงแท้ (อังกฤษ ความถูกต้อง);
  • ความน่าเชื่อถือ (ความน่าเชื่อถือของอังกฤษ)

วิธีการประกันความซื่อสัตย์

วิธีการและวิธีการในการดำเนินการตามข้อกำหนดที่กำหนดไว้ในคำจำกัดความของคำศัพท์นั้นได้อธิบายไว้ในรายละเอียดภายในกรอบของโครงการแบบรวมเพื่อรับรองความปลอดภัยของข้อมูลของวัตถุ (การปกป้องข้อมูล)

วิธีการหลักในการรับรองความสมบูรณ์ของข้อมูล (ข้อมูล) เมื่อจัดเก็บไว้ในระบบอัตโนมัติคือ:

  • สร้างความมั่นใจในความทนทานต่อความผิดพลาด(การจอง การทำสำเนา การทำมิเรอร์อุปกรณ์และข้อมูล เช่น ผ่านการใช้อาร์เรย์ RAID)
  • รับประกันการฟื้นตัวอย่างปลอดภัย(การสำรองข้อมูลและการเก็บถาวรข้อมูลทางอิเล็กทรอนิกส์)

หนึ่งในวิธีที่มีประสิทธิภาพในการดำเนินการตามข้อกำหนดด้านความสมบูรณ์ของข้อมูลในระหว่างการส่งข้อมูลผ่านสายการสื่อสารคือ การปกป้องข้อมูลการเข้ารหัส(การเข้ารหัส การแฮช ลายเซ็นดิจิทัลอิเล็กทรอนิกส์)

ด้วยแนวทางบูรณาการในการปกป้องธุรกิจ ทิศทางของการรับรองความสมบูรณ์และความพร้อมของข้อมูล (ทรัพยากรกระบวนการทางธุรกิจ) จะพัฒนาเป็นแผนกิจกรรมที่มุ่งเป้าไปที่ สร้างความมั่นใจในความต่อเนื่องทางธุรกิจ .

ความสมบูรณ์ของข้อมูลในการเข้ารหัส

การเข้ารหัสข้อมูลไม่ได้รับประกันว่าความสมบูรณ์ของข้อมูลจะไม่ถูกทำลาย ดังนั้นจึงมีการใช้วิธีการเพิ่มเติมเพื่อตรวจสอบความสมบูรณ์ของข้อมูลในการเข้ารหัส การละเมิดความสมบูรณ์ของข้อมูลหมายถึงสิ่งต่อไปนี้:

  • การผกผันบิต;
  • การเพิ่มบิตใหม่ (โดยเฉพาะข้อมูลใหม่ทั้งหมด) โดยบุคคลที่สาม
  • ลบบิตข้อมูลใด ๆ
  • การเปลี่ยนลำดับของบิตหรือกลุ่มของบิต

ในการเข้ารหัสการแก้ปัญหาความสมบูรณ์ของข้อมูลเกี่ยวข้องกับการใช้มาตรการที่ทำให้สามารถตรวจจับการบิดเบือนข้อมูลแบบสุ่มได้ไม่มากนักเนื่องจากวิธีการเข้ารหัสทฤษฎีด้วยการตรวจจับและแก้ไขข้อผิดพลาดนั้นค่อนข้างเหมาะสมสำหรับจุดประสงค์นี้ แต่เป็นการกำหนดเป้าหมาย การเปลี่ยนแปลงข้อมูลโดย cryptanalyst ที่ใช้งานอยู่

กระบวนการตรวจสอบความสมบูรณ์นั้นรับประกันได้โดยการเพิ่มความซ้ำซ้อนในข้อมูลที่ส่ง ซึ่งทำได้โดยการเพิ่มชุดไบต์การยืนยันลงในข้อความ การรวมกันของไบต์นี้คำนวณตามอัลกอริธึมบางอย่างและช่วยให้คุณตรวจสอบว่าข้อมูลมีการเปลี่ยนแปลงโดยบุคคลที่สามหรือไม่ ความน่าจะเป็นที่ข้อมูลมีการเปลี่ยนแปลงทำหน้าที่เป็นตัววัดความแข็งแกร่งของปลอมของการเข้ารหัส

ข้อมูลเพิ่มเติมที่ซ้ำซ้อนในข้อความเรียกว่าการแทรกเลียนแบบ อัตราการเลียนแบบสามารถคำนวณได้ก่อนหรือระหว่างการเข้ารหัสข้อความ

เม็ดมีดเลียนแบบ

โดยทั่วไปจำนวนเลขฐานสอง (จำนวนบิต) ในส่วนแทรกการจำลองจะถูกกำหนดโดยข้อกำหนดการเข้ารหัส โดยคำนึงถึงข้อเท็จจริงที่ว่าความน่าจะเป็นในการจัดเก็บข้อมูลเท็จมีค่าเท่ากับ 1/2 p โดยที่ p คือจำนวนหลักไบนารี ( จำนวนบิต) ในส่วนแทรกการจำลอง

ImitationInsert คือตัวเลขที่คำนวณตามเนื้อหาของข้อความ นั่นคือการแทรกเลียนแบบเป็นฟังก์ชันของข้อความ:

ม = (x) ,

  • M - เม็ดมีดเลียนแบบ;
  • f เป็นฟังก์ชันที่คำนวณการแทรกแบบเลียนแบบ
  • x - ข้อความ

การเลียนแบบสามารถใช้เพื่อยืนยันความถูกต้องของข้อความและตรวจสอบความสมบูรณ์ของข้อความ ขึ้นอยู่กับวัตถุประสงค์ของการแทรกการจำลอง อัลกอริธึมสำหรับฟังก์ชั่นการทำงาน f (รหัส) แบ่งออกเป็นสองคลาส:

  • รหัสตรวจสอบความสมบูรณ์ของข้อความ (MDC, รหัสตรวจจับการแก้ไขภาษาอังกฤษ) อัลกอริธึมจะคำนวณการแทรกจำลองที่เหมาะสมสำหรับการตรวจสอบความสมบูรณ์ (แต่ไม่ใช่ความถูกต้อง) ของข้อมูลโดยการแฮชข้อความ
  • รหัสตรวจสอบข้อความ (MAC, รหัสตรวจสอบข้อความภาษาอังกฤษ) อัลกอริธึมจะคำนวณส่วนแทรกปลอมที่เหมาะสมสำหรับการปกป้องข้อมูลจากการดัดแปลงโดยการแฮชข้อความโดยใช้รหัสลับ

เอ็มดีซี

ฟังก์ชันแฮชสำหรับการคำนวณรหัสยืนยันความสมบูรณ์ของข้อความอยู่ในคลาสย่อยของฟังก์ชันแฮชแบบไม่ใช้คีย์ ในระบบการเข้ารหัสในชีวิตจริง ฟังก์ชันแฮชเหล่านี้เป็นการเข้ารหัส กล่าวคือ นอกเหนือจากคุณสมบัติขั้นต่ำของฟังก์ชันแฮช (การบีบอัดข้อมูล ความง่ายในการคำนวณการแยกย่อยจากข้อความ) ฟังก์ชันเหล่านี้มีคุณสมบัติดังต่อไปนี้:

  • ไม่สามารถย้อนกลับได้ (อังกฤษ การต้านทานภาพล่วงหน้า);
  • ความต้านทานต่อการชนประเภทแรก (ความต้านทานการชนที่อ่อนแอ);
  • ความต้านทานต่อการชนประเภทที่สอง (อังกฤษ: ความต้านทานการชนอย่างรุนแรง)

ขึ้นอยู่กับคุณสมบัติใดของฟังก์ชันแฮช MDC ที่สามารถแยกแยะได้ คลาสย่อยสองคลาส:

  • ฟังก์ชันแฮชทางเดียว (OWHF จากฟังก์ชันแฮชทางเดียวภาษาอังกฤษ) ซึ่งตอบสนองคุณสมบัติของการย้อนกลับไม่ได้และทนทานต่อการชนประเภทแรก
  • ฟังก์ชันแฮชที่ทนต่อการชนกัน (CRHF จากภาษาอังกฤษ ฟังก์ชั่นแฮชที่ทนต่อการชนกัน) ซึ่งทนทานต่อการชนกันของประเภทที่หนึ่งและสอง (โดยทั่วไปแล้ว ในทางปฏิบัติ ฟังก์ชันแฮช CRHF ยังตอบสนองคุณสมบัติที่ไม่สามารถย้อนกลับได้)

อัลกอริธึมฟังก์ชันแฮช MDC มีสามประเภทหลัก ขึ้นอยู่กับวิธีการสร้าง:

  • บนยันต์บล็อก ตัวอย่างเช่น: อัลกอริทึม มัทยาส-เมเยอร์-โอซีอัส, อัลกอริธึม เดวีส์-เมเยอร์, อัลกอริธึม มิยากุจิ-เพรนีล, เอ็มดีซี-2 , เอ็มดีซี-4 ;
  • อัลกอริธึมการแฮชพิเศษ (กำหนดเองภาษาอังกฤษ) ซึ่งเน้นความเร็วและไม่ขึ้นอยู่กับส่วนประกอบอื่น ๆ ของระบบ (รวมถึงรหัสบล็อกหรือส่วนประกอบการคูณแบบโมดูลาร์ ซึ่งอาจนำไปใช้เพื่อวัตถุประสงค์อื่นแล้ว) ตัวอย่างเช่น: MD4, MD5, SHA-1, SHA-2, RIPEMD-128, RIPEMD-160;
  • บนเลขคณิตแบบโมดูลาร์ ตัวอย่างเช่น: MASH-1, MASH-2

แม็ค

ฟังก์ชันแฮชของ MAC สำหรับการคำนวณรหัสตรวจสอบข้อความ ซึ่งเป็นกลุ่มย่อยของฟังก์ชันแฮชคีย์ รวมถึงกลุ่มของฟังก์ชันที่มีคุณสมบัติดังต่อไปนี้:

  • ความง่ายในการคำนวณการแยกย่อยจากข้อความ
  • การบีบอัดข้อมูล - ข้อความอินพุตที่มีความยาวบิตตามอำเภอใจจะถูกแปลงเป็นส่วนย่อยของความยาวคงที่
  • ความต้านทานต่อการแฮ็ก - การมีคู่การแยกย่อยข้อความตั้งแต่หนึ่งคู่ขึ้นไป (x[i], h(x[i])) เป็นไปไม่ได้ในการคำนวณที่จะได้รับคู่การแยกย่อยข้อความใหม่ (x, h(x)) สำหรับ มีข้อความใหม่ x

หากคุณสมบัติสุดท้ายไม่เป็นไปตามนั้น MAC อาจถูกปลอมแปลงได้ นอกจากนี้ คุณสมบัติสุดท้ายยังบอกเป็นนัยว่าไม่สามารถคำนวณคีย์ได้ กล่าวคือ การมีคู่ตั้งแต่หนึ่งคู่ขึ้นไป (x[i], h(x[i])) กับคีย์ k จึงเป็นไปไม่ได้ที่จะรับคีย์นี้โดยการคำนวณ

อัลกอริทึมในการรับรหัสตรวจสอบข้อความสามารถแบ่งออกเป็นกลุ่มต่อไปนี้ตามประเภท:

  • บนบล็อกยันต์ ตัวอย่างเช่น CBC-MAC, RIPE-MAC1, RIPE-MAC3;
  • รับ MAC จาก MDC ;
  • อัลกอริธึมพิเศษ (กำหนดเอง) ตัวอย่างเช่น MAA, MD5-MAC;
  • บนสตรีมยันต์ ตัวอย่างเช่น MAC ที่ใช้ CRC

การรับ MAC ตาม MDC

มีวิธีการรับรหัสการตรวจสอบข้อความจาก MDC โดยรวมคีย์ลับไว้ในข้อมูลอินพุตของอัลกอริทึม MDC ข้อเสียของแนวทางนี้คือ ในทางปฏิบัติแล้ว อัลกอริธึม MDC ส่วนใหญ่ได้รับการออกแบบให้เป็น OWHF หรือ CRHF ซึ่งมีข้อกำหนดที่แตกต่างจากอัลกอริธึม MAC

  1. วิธีคำนำหน้าลับ : ไปยังลำดับของบล็อคข้อมูล x (\รูปแบบการแสดงผล x)=x 1 x 2 x 3 ..x n รหัสลับจะถูกเพิ่มที่จุดเริ่มต้น เค: เค||x- สำหรับลำดับข้อมูลที่กำหนด MDC จะถูกคำนวณโดยใช้ฟังก์ชันแฮชแบบวนซ้ำ เช่น H 0 =IV (จากค่าเริ่มต้นภาษาอังกฤษ) H i = (เอช ไอ-1, xฉัน) ชม.(x) = H น . ดังนั้น แม็ค M (\displaystyle M)=ชม.(เค||x- ข้อเสียของแนวทางนี้คือบุคคลที่สามสามารถเพิ่มข้อมูลเพิ่มเติมที่ส่วนท้ายของลำดับบล็อกได้ : เค||x||- MAC ใหม่สามารถคำนวณได้โดยไม่ต้องรู้รหัส เค: M (\displaystyle M) 1 = (M (\displaystyle M),).
  2. วิธีการต่อท้ายความลับ : รหัสลับจะถูกเพิ่มที่ส่วนท้ายของลำดับข้อมูล: x||เค- ในกรณีนี้คือ MAC M (\displaystyle M)=ชม.(x||เค- ในกรณีนี้ สามารถใช้การโจมตีวันเกิดได้ โดยมีความยาวย่อยของ nนิดหน่อย. บุคคลที่สามจะต้องมีคำสั่ง 2 n/2 การดำเนินการสำหรับข้อความ xค้นหาข้อความ เอ็กซ์'เช่นนั้น ชม.(x)= ชม.(เอ็กซ์'- ในขณะเดียวกันก็มีความรู้ที่สำคัญ เคจะไม่จำเป็น ค้นหาค่า MAC M (\displaystyle M)สำหรับข้อความ xบุคคลที่สามจะสามารถสร้างคู่ที่ถูกต้องได้ ( เอ็กซ์',M (\displaystyle M)).
  3. วิธีซองจดหมายพร้อมช่องว่างภายใน : สำหรับกุญแจ เคและเอ็ม.ดี.ซี. ชม. ชม.เค ( x)=(เค||พี||x||เค), ที่ไหน พี- สตริงที่เสริมคีย์ เคตามความยาวของบล็อกข้อมูล เพื่อให้แน่ใจว่ามีการวนซ้ำอย่างน้อย 2 ครั้ง ตัวอย่างเช่น สำหรับ MD5 เค- 128 บิต และ พี- 384 บิต
  4. HMAC : สำหรับกุญแจ เคและเอ็ม.ดี.ซี. ชม. MAC จากข้อความถูกคำนวณ ชม.เค ( x)=(เค||พี 1 ||ชม.(เค||พี 2 ||x)), ที่ไหน พี 1 ,พี 2 - เส้นที่แตกต่างกันเสริมกัน เคจนถึงความยาวของบล็อกข้อมูล การออกแบบนี้ค่อนข้างมีประสิทธิภาพแม้ว่าจะมีการใช้งานแบบคู่ก็ตาม ชม..

รูปแบบการใช้งาน

โดยทั่วไปแล้ว กระบวนการถ่ายโอนข้อมูลและการตรวจสอบความสมบูรณ์ของข้อมูลมีดังนี้: ผู้ใช้ เพิ่มเนื้อหาสรุปในข้อความของเขา คู่นี้จะถูกโอนไปยังบุคคลที่สอง บี- ที่นั่น ข้อความจะถูกเลือก มีการคำนวณการสรุป และการเปรียบเทียบการสรุป หากค่าตรงกันข้อความจะถือว่าเชื่อถือได้ ความคลาดเคลื่อนจะระบุว่าข้อมูลมีการเปลี่ยนแปลง

รับประกันความสมบูรณ์ของข้อมูลโดยใช้การเข้ารหัสและ MDC

MDC คำนวณจากข้อความต้นฉบับ M (\displaystyle M)=ชม.(x- นี้