แบบจำลองข้อมูลทางกายภาพ (ระดับภายใน) การสร้างและใช้ค่าเริ่มต้น ข้อจำกัด และกฎโดยใช้ T-SQL ไม่ได้ระบุค่าที่สอดคล้องกับคีย์

บทความนี้เกี่ยวกับอะไร?

บทความนี้ยังคงกล่าวถึงชุดบทความ "ขั้นตอนแรกในการพัฒนา 1C" ครอบคลุมถึงหลักการทำงานกับคอลเลกชันสากล หลังจากอ่านบทความแล้ว คุณจะได้เรียนรู้:

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

การบังคับใช้

บทความนี้กล่าวถึงแพลตฟอร์ม 1C:Enterprise 8.3 ของรุ่นปัจจุบัน

วิธีทำงานกับคอลเลกชันสากลใน 1C

คอลเลกชันของค่าคือคอนเทนเนอร์ที่มักจะมีองค์ประกอบจำนวนเท่าใดก็ได้ อย่างไรก็ตาม มักไม่มีข้อจำกัดที่เข้มงวดเกี่ยวกับประเภทข้อมูล

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

สิ่งสำคัญคือต้องเข้าใจว่าคอลเลกชันไม่ได้จัดเก็บไว้ในฐานข้อมูล (เราไม่ได้พูดถึงประเภทข้อมูล Value Store ซึ่งสามารถจัดเก็บข้อมูลได้เกือบทุกประเภท)

มีอยู่ ประเภทต่างๆคอลเลกชันสากล: อาร์เรย์, โครงสร้าง, การจับคู่, อาร์เรย์คงที่, ตารางค่า, ส่วนตารางฯลฯ แต่คอลเลกชันทั้งหมดมีพฤติกรรมคล้ายกัน

คอลเลกชันสามารถสร้างขึ้นเป็นผลมาจากการทำงานของฟังก์ชัน (ฟังก์ชันส่งคืนคอลเลกชันสากลเป็นค่า)

มีอยู่ คอลเลกชันใหม่ด้วยตนเองโดยการเข้าถึง Constructor และสร้างอินสแตนซ์ของคลาส

ตัวอย่างเช่น: OurArray = อาร์เรย์ใหม่;

ตัวสร้างสำหรับคอลเลกชันทั่วไปจำนวนมากได้รับการกำหนดพารามิเตอร์

ดังนั้นในตัวสร้างสำหรับ คุณสามารถระบุจำนวนสมาชิกในมิติที่เกี่ยวข้องได้ เหล่านั้น. คุณสามารถประกาศหลายมิติได้ทันที .

คำอธิบายที่สอดคล้องกันของ Constructor อยู่ในตัวช่วยไวยากรณ์

ดังนั้นด้วยการใช้พารามิเตอร์ตัวสร้าง คุณสามารถตั้งค่าพฤติกรรมที่ต้องการของวัตถุที่กำหนดได้ทันที

แต่พารามิเตอร์เป็นทางเลือก นักพัฒนาไม่สามารถตั้งค่าและกำหนดพฤติกรรมของ Array เพิ่มเติมได้ตามที่เห็นสมควร

คอลเลกชันสากลเกือบทั้งหมดสามารถสร้างขึ้นได้โดยใช้ตัวสร้าง (ข้อยกเว้นคือส่วนของตารางซึ่งทำหน้าที่เป็นอ็อบเจ็กต์การกำหนดค่า)

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

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

ตัวอย่างเช่น, อาร์เรย์ของเรา. โปรดทราบว่าในกรณีนี้ ระบบจะส่งคืนองค์ประกอบ Array ที่มีดัชนี 3 และนี่คือองค์ประกอบที่สี่ของ Array

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

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

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

สำหรับคอลเลกชันทั่วไปส่วนใหญ่ วิธีการที่ใช้ได้แก่ นับ จัดทำดัชนี เพิ่ม แทรก ลบ และค้นหา

Count คือฟังก์ชันที่ส่งคืนจำนวนองค์ประกอบในคอลเลกชัน สามารถใช้ก่อนรอบได้ สำหรับดังแสดงในรูป

วิธีการ Index ไม่มีอยู่สำหรับคอลเลกชันทั้งหมด แต่สำหรับคอลเลกชันที่สามารถอ้างอิงองค์ประกอบได้เท่านั้น ตัวอย่างก็คือ ตารางค่า.

ตารางค่า– นี่คือคอลเลกชันเฉพาะของแถว โดยแถวสามารถมีคอลัมน์ที่แตกต่างกันได้ ประเภทต่างๆค่านิยม

แต่ละบรรทัดแสดงถึงเอนทิตีที่เป็นอิสระ คุณสามารถรับลิงค์ได้ผ่านบรรทัดนี้คุณสามารถเข้าถึงค่าของคอลัมน์ในบรรทัดนี้

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

วิธีการเพิ่มค่าใหม่ให้กับ คอลเลกชันนี้มีอยู่สำหรับเกือบทุกคน คอลเลกชันสากล. รูปแสดงวิธีการเติมอาร์เรย์ด้วยค่าตั้งแต่ 0 ถึง 10 ในสองวิธี

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

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

ไวยากรณ์: แทรก (,)

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

หากต้องการลบองค์ประกอบออกจากคอลเลกชัน ให้ใช้วิธีการ ลบ. วิธีการ Delete ระบุตามดัชนีว่าองค์ประกอบใดที่เราจะลบ

ไวยากรณ์: ลบ()
ตัวอย่างการใช้งาน: OurArray.Delete(5);

ควรสังเกตว่าสำหรับคอลเลกชันเหล่านั้นที่สตริงเป็นตัวแทนของเอนทิตีอิสระ (เช่น for ตารางค่า) เรายังสามารถใช้วิธีรับดัชนีเพื่อลบแถวนี้ในภายหลังได้

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

ตัวอย่างเช่นใน ตารางค่าคุณสามารถระบุแถวและคอลัมน์ที่คุณต้องการค้นหาได้

หากพบค่า วิธีการนี้จะส่งคืนดัชนีหรือสตริงที่ระบุ หากไม่พบค่า ระบบจะส่งกลับค่าประเภท ไม่ได้กำหนด. สัมพันธ์กับ Array จะส่งกลับ ดัชนีหรือค่า ไม่ได้กำหนด.

ตัวอย่างการใช้งาน: ตัวแปรของเรา = OurArray.Find(8);

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

วิธีการเพิ่มเติมสำหรับ Array

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

โดยเฉพาะอย่างยิ่ง ตัวแปร QuantumInArray สามารถกำหนดได้แตกต่างกัน:

ปริมาณInArray = OurArray.InBorder();
จากนั้น เมื่ออธิบายวงจร ไม่ควรลบสิ่งใดออกจากตัวแปรนี้

วิธีการ Set ช่วยให้คุณสามารถกำหนดค่าให้กับองค์ประกอบ Array ตามดัชนีได้

ไวยากรณ์: ติดตั้ง(,)

ตัวอย่าง: OurArray.Set(2,8);

ทางเลือกอื่น: อาร์เรย์ของเรา = 8;

คุณสามารถใช้วิธีการสำหรับอาร์เรย์ รับสำหรับการอ่านค่าดัชนีโดยไม่ต้องใช้วงเล็บเหลี่ยม

ไวยากรณ์: รับ()

ตัวอย่าง: ตัวแปรของเรา = OurArray.Get(2);

ทางเลือกอื่น: ตัวแปรของเรา = OurArray;

โครงสร้างการรวบรวมสากล

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

โครงสร้างคือคอลเลกชัน แต่ละค่าประกอบด้วยคู่ องค์ประกอบแรกของคู่เรียกว่า สำคัญ. องค์ประกอบที่สองของคู่คือ ความหมาย.

สำคัญเป็นชนิดข้อมูลสตริงที่อธิบายค่าอย่างเคร่งครัด ตัวอย่างเช่น, ไปที่กุญแจ"รหัส" สามารถสอดคล้องกับค่า 113; ไปที่กุญแจ“ชื่อ” แปลว่า “วาสยา” ค่านั้นไม่ได้อยู่ภายใต้ข้อจำกัดประเภทข้อมูล

โครงสร้างนี้ใช้งานได้สะดวกมากหากเราต้องการสร้างรายการพารามิเตอร์บางอย่าง ถ้านี้ โครงสร้างเรียกว่า โครงสร้างของเราจากนั้นเราจะอ้างอิงถึงสองค่าของมันดังนี้: OurStructure.Code และ OurStructure.Name

การเข้าถึงประเภทนี้สะดวกกว่าถ้าเรากำหนดพารามิเตอร์ทั้งหมดใน Array และเข้าถึงด้วยดัชนี

โครงสร้างทำให้โค้ดโปรแกรมอ่านได้ (เข้าใจได้) โครงสร้างถูกใช้ค่อนข้างบ่อย บ่อยกว่าอาร์เรย์มาก

ใช้เพื่ออธิบายพารามิเตอร์บางตัว ซึ่งมักจะมีเพียงพอ จำนวนมากในอัลกอริธึมทั้งหมด

นอกจากนี้ โครงสร้างจะถูกใช้หากขั้นตอนและฟังก์ชันมีพารามิเตอร์ที่ส่งผ่านจำนวนมาก

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

แยกกันก็ควรสังเกตว่าเป็น สำคัญไม่มีบรรทัดใดๆ ที่สามารถปรากฏในโครงสร้างได้อย่างแน่นอน มีข้อจำกัดบางประการ

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

การเริ่มต้นที่ยอมรับได้ สำคัญด้วยตัวอักษรหรือขีดล่าง ดังนั้น, สำคัญต้องเป็นไปตามข้อกำหนดสำหรับการสร้างตัวระบุ

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

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

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

องค์ประกอบโครงสร้างเข้าถึงได้โดยใช้ชื่อคีย์เท่านั้น อย่างไรก็ตาม For Each loop ยังใช้ได้กับโครงสร้างด้วย แต่คุณไม่ควรยึดถือลำดับขององค์ประกอบโครงสร้าง

โครงสร้างถูกสร้างขึ้นในลักษณะเดียวกับคอลเลกชันทั่วไปอื่นๆ โดยใช้ตัวสร้างใหม่ โดยระบุประเภทข้อมูล โครงสร้าง

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

ต่างจากอาร์เรย์ที่คุณสามารถระบุจำนวนองค์ประกอบสำหรับทุกมิติได้อย่างง่ายดาย ในโครงสร้างคุณสามารถระบุเนื้อหาได้เอง

ตัวอย่างเช่น: โครงสร้างของเรา = โครงสร้างใหม่ (“รหัส, ชื่อ”, 133, “วาสยา”);

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

มีวิธีการเพิ่มค่าใหม่ให้กับโครงสร้าง แทรกซึ่งจะแทรกคู่ใหม่ (คีย์และค่า)

ตัวอย่างเช่น: OurStructure.Insert(“สมาชิกในครอบครัว”,3);

โครงสร้างมีลักษณะเป็นอีกวิธีหนึ่งที่ใช้ค่อนข้างบ่อย นี่คือวิธีการ คุณสมบัติ.

เมื่อใช้วิธีการนี้ คุณจะเข้าใจได้ว่ามีองค์ประกอบในโครงสร้างนี้ที่คีย์มีชื่อเช่นนั้นหรือไม่

หากมีองค์ประกอบดังกล่าว ระบบจะส่งคืนค่า True มิฉะนั้นจะคืนค่าเป็น False

ตัวอย่างเช่น การแสดงออก โครงสร้างของเราทรัพย์สิน (“สมาชิกในครอบครัว”)จะเท่ากับค่า True วิธีนี้ใช้ค่อนข้างบ่อยเมื่อวิเคราะห์โครงสร้าง

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

ตัวอย่างเช่น: รายงาน (โครงสร้างของเรา ["สมาชิกในครอบครัว"]);

อย่างไรก็ตาม เราไม่ควรลืมว่าโครงสร้างเป็นชุดของวัตถุที่ไม่เรียงลำดับ ซึ่งเป็นเหตุผลว่าทำไมการเข้าถึงด้วยดัชนี 0, 1, 2 จึงเป็นที่ยอมรับไม่ได้

คอลเลกชันทั่วไป รายการของค่า

รายการค่าเป็นรายการเชิงเส้นขององค์ประกอบประเภทข้อมูลใดๆ

แต่ละองค์ประกอบประกอบด้วยค่าหลายค่า แผนผังรายการค่าสามารถแสดงเป็นรายการที่มีสี่คอลัมน์ได้

คอลัมน์แรก - เครื่องหมาย. มีชนิดข้อมูลบูลีนและอนุญาตให้ผู้ใช้ทำเครื่องหมายหรือยกเลิกการทำเครื่องหมายในช่อง

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

คอลัมน์ที่สามคือค่าที่เก็บไว้นั่นคือ นี่คือข้อมูลประเภทใดก็ได้ และอาจแตกต่างกันในบรรทัดที่ต่างกัน

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

รายการค่า– นี่คือวัตถุที่ผู้ใช้สามารถทำงานด้วยสายตาได้ เหล่านั้น. รายการค่าสามารถแสดงบนแบบฟอร์มได้

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

เราจะพบ รายการค่าในผู้ช่วยซิแท็กซ์ ตัวสร้าง รายการค่าไม่กำหนดพารามิเตอร์ (คุณไม่สามารถตั้งค่าเริ่มต้นใดๆ ได้)

มีวิธีต่างๆ เช่น:

  • แทรก(,) ;
  • เพิ่ม(,);
  • ปริมาณ();
  • ดัชนี().

นอกจากนี้ยังมีวิธีพิเศษ เช่น ยกเลิกการโหลดค่า(). สิ่งนี้จะสร้างอาร์เรย์ที่จะคัดลอกรายการค่าลงไป ตัวอย่างเช่น:

อาร์เรย์ขององค์ประกอบ = รายการ PriceTypes.OutloadValues();

นอกจากนี้ยังมีวิธีย้อนกลับ:
ListPriceTypes.LoadValues(ArrayItems);

มีวิธีการค้นหา:
FindByValue(); FindByIdentifier()

มีวิธีคัดลอก:
ListCopy = PriceTypeList.Copy();
วิธีการนี้มีวัตถุประสงค์เพื่อทำการแก้ไขบางอย่างกับสำเนา

มีวิธีดังนี้:
เรียงลำดับตามค่า();
เรียงลำดับตามมุมมอง()

วิธีการ เลือกรายการ(,)และ ทำเครื่องหมายรายการ()เรียกกล่องโต้ตอบโมดอลที่หยุดการทำงานของอัลกอริทึมจนกว่าผู้ใช้จะปิดหน้าต่าง

เมื่อต้องการใช้วิธีการเหล่านี้ในคุณสมบัติการกำหนดค่า โหมดการใช้กิริยาจะต้องตั้งค่าเป็น ใช้.

โค้ดตัวอย่างที่เรียกจากโมดูลแอปพลิเคชันที่ได้รับการจัดการ:

แสดงรหัสนี้ในโหมดผู้ใช้ (กล่องโต้ตอบโมดอล)

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

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

ในโหมดผู้ใช้ เมื่อคุณคลิกปุ่มกรอกของขวัญในแบบฟอร์มการประมวลผล รายการที่เสร็จสมบูรณ์จะปรากฏขึ้น

หากต้องการคุณสามารถแก้ไขรายการได้: สามารถเพิ่มองค์ประกอบบางส่วนได้, บางส่วนสามารถลบออกได้

การปฏิบัติตามข้อกำหนดการรวบรวมอเนกประสงค์

คอลเลกชั่นนี้มีความคล้ายคลึงกับ โครงสร้าง. เช่นเดียวกับโครงสร้าง การแมปคือชุดของค่าที่ประกอบด้วยคีย์และค่านั้นเอง

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

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

ตัวสร้างการปฏิบัติตามข้อกำหนดซึ่งแตกต่างจากโครงสร้างไม่มีความสามารถในการระบุพารามิเตอร์

ตัวอย่างการใช้งาน:

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

เมื่อแทรกองค์ประกอบลงในคอลเลกชัน Match นอกเหนือจากวิธีการ แทรก(,)อีกวิธีในการแทรกค่าคือการใช้ตัวดำเนินการมอบหมายปกติ

ตัวอย่างเช่น: การแข่งขันของเรา = การแข่งขันใหม่;
นัด = 999;

เหล่านั้น. หากไม่มีองค์ประกอบอยู่ในคอลเลกชัน องค์ประกอบนั้นจะถูกเพิ่มโดยใช้ตัวดำเนินการมอบหมาย และหากมีอยู่ องค์ประกอบนั้นจะได้รับการอัปเดต

สิ่งนี้ตรงกันข้ามกับโครงสร้าง

ตารางค่านิยมของคอลเลกชันสากล

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

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

ความแตกต่าง ตารางค่าจากอาร์เรย์สองมิติ:

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

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

ดังนั้น, ตารางค่าประกอบด้วยชุดแถวและชุดคอลัมน์ ทั้งแถวและคอลัมน์เป็นคอลเลกชัน

เหล่านั้น. ภายในคอลเลกชัน ตารางค่ามีอีกสองคอลเลกชัน ลองหันไปหาผู้ช่วยไวยากรณ์แล้วค้นหา ตารางค่า.

ประเภทข้อมูลที่รองรับ: ตัวมันเอง ตารางค่าซึ่งประกอบด้วยสตริง แต่ละแถวจะแสดงด้วยประเภทข้อมูล ค่าตารางแถวซึ่งมีคุณสมบัติและวิธีการเป็นของตัวเอง มีอยู่ คอลเลกชันของค่าคอลัมน์ของตารางยังมีคุณสมบัติบางอย่าง

จุดสำคัญ! ขั้นตอนการสร้าง ตารางค่าจะต้องคอมไพล์ &OnServer

ก่อนที่คุณจะเริ่มทำงานด้วย ตารางค่าคุณต้องพิจารณาว่าจะมีคอลัมน์ใด (เช่น สร้างคอลัมน์เหล่านั้น) ไวยากรณ์:

เพิ่ม(,)
(ไม่จำเป็น)
ประเภท: สตริง.
(ไม่จำเป็น)
ประเภท: คำอธิบายประเภท
(ไม่จำเป็น)
ประเภท: สตริง.
(ไม่จำเป็น)
ประเภท: หมายเลข.

ตัวอย่างเช่น:

เพื่อเรียกโพรซีเดอร์นี้เราจะใช้คำสั่ง

ในคำอธิบาย ตารางค่าองค์ประกอบของคอลเลกชันได้อย่างแม่นยำ ค่าตารางแถว.

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

เพื่อเพิ่ม บรรทัดใหม่ไปที่ตารางคุณต้องใช้วิธีการอย่างใดอย่างหนึ่ง เพิ่ม(), หรือ แทรก(). ในกรณีที่สอง คุณควรระบุว่าควรวางบรรทัดที่ต้องการในตำแหน่งใด

ในการกำหนดค่าให้กับคอลัมน์ เราใช้จุดเพื่อเข้าถึงชื่อคอลัมน์หรือดัชนี (โดยใช้วงเล็บเหลี่ยม)

สำหรับการกรอก ตารางค่าสามารถใช้วิธีการต่อไปนี้:

ชัดเจน()– เพื่อลบแถวทั้งหมดออกจาก ตารางค่า.

เติมค่า(,)– ให้คุณเติมคอลัมน์ทั้งหมดหรือคอลัมน์ที่เลือกด้วยค่าเดียว
โหลดคอลัมน์(,)– โหลดคอลัมน์จากอาร์เรย์
ยกเลิกการโหลดคอลัมน์()– ยกเลิกการโหลดคอลัมน์ลงในอาร์เรย์

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

สำเนา(,)– ช่วยให้คุณสร้างตารางใหม่ตามตารางที่มีอยู่ ตารางค่าและไม่ใช่ทุกแถวและทุกคอลัมน์ แต่มีเพียงบางแถวเท่านั้น ค่าส่งคืน – ตารางค่า.

คุณสามารถคัดลอกโครงสร้างได้ ตารางค่า. มีวิธีที่สอดคล้องกันสำหรับสิ่งนี้ คัดลอกคอลัมน์(). เราจะได้อันเปล่าๆ ตารางค่าด้วยโครงสร้างที่ต้องการ

ใน ตารางค่ามีวิธีหนึ่ง ทั้งหมด(). คุณสามารถระบุคอลัมน์ที่คุณต้องการรวมค่าตัวเลขได้ สัมพันธ์กับโค้ดที่แสดงก่อนหน้านี้ใน Tableau คุณสามารถคำนวณค่าได้: TK.Total (“จำนวน”).

ใน ตารางค่าเป็นไปได้ที่จะจัดกลุ่ม (ยุบ) ค่าตัวเลขด้วยค่าที่เหมือนกันของบางคอลัมน์โดยใช้วิธีการ ทรุด(,).

สัมพันธ์กับโค้ดที่แสดงก่อนหน้านี้ใน Tableau คุณสามารถคำนวณค่าได้: TK.Collapse("วันในสัปดาห์", "จำนวน")

ตารางค่าสามารถแสดงบนหน้าจอผู้ใช้เพื่อให้คุณสามารถดำเนินการใด ๆ กับมันได้ แต่ไม่เหมือน รายการค่าคุณไม่สามารถเรียกตารางบนหน้าจอจากโค้ดโปรแกรมได้

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

หลังจากนั้นควรแสดงตารางผลลัพธ์ในแบบฟอร์ม

ในโมดูลแบบฟอร์มที่ส่วนท้ายของอัลกอริทึมที่คอมไพล์ไว้ก่อนหน้านี้ (ในขั้นตอนการสร้างตารางค่า) คุณควรเพิ่ม:
ValueInFormData(TK, ตาราง);

คอลเลกชันสากล ต้นไม้แห่งคุณค่า

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

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

เนื่องจากแถวสามารถอยู่ในลำดับรองซึ่งกันและกัน แต่ละแถวจึงสามารถมีพาเรนต์ได้ เช่นเดียวกับแถวรองด้วย

มาสร้างคำสั่ง Tree ที่เกี่ยวข้องและขั้นตอนการประมวลผลกัน

มาสร้างกันเถอะ โดยมีแถวหลักหนึ่งแถวและแถวรองสองแถว

มาสร้างแอตทริบิวต์ของแบบฟอร์มกันดีกว่า เดอร์ซน(ชนิดข้อมูล – ทรีค่า)

สำหรับแอตทริบิวต์นี้ เราจะสร้างคอลัมน์ปีและเดือน

ย้ายองค์ประกอบที่เกี่ยวข้อง เดอร์ซนบนแบบฟอร์ม

ในตอนท้าย ขั้นตอน TreeOnServer()มาเพิ่ม:

ValueInFormData(TreeZn, DerZn);

เรามาตรวจสอบสิ่งที่เกิดขึ้นในโหมดผู้ใช้กันดีกว่า

การใช้ปุ่ม เพิ่มคุณสามารถเพิ่มบรรทัดใหม่ได้ พวกเขายังสามารถสร้างลำดับชั้นได้

ในการสำรวจองค์ประกอบทั้งหมดของแผนผังคุณค่า เราจำเป็นต้องใช้การเรียกซ้ำ เช่น เรียกขั้นตอนจากตัวมันเอง ตัวอย่างเช่น การประมวลผลแผนผังค่าอาจมีลักษณะดังนี้:

นี่เป็นการสรุปความคุ้นเคยครั้งแรกของเรากับคอลเลกชันสากล

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

มันถูกสร้างขึ้นดังนี้ ลำดับของเรคคอร์ดที่สอดคล้องกับเรคคอร์ดในตารางต้นฉบับจะเรียงลำดับตามค่า คีย์หลัก. บันทึกทางลอจิคัลจะรวมกันเป็นบล็อก (k บันทึกต่อบล็อก)

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

มาดูขั้นตอนการทำงานกับ B-tree โดยใช้ตัวอย่าง ให้มีไฟล์อินสแตนซ์ของบันทึกลอจิคัลคีย์ที่ใช้ค่า 2, 7, 8, 12, 15, 27, 28, 40, 43, 50 เพื่อความแน่นอนลองใช้ k=2 (เรา รวม 2 เข้าด้วยกันเป็นบล็อก ตัวอย่างของบันทึก). สิ่งที่สร้างขึ้นสำหรับตัวอย่างนี้แสดงไว้ในรูปที่ 1 9.7 (เพื่อทำให้ตัวเลขง่ายขึ้น ที่ระดับ 4 จะแสดงเฉพาะคีย์ของบันทึกแบบลอจิคัลเท่านั้น และไม่มีการแสดงค่าของฟิลด์อื่น ๆ ของบันทึกเหล่านี้)


ข้าว. 9.7.

บล็อกระบุค่าคีย์ของบล็อกที่เกี่ยวข้อง ค่าของ k จะถือว่าเป็น 2

ด้วยการสร้าง B-tree บันทึกต้นฉบับทั้งหมดจะอยู่ห่างจากตัวยกเท่ากัน (ต้นไม้มีความสมดุล)

ลองดูที่การดำเนินการขั้นพื้นฐาน

ค้นหาและอ่านบันทึกจาก มูลค่าที่กำหนดสำคัญ

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

เราถือว่าบล็อกทั้งหมดอยู่ใน VP จากนั้นจำนวนการโทรไปยัง VI เมื่อค้นหาข้อมูลจะเท่ากับจำนวนระดับต้นไม้ จำนวนระดับทรีเท่ากับค่าต่ำสุด l ที่เป็นไปตามเงื่อนไข k l >= N (N คือจำนวนรายการตรรกะ)

การแก้ไข (การปรับปรุง) ของบันทึก

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

กำลังลบรายการ

หลังจากการค้นหา บันทึกที่พบจะถูกลบ (บันทึก "ว่าง" ถูกป้อนในบล็อกที่เกี่ยวข้องแทนที่บันทึกนี้)

การเพิ่มรายการ

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

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

เป็นไปได้ว่าคุณจะต้องแบ่งบล็อกเอง ระดับสูงและก่อตัวเป็นต้นไม้อีกชั้นหนึ่ง

ลองพิจารณาตัวอย่างที่แสดงในรูปที่. 9.7 เพิ่มรายการด้วยคีย์ 10

1. การเปรียบเทียบในระดับแรก

การเคลื่อนไหวบนสาขาด้านซ้าย

2. การเปรียบเทียบในระดับที่สอง

การเคลื่อนไหวบนสาขาด้านซ้าย

3. การเปรียบเทียบในระดับที่สาม

การเคลื่อนไหวไปตามกิ่งที่ถูกต้อง

ค้นหาบล็อกแล้ว

4. บล็อกเต็ม

แบ่งออกเป็น 2 ช่วงตึก

การเปรียบเทียบ 8<10<12.

บันทึกที่มีคีย์ 10 จะถูกป้อนลงในบล็อก 1

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

5. ต้องเพิ่มบันทึกที่มีคีย์ระดับ 3 12 ลงในบล็อก บล็อกเต็มจะแบ่งออกเป็นสองบล็อก

การเปรียบเทียบ 8<12.

รายการจะถูกเพิ่มในบล็อกที่สอง

6. บล็อกที่มีคีย์ใหม่ 8 ปรากฏขึ้นที่ระดับ 3 จำเป็นต้องเพิ่มบันทึกใหม่ด้วยคีย์ 8 และตัวชี้ไปยังบล็อกที่เกี่ยวข้องของระดับ 3 ที่ระดับ 2

7. ควรเพิ่มบันทึกที่มีคีย์ระดับ 2 8 ลงในบล็อก บล็อกเต็มจะแบ่งออกเป็นสองบล็อก

บันทึกถูกเพิ่มลงในบล็อก 1

8. บล็อกที่มีคีย์ใหม่ 15 ปรากฏขึ้นที่ระดับ 2 จำเป็นต้องเพิ่มบันทึกใหม่ด้วยคีย์ 15 และตัวชี้ไปยังบล็อกที่เกี่ยวข้องของระดับ 2 ที่ระดับ 1

ค่าเริ่มต้น ข้อจำกัด และกฎเกณฑ์ - เหล่านี้เป็นแอตทริบิวต์ทางเลือกที่สามารถกำหนดข้ามคอลัมน์และตารางฐานข้อมูลได้ ยู ความเงียบ(ค่าเริ่มต้น) - นี่คือค่าที่ป้อนในคอลัมน์เฉพาะ ข้อ จำกัดข้อจำกัดถูกใช้เป็นวิธีระบุค่าที่ถูกต้องสำหรับคอลัมน์ (เพื่อปฏิเสธค่าที่ไม่ถูกต้อง) และเป็นวิธีการตรวจสอบความสมบูรณ์ของข้อมูลภายในตารางฐานข้อมูลและระหว่างตารางที่เกี่ยวข้อง ข้อจำกัดในคอลัมน์เดียวเรียกว่าข้อจำกัดค่า (คอลัมน์) โดยจำกัดค่าของคอลัมน์นั้นเท่านั้น ข้อจำกัดที่ส่งผลต่อหลายคอลัมน์เรียกว่าข้อจำกัดในการอ้างอิง ในกรณีนี้ การรวมกันของค่าสำหรับคอลัมน์ที่ระบุในข้อจำกัดจะต้องเป็นไปตามข้อกำหนดของข้อจำกัดนั้น ข้อจำกัดมีห้าประเภท: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY และ CHECK

ค่าว่าง(ค่า null) คือค่าที่ไม่รู้จักซึ่งใช้สัญลักษณ์ NULL . ค่า Null ในคอลัมน์มักจะหมายความว่าไม่มีข้อมูลสำหรับแถวนั้นในคอลัมน์นั้น เนื่องจากไม่ทราบค่า ไม่มีความหมาย ไม่ได้ตั้งค่า หรือจะถูกตั้งค่าในอนาคต ค่า Null ไม่ใช่ค่าว่างหรือตัวเลข 0 ไม่ทราบค่าจริงดังนั้นจึงไม่มีค่า Null สองค่าเท่ากัน

คุณสมบัติประจำตัว. เมื่อคุณสร้างตาราง คุณสามารถกำหนดคอลัมน์ใดคอลัมน์หนึ่งให้เป็นคอลัมน์ข้อมูลประจำตัวได้โดยการเพิ่มคุณสมบัติ IDENTITY ให้กับคำนิยามคอลัมน์ หากคอลัมน์ถูกสร้างขึ้นด้วยคุณสมบัติ IDENTITY จากนั้น SQL Server จะสร้างค่าแถวสำหรับคอลัมน์นั้นโดยอัตโนมัติ โดยคำนวณจากค่าเริ่มต้นและมูลค่าที่เพิ่มขึ้น ค่าเริ่มต้นคือค่าระบุสำหรับแถวแรกที่แทรกลงในตาราง ส่วนเพิ่มคือจำนวนที่ SQL Server เพิ่มค่าการระบุสำหรับแถวที่ป้อนตามลำดับ แต่ละครั้งที่มีการป้อนแถว SQL Server จะกำหนดค่าเอกลักษณ์ปัจจุบันให้กับรายการข้อมูลในคอลัมน์เอกลักษณ์ที่ป้อนในแถวใหม่ แถวถัดไปที่ป้อนจะได้รับค่าการระบุที่มากกว่าค่าการระบุสูงสุดในปัจจุบันโดยเพิ่มขึ้น โดยทั่วไปคอลัมน์ตัวระบุจะใช้ในข้อจำกัดคีย์หลักในตารางเพื่อให้สามารถระบุแถวได้โดยไม่ซ้ำกัน ตัวอย่างเช่น หากคุณระบุ IDENTITY(1, 10) ค่าของคอลัมน์การระบุสำหรับแถวแรกที่ป้อนจะเป็น 1 สำหรับแถวที่สองจะเป็น 10 สำหรับแถวที่สามจะเป็น 20 เป็นต้น หากไม่ได้ระบุค่าเริ่มต้นหรือการเพิ่มขึ้นจะมีค่าเริ่มต้นเป็น 1 และ 1 คอลัมน์ข้อมูลประจำตัวไม่สามารถมีค่าเริ่มต้นและไม่ได้รับอนุญาตให้มีค่าว่าง แต่ละตารางสามารถมีคอลัมน์ระบุได้เพียงคอลัมน์เดียวเท่านั้น


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

ตั้งค่า IDENTITY INSERT table.name บน

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

ตั้งค่า IDENTITYINSERT table_name ปิด

หลังจากนี้ SQL Server จะใช้ค่าที่ใหญ่ที่สุดจากคอลัมน์นี้เป็นค่าเริ่มต้นที่ใช้เมื่อเพิ่มแถวถัดไป

การสร้างค่าเริ่มต้นสำหรับคอลัมน์ที่ใช้คำสั่ง CREATE TABLE เป็นวิธีที่แนะนำและเป็นมาตรฐาน คำสั่งต่อไปนี้สร้างตารางในฐานข้อมูล MyDB ที่มีค่าเริ่มต้นสำหรับทั้ง columnA (ประเภท char) และ columnB (ประเภท int):

สร้างตาราง MyTable

(คอลัมน์ถ่าน (15) NULL ค่าเริ่มต้น "ชิ้น"

columnB int NULL ค่าเริ่มต้น 0)

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

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

สร้างตารางลูกค้า

ถ่านขนาดเล็ก (1) NULL,

นามสกุลถ่าน (20) ไม่เป็นโมฆะ

Cust_phone ถ่าน (10) NULL)

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

สร้างตารางลูกค้า

(first_name char(20) ไม่เป็นโมฆะ

ถ่านขนาดเล็ก (1) NULL,

นามสกุลถ่าน (20) ไม่เป็นโมฆะ

SSN ถ่าน (11) ข้อ จำกัด PK_SSN คีย์หลัก

cust_phone ถ่าน (10) NULL)

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

สร้างตารางลูกค้า

(first_name char(20) ไม่เป็นโมฆะ

ถ่านขนาดเล็ก (1) NULL,

นามสกุลถ่าน (20) ไม่เป็นโมฆะ

cust_phone ถ่าน (10) โมฆะ,

ข้อจำกัด PK_SSN คีย์หลัก (SSN))

ข้อจำกัดที่ไม่ซ้ำใครตรวจสอบให้แน่ใจว่าไม่อนุญาตให้มีค่าซ้ำกันในคอลัมน์หรือชุดคอลัมน์ กล่าวอีกนัยหนึ่งรับประกันความเป็นเอกลักษณ์ของค่าในคอลัมน์นี้หรือชุดคอลัมน์นี้ เพื่อรองรับเอกลักษณ์นี้ SQL Server จะสร้างดัชนีเฉพาะบนคอลัมน์หรือคอลัมน์ที่ระบุในข้อจำกัด UNIQUE ตามค่าเริ่มต้น ข้อจำกัด UNIQUE สามารถใช้กับคอลัมน์ใดๆ ที่ไม่ได้เป็นส่วนหนึ่งของข้อจำกัด PRIMARY KEY ข้อจำกัด UNIQUE สามารถใช้กับคอลัมน์ที่ยอมให้มีค่า Null ได้ ในขณะที่ข้อจำกัด PRIMARY KEY ไม่สามารถใช้กับคอลัมน์ดังกล่าวได้ คอลัมน์ที่มีข้อจำกัด UNIQUE สามารถอ้างอิงได้โดยข้อจำกัด FOREIGN KEY คุณสามารถกำหนดข้อจำกัด UNIQUE ได้หลายรายการในตารางเดียว ตราบใดที่จำนวนดัชนีทั้งหมดบนตารางนั้นไม่เกิน 250 ดัชนี

เพื่อสร้างข้อจำกัด UNIQUE บนโต๊ะด้วย โดยใช้ T-SQLให้ใช้คำสั่ง CREATE TABLE ตัวอย่างเช่น คำสั่งต่อไปนี้จะสร้างตารางลูกค้าที่มีข้อจำกัด UNIQUE ในคอลัมน์ SSN เป็นดัชนี:

สร้างตารางลูกค้า

(first_name char(20) ไม่เป็นโมฆะ

ถ่านขนาดเล็ก (1) NULL,

นามสกุลถ่าน (20) ไม่เป็นโมฆะ

SSN ถ่าน (11) ไม่เป็นคลัสเตอร์ที่ไม่ซ้ำใคร

cust_phone ถ่าน (10) NULL)

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

สร้างรายการตาราง

(ชื่อรายการถ่าน (15) ไม่เป็นโมฆะ

itemid smallint ไม่ใช่ตัวตนที่เป็นโมฆะ (1,1)

ราคา SmallMoney NULL,

item_desc varchar(30) ไม่เป็นค่าเริ่มต้น "ไม่มี"

CONSTRAINT PK_ itemid คีย์หลัก (รายการกลาง)

ข้อจำกัด CK_ตรวจสอบราคา (ราคา >=0.01 และราคา<= 500.00))

การสร้างและแก้ไขข้อจำกัดโดยใช้ Management Studio

หากต้องการสร้างตาราง ให้ขยายโฟลเดอร์เซิร์ฟเวอร์และโฟลเดอร์ฐานข้อมูลในบานหน้าต่างด้านซ้ายของ Management Studio คลิกขวาที่โฟลเดอร์ Tables จากนั้นเลือก New Table จากเมนูบริบท หากต้องการแสดงหน้าต่างออกแบบตารางสำหรับตารางที่มีอยู่ ขั้นแรกให้คลิกที่โฟลเดอร์ตาราง คลิกขวาที่ชื่อตารางในบานหน้าต่างด้านขวา จากนั้นเลือกออกแบบตารางจากเมนูบริบท

เพื่อระบุว่าคุณสามารถใช้หรือไม่สามารถใช้ได้ ค่าว่าง ในคอลัมน์ใดๆ เพียงทำเครื่องหมายหรือล้างช่องทำเครื่องหมายที่เกี่ยวข้องในคอลัมน์ Allow Nulls ของหน้าต่าง Design Table คุณสามารถตั้งค่าพารามิเตอร์นี้ได้เมื่อสร้างตารางหรือเมื่อแก้ไข

เพื่อสร้างหรือแก้ไข ข้อจำกัดที่ไม่ซ้ำใคร โดยใช้ Management Studio ให้ทำตามขั้นตอนเหล่านี้:

1. ในแถบเครื่องมือหน้าต่าง Design Table คลิกปุ่ม Indexes/Keys

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

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

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

  1. ในหน้าต่างออกแบบตาราง ให้เลือกคอลัมน์โดยคลิกเซลล์ใดเซลล์หนึ่งในแถว (คุณสามารถเลือกหลายคอลัมน์ได้โดยกดปุ่ม Ctrl ค้างไว้แล้วคลิกเซลล์สีเทาทางด้านซ้ายของชื่อคอลัมน์)

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

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

1. คลิกขวาที่หน้าต่าง Design Table และเลือก Properties จากเมนูบริบทเพื่อแสดงหน้าต่าง Properties คลิกแท็บตรวจสอบข้อจำกัดแล้วคลิกปุ่มใหม่สำหรับตาราง

3. สังเกตช่องทำเครื่องหมายสามช่องที่ด้านล่างของหน้าต่างนี้ การเลือกช่องทำเครื่องหมายตรวจสอบข้อมูลที่มีอยู่ในการสร้างหมายความว่าข้อมูลตารางที่มีอยู่จะถูกตรวจสอบกับข้อจำกัดในการตรวจสอบ และหากไม่ตรงกัน ข้อจำกัดจะไม่ถูกสร้างขึ้น การเลือกช่องทำเครื่องหมายบังคับใช้ข้อจำกัดสำหรับการจำลองหมายความว่าข้อจำกัดนี้จะถูกตรวจสอบเมื่อมีการจำลองข้อมูล การเลือกช่องทำเครื่องหมายบังคับใช้ข้อจำกัดสำหรับ INSERTS และ UPDATEs หมายความว่าข้อจำกัด CHECK จะถูกเปิดใช้งาน หากคุณไม่ทำเครื่องหมายในช่องนี้ ข้อจำกัดนี้จะถูกสร้างขึ้น แต่จะไม่ถูกเปิดใช้งาน เช่น จะไม่มีผลใดๆ

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

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

งานห้องปฏิบัติการได้รับการออกแบบมาสำหรับการฝึกอบรมในชั้นเรียน 3 ชั่วโมง และประกอบด้วยการศึกษาเนื้อหาทางทฤษฎีและการได้รับทักษะการปฏิบัติในการกำหนดตารางฐานข้อมูล การสร้างกฎ ข้อจำกัด ค่าเริ่มต้น ประเภทข้อมูลที่กำหนดเอง ดัชนี การผ่านงานห้องปฏิบัติการประกอบด้วยการตอบคำถามทดสอบและการสาธิตงานแต่ละงานบนพีซี

  1. ชื่อและวัตถุประสงค์ของงาน
  2. งานส่วนบุคคล
  3. สคริปต์สำหรับสร้างชนิดข้อมูลที่กำหนดเองและตารางฐานข้อมูลตามแต่ละงาน

คำถามควบคุม

  1. รายการประเภทข้อมูลที่รองรับ?
  2. ชนิดข้อมูลที่กำหนดเอง วัตถุประสงค์และวิธีการสร้าง?
  3. วิธีกำหนดตาราง?
  4. วัตถุประสงค์ของการผิดนัดชำระหนี้ กฎเกณฑ์ และข้อจำกัด?
  5. รายการค่าเริ่มต้น ข้อจำกัด กฎที่รองรับ
  6. วิธีการกำหนดค่าเริ่มต้น ข้อจำกัด กฎเกณฑ์
  7. ค่า Null คืออะไร?
  8. คุณสมบัติคอลัมน์ IDENTITY?

หน้า(pzegt(เวลาพ่อ(K, h))

แทรกค่า h ลงในวัตถุ n ในตำแหน่งที่ล้อมรอบด้วยคีย์ 1c

หากมีค่าเพิ่มเติมที่สอดคล้องกับคีย์ 1c อยู่แล้ว ค่านั้นจะไม่เปลี่ยนแปลง ส่งคืนอ็อบเจ็กต์ประเภท pacifier::stagman, boo1> โดยองค์ประกอบแรกจะระบุองค์ประกอบด้วยคีย์ที่กำหนด และองค์ประกอบที่สองจะระบุว่ามีการแทรกองค์ประกอบใหม่หรือไม่ โปรดทราบว่าในครั้งแรก เพลงวอลทซ์ pa1 r จะสร้างวัตถุประเภท pa(r sk, h" ซึ่งถูกแปลงโดยฟังก์ชัน zpzegt ให้เป็นวัตถุประเภท r

p.uzpb(1 วินาที)

ส่งคืน pterator ที่อ้างอิงองค์ประกอบ (ถ้ามี) ที่ระบุด้วยคีย์ 1c หากไม่มีองค์ประกอบดังกล่าว ให้ส่งคืนค่า p.epbO สร้างอ็อบเจ็กต์ tin คูณ r ซึ่งจะวัดคีย์และค่าที่ yupoch นี้นำมา ในตำแหน่งที่กำหนดโดยผู้ดำเนินการเหล่านั้น ดังนั้น องค์ประกอบ te->G(gt) จึงเป็นประเภท sompt k และคีย์ prglstvyayetsya และองค์ประกอบ te->yesopb เป็นประเภท y และ prglstvoet เป็นค่าที่สอดคล้องกับคีย์นี้

บี.ซี. อัลกอริทึม

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

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

รวมข้อความเกี่ยวกับอัลกอริทึมทั่วไป

asppp1ate(ข, อี, t)

asppp1ate(ข, อี, t, d)

กำหนดไว้ในชื่อเรื่อง สร้างวัตถุชั่วคราว o1y ประเภทเดียวกันและมีค่าเดียวกันกับวัตถุ t สำหรับ ka:kaoto vhoanopz iterator te ในช่วง (b, e) จะคำนวณ ada" = abu + *tm หรือ abu" = G(ab) ", *3) ขึ้นอยู่กับรูปแบบของฟังก์ชันเชื่อมโยงที่ถูกเรียก ผลลัพธ์ที่ได้คือสำเนาของอ็อบเจ็กต์ abou โปรดทราบว่าเนื่องจากตัวดำเนินการ "+" สามารถโอเวอร์โหลดได้ แม้แต่รูปแบบแรกของฟังก์ชันเชื่อมโยงก็สามารถทำงานได้ บนประเภทอื่นที่ไม่ใช่ประเภทเลขคณิตในตัว ตัวอย่างเช่น เราสามารถใช้อัลกอริธึม asppp1ate two เพื่อเชื่อมสตริงทั้งหมดในเครื่องคัดลอก

บี.ซี. อัลกอริทึม

b(na~y zeugsp(b, e, c)

ส่งกลับค่าประเภท boo1 ซึ่งระบุว่าค่า c อยู่ในฟิลด์ (เรียงลำดับ) ที่ล้อมรอบด้วยตัววนซ้ำทิศทางเดียว b และ e หรือไม่

สำเนา(ข, อี, ข)

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

erpv1(บี, อี, บี2)

erpv1(บี, อี, บี2, พี)

ค่าประเภทbаo1จะถูกยกขึ้น โดยระบุว่าองค์ประกอบของลำดับที่ระบุโดยอินพุต itertars b และ e เท่ากับองค์ประกอบของลำดับที่มีขนาดเท่ากันหรือไม่ ซึ่งจุดเริ่มต้นจะถูกระบุโดยอินพุต iterar b2 ในการตรวจสอบ ให้ใช้ภาคแสดง p หรือตัวดำเนินการ "=" หากไม่ได้ระบุภาคแสดง p

H 11(ข, อี, ค)

ตั้งค่าองค์ประกอบของ paslepoeticity ที่ระบุโดย dog iterators b และ e เท่ากับค่าของ c ส่งกลับค่าของ r(nb(b, e, c)

r(n0(r(ข, อี, พี)

ส่งคืนตัววนซ้ำที่ระบุการเกิดขึ้นครั้งแรกของค่า c หรือตัววนซ้ำที่ระบุองค์ประกอบที่ส่วนหน้า p (หากได้รับ) เป็นจริง ในลำดับที่ระบุโดยตัววนซ้ำ b และ e ส่งกลับค่า e หากองค์ประกอบนั้น ไม่ได้อยู่

1ex(codgvrsh s1 การประสาน(b, e, b2, e2)

1ex(codgvrp(cv1 การควบคุม(b, e, b2, e2, p)

ส่งกลับค่าประเภท LOO1 ซึ่งบ่งชี้ว่าลำดับขององค์ประกอบในช่วง [b, e) น้อยกว่าลำดับขององค์ประกอบในช่วง [b2, e2) หรือไม่ หากต้องการเปรียบเทียบองค์ประกอบ ให้ใช้พรีเคต p หรือตัวดำเนินการ "

พีวีซี(s1, s2)

ส่งกลับค่าที่มากกว่า (สองฟังก์ชัน pvx) หรือน้อยกว่า (สองฟังก์ชัน bpp) ของค่าที่ระบุโดยอาร์กิวเมนต์ c1 และ c2 ที่มีค่ามากที่สุด (b, e) mn e1eps(b, e) ส่งคืนตัววนซ้ำที่ชี้ไปที่ ใหญ่ที่สุด (เล็กที่สุด) ) องค์ประกอบในการมอบหมายที่กำหนดโดย UniDirectional Igeragoras b ไม่ใช่

ภาคผนวก ข ห้องสมุดมาตรฐาน(รีวิวสั้นๆ)