มีคำถามที่ค่อนข้างอันตรายเกี่ยวกับการเพิ่มวันที่และเวลาใน SQL Serverที่ตั้งปิดการอภิปรายอนุกรมวิธานค่อนข้างน่าสนใจ
ดังนั้นเราจะแยกความแตกต่างระหว่างคำที่เกี่ยวข้องเหล่านี้และวิธีการใช้งานอย่างถูกต้องได้อย่างไร
แถว
บันทึก
มีคำถามที่ค่อนข้างอันตรายเกี่ยวกับการเพิ่มวันที่และเวลาใน SQL Serverที่ตั้งปิดการอภิปรายอนุกรมวิธานค่อนข้างน่าสนใจ
ดังนั้นเราจะแยกความแตกต่างระหว่างคำที่เกี่ยวข้องเหล่านี้และวิธีการใช้งานอย่างถูกต้องได้อย่างไร
แถว
บันทึก
คำตอบ:
หากต้องการอ้างอิง Joe Celko (ไม่เพียง แต่คุณจะพบการอ้างอิงนี้ทั่วทั้งเว็บและในรายการ Wikipedia ของเขาแต่คุณยังจะเห็นมันบนเสื้อยืดในการประชุม)
แถวไม่ใช่เรคคอร์ด
ผู้คนจำนวนมากชี้ให้เขาเห็นว่าเป็นคนฉาวโฉ่ที่ชอบทำตัวไร้เดียงสาและใช้วาจาเหยียดหยามในมือใหม่และฉันจะยอมรับว่านั่นเป็นวิธีที่เขาเจอ แต่ฉันยังได้พบเขาด้วยตัวเอง - แม้แต่แบ่งปันอาหารกับเขา - และฉันไม่สามารถบอกคุณได้ว่าบุคลิกในชีวิตจริงของเขาแตกต่างจากหน้าออนไลน์ของเขาอย่างไร ฉันเคยจับเขาเรียกระเบียนแถวและเขาก็อายมาก ( เต็ม backstory ที่นี่ )
ไม่ว่าในกรณีใดพูดในสิ่งที่คุณต้องการเกี่ยวกับตัวละครออนไลน์ของผู้ชาย แต่เขาเขียนมาตรฐานและความจริงที่ว่าผู้มีอำนาจดังกล่าวบอกว่ามีความแตกต่างควรบอกคุณบางอย่าง และมากที่สุดเท่าที่เขา cringes เมื่อมีคนเรียกระเบียนแถวดังนั้นเพื่อนร่วมงานของฉันหลายคน - ที่ยังเป็นผู้เชี่ยวชาญในโลกของ SQL Server และพวกเราในค่ายนั้นเชื่อว่าเขาพูดถูก
ตัวอย่างเช่น Itzik Ben-Gan กูรู SQL Server ที่ชัดเจน นี่เป็นข้อความที่อ้างถึงจากบทเรียนแรกในชุดฝึกอบรม (สอบ 70-461): การสืบค้น Microsoft SQL Server 2012 :
เป็นตัวอย่างของคำที่ไม่ถูกต้องใน T-SQL ผู้คนมักจะใช้คำว่า "field" และ "บันทึก" เพื่ออ้างถึงสิ่งที่ T-SQL เรียกว่า "คอลัมน์" และ "แถว" ตามลำดับ ฟิลด์และระเบียนเป็นฟิสิคัล เขตข้อมูลคือสิ่งที่คุณมีในส่วนติดต่อผู้ใช้ในแอปพลิเคชันไคลเอนต์และระเบียนเป็นสิ่งที่คุณมีในไฟล์และเคอร์เซอร์ ตารางเป็นลอจิกและมีลอจิคัลแถวและคอลัมน์
และรู้ว่า Itzik ถ้าคุณส่งอีเมลถึงเขาหรือบอกเขาในการประชุมเขาจะบอกคุณอย่างมีความสุข หากคุณเรียกระเบียนหนึ่งแถวตามความเห็นของเขาแสดงว่าคุณไม่ได้ใช้คำศัพท์อย่างถูกต้อง
ตอนนี้เป็นอุตสาหกรรมที่เต็มไปด้วยผู้คนทุกประเภทคุณมีแนวโน้มที่จะพบเนื้อหา (เช่นบทความเป้าหมายเทคโนโลยีที่โพสต์ในคำตอบอื่น) ที่ดูเหมือนจะสร้างความแตกต่างที่ลึกซึ้งมากระหว่างคนทั้งสองและคุณจะพบคนมากมายในอุตสาหกรรม พิจารณาพวกเขาเหมือนกัน (ฉันรู้ว่าหลายคนที่ Microsoft และคนอื่น ๆ เช่น Brent Ozar ที่จะเรียกมันว่าบันทึกเสมอ) นั่นไม่ได้ทำให้ถูกต้องนั่นเป็นเพียงวิธีการมองของพวกเขา - พวกเขามองตรรกะและทางกายภาพเหมือนกัน (อย่างน้อยในบริบทนี้) และพวกเขาหลายคนอาจคิดว่าพวกเราที่เหลือเป็นแค่การใช้เวลามากเกินไป ในความหมาย
เนื่องจากไม่มีผู้ขายจะพูดว่า "เจ้าจะเรียกพวกเขาว่า {บันทึก | แถว}" เราจะต้องจัดการกับข้อโต้แย้งนี้ตลอดไปเพราะจะมีคนที่ไม่ได้รับตรรกะกับร่างกายหรือได้รับการสอนที่แตกต่างกันหรือ มาจากพื้นเพการเข้าถึงหรือการเขียนโปรแกรม ฯลฯ เช่นเดียวกับที่บางคนพูดว่าโทมายะและคนอื่น ๆ พูดโทมาห์ถึงจะมีคนหลากหลายตั้งแต่ "พวกเขาเหมือนกัน" ถึง "พวกเขาต่างกันโดยสิ้นเชิง "- และอีกหลายเฉดสีในระหว่าง อีกครั้งนั่นไม่ได้ทำให้พวกเขาถูกต้องเพราะไม่มีใครสามารถเป็นผู้มีอำนาจสูงสุดในเรื่องนี้ แต่ในพื้นที่ของ SQL Server มีส่วนใหญ่แน่นอน
ที่กล่าวว่า IMHO เมื่อคุณกำลังพูดถึงข้อมูลที่อยู่ในตารางคุณเรียกมันว่าแถว เมื่อคุณทำการแทรกคุณกำลังแทรกแถวลงในตาราง เมื่อคุณเรียกใช้การปรับปรุงคุณกำลังปรับปรุงแถวที่อยู่ในตาราง และเมื่อคุณทำการเลือกคุณจะดึงแถวจากตาราง
อย่าลังเลที่จะเรียกมันว่าบันทึกเมื่อใบสมัครของคุณมีการระงับ แต่อย่าโกรธถ้าคุณพูดว่า "ฉันแทรกบันทึก" และมีคนแก้ไขคุณ
Microsoft มีหลายแห่งในองค์กรของพวกเขาหากชื่ออย่างเป็นทางการสำหรับการจัดเก็บข้อมูลแบบตารางต่อรายการตาราง (เพื่อกำหนดคำจำกัดความทางเศรษฐศาสตร์ที่ให้บริการตามวัตถุประสงค์ของฉันเอง) เรียกว่า "ROW" ฉันส่งเป็นหลักฐานROW_NUMBER
, ROWCOUNT
, ROWVERSION
และDataTable.Rows
คุณสมบัติที่DataTable
เป็นตัวแทน C # ของ TSQL "ตาราง" วัตถุ ในกรณีนี้คุณสมบัติ MSDN โดยรวมสนับสนุนให้ใช้row
เพื่ออ้างถึงการรวบรวมข้อมูลที่เป็นหนึ่งรายการในตาราง (หมายเหตุฉันพยายามหลีกเลี่ยงการใช้ "บันทึก" หรือ "แถว" เพื่อกำหนดสิ่งนี้ซึ่งเป็นประเด็นคำถาม)
อย่างไรก็ตาม parlance คือแอปพลิเคชันเกี่ยวข้องกับผู้ใช้ "บันทึก" สิ่งที่ไม่ซ้ำกันเกี่ยวกับระเบียนที่อาจไม่ได้แสดงโดยตรงโดยแถวที่จัดเก็บข้อมูลเดียวคือข้อเท็จจริงที่ว่าระเบียนสามารถมีระเบียนย่อยได้ True, ตารางสามารถเกี่ยวข้องกับหลายต่อหลายตาราง แต่สิ่งเหล่านั้นไม่ได้ถูกจัดเก็บอย่างต่อเนื่อง
ดังนั้นแถวคือสิ่งที่อยู่ในตารางและบันทึกเป็นสิ่งที่นักพัฒนาใช้งานได้จริงในการใช้งาน
ฉันเพิ่งค้นหาผ่านเอกสาร "เทคโนโลยีสารสนเทศ - ภาษาฐานข้อมูล - SQL ตอนที่ 2: รากฐาน (SQL / มูลนิธิ)" ซึ่งกำหนดมาตรฐาน ANSI สำหรับ SQL ตามที่ใช้งานโดย RDBMS ที่สำคัญทั้งหมด
คำrow
นี้ใช้เป็นหลักตลอดทั้งเอกสารหลายร้อยครั้งตามที่คาดไว้
คำrecord
นี้ใช้เพื่ออธิบายระเบียนที่คล้ายกับระเบียนที่ใช้ใน Oracle PL / SQL (อธิบายประเภทข้อมูลระเบียน ADA โดยเฉพาะ) 6 กล่าวถึงในเอกสาร
ฉันคิดว่านี่เป็นการเคลียร์คำถามนี้และตอบข้อโต้แย้งต่าง ๆ ของทั้งสองฝ่าย
ข้อมูลเพิ่มเติม
จากสำเนาของมาตรฐาน SQL ฉบับร่างฉบับล่าสุดซึ่งมีอยู่ที่ wiscorp.com (หน้ามาตรฐานของ SQL มีเวอร์ชันเก่ากว่าและการแก้ไขอื่น ๆ )
ค้นหา7IWD2-02-Foundation-2011-12.pdfโดยมีวันที่2011-12-21เปิดเผยว่าแถวคำปรากฏ 2277 ครั้งในเอกสารในขณะที่บันทึกคำปรากฏเพียง 21 ครั้งไม่ว่าจะเป็นคำกริยา "บันทึก" หรือในภาคผนวกบางส่วนในที่สุดในรายละเอียดของความสอดคล้องชนิดข้อมูลสำหรับชนิดข้อมูล SQL และประเภทภาษาโฮสต์ (Ada, Pascal)
นอกจากนี้เอกสารเดียวกันมีที่หน้า 57 (เน้นที่เหมือง):
4.15.1 ตารางเบื้องต้น
ข้อย่อยนี้ได้รับการแก้ไขโดย Subclause 4.10.1,“ Introduction to tables” ใน ISO / IEC 9075-9
ตารางคือชุดของศูนย์หรือมากกว่าแถวที่แต่ละแถวเป็นลำดับของค่าคอลัมน์อย่างน้อยหนึ่งค่า ประเภทที่เฉพาะเจาะจงมากที่สุดของแถวเป็นชนิดแถว ทุกแถวของตารางที่กำหนดมีประเภทแถวเดียวกันเรียกว่าประเภทแถวของตารางนั้น ค่าของฟิลด์ i-th ของทุกแถวในตารางคือค่าของคอลัมน์ i-th ของแถวนั้นในตาราง แถวคือหน่วยข้อมูลที่เล็กที่สุดที่สามารถแทรกลงในตารางและลบออกจากตาราง
ระดับของตารางและระดับของแต่ละแถวคือจำนวนคอลัมน์ของตารางนั้น จำนวนแถวในตารางคือจำนวนเชิงการนับ ตารางที่มีความสำคัญเชิงหัวใจเป็น 0 (ศูนย์) ถูกกล่าวว่าว่างเปล่า
ตารางเป็นทั้งตารางฐานเป็นตารางมาหรือตารางชั่วคราว
ดังนั้นเท่าที่ DBMSs ที่ใช้ SQL เป็นห่วง:
แถวไม่ใช่เรคคอร์ด , ฟิลด์ไม่ใช่คอลัมน์, ตารางไม่ใช่ไฟล์!
เนื่องจากฐานข้อมูลเชิงสัมพันธ์นั้นไม่ค่อยใช้ในการแยกเพื่อหลีกเลี่ยงความสับสนระหว่างส่วนอื่น ๆ ของระบบฉันมักจะอ้างถึงตารางและแถวและคอลัมน์ ในแอปพลิเคชันไคลเอนต์เรามักจะมีโครงสร้างอื่น ๆ รวมถึงดาต้าเรเดอร์, ดาต้าเซ็ต, ดาตาล็อก, ดาต้าดาต้า, ฯลฯ - ตัวอย่างเช่น "ฟิลด์" มักใช้สำหรับการป้อนข้อมูลบนหน้าจอและ Pascal .
บางครั้งในการออกแบบระบบความคิดของ "บันทึก" อาจถูกนำมาใช้เพื่อหมายถึงบางสิ่งที่กว้างกว่าแถวเดียว มันอาจจะเป็นแถวและมันเป็นประวัติศาสตร์ เช่นเดียวกับเมื่อเราพูดถึงแถวที่ถูกลบเราอาจหมายถึงแถวที่ถูกทำเครื่องหมายว่าถูกลบด้วยคอลัมน์หรือ "ย้าย" ไปยังตารางที่ถูกลบ (และไม่ใช่แค่การขาดแถวซึ่งโดยไม่มีอยู่แล้วค่อนข้างยากที่จะ ปักหมุดลง) มีการใช้คำศัพท์ที่หลากหลายมากขึ้น
โดยทั่วไปแล้วตาราง, แถวและคอลัมน์เป็นคำศัพท์ที่ได้รับการยอมรับสำหรับการอ้างอิงถึงเอนทิตีเหล่านี้ในฐานข้อมูลเชิงสัมพันธ์รวมถึงเอกสารและการทำงานตาม Codd และ Date และผู้เชี่ยวชาญด้านฐานข้อมูลส่วนใหญ่ต้องการคำศัพท์นี้เนื่องจากมีความชัดเจนมากกว่า
โดยทั่วไปจะไม่มีความกำกวมเมื่อพูดถึงแถวและคอลัมน์ - คนอื่น ๆ เข้าใจว่าคุณกำลังพูดถึงการออกแบบทางกายภาพของฐานข้อมูลและไม่ได้มีสิ่งประดิษฐ์ประเภทอื่น ๆ จากการออกแบบเชิงตรรกะก่อนการออกแบบทางกายภาพหรือเอนทิตีระบบอื่น ๆ จอภาพ
แม้ว่าคำถามของคุณจะได้รับคำตอบที่ดีอยู่แล้ว ฉันต้องการเพิ่มคะแนนของฉันด้วย คุณอาจจะพบว่ามันมีประโยชน์สำหรับบางคน คำตอบของฉันไม่เฉพาะกับ SQL Server
คำเหล่านี้ใช้แทนกันได้
1 2 3 4
--------------------------------------------------------------------
Row = Record = Tuple = Entity
Column = Field = Attribute = Attribute
table = File = Relation = Entity Types(or Entity Set)
DataBase books start with these terminology
เพราะสิ่งเหล่านี้มักถูกใช้โดยคนทั่วไปในชีวิตจริงรวมถึงในระบบไฟล์ บันทึกเป็นหน่วยพื้นฐานในระบบจัดเก็บข้อมูลที่มีความหมายโดยนัย ใน DBMS คำที่record
ใช้ในบทจะอธิบายถึงวิธีการที่ตารางฐานข้อมูลจัดเก็บบนบล็อกดิสก์ ใน DBMS record-oriented file-system
เป็นระบบไฟล์ที่จัดเก็บไฟล์เป็นชุดของบันทึก
ภาษาพัฒนาอย่างต่อเนื่อง ไม่กี่ทศวรรษที่ผ่านมาคนที่มีความรู้ใช้ "ดัชนี" แทนที่จะเป็น "ดัชนี" ที่ง่ายกว่า เมื่อเราเปลี่ยนเป็น "ดัชนี" เราจะขจัดความยุ่งยากที่ไม่จำเป็นและทำให้ภาษามีประโยชน์มากขึ้น ความจำเป็นในการจดจำพหูพจน์สำหรับ "ดัชนี" นั้นเป็นค่าใช้จ่ายที่บริสุทธิ์ - มันไม่ได้ช่วยให้เราสื่อสารได้ อย่าทำผิดเลยเคยมีไวยากรณ์นาซีที่ชอบแก้ไขผู้ที่เปลี่ยนเป็น "ดัชนี" แน่นอนว่านาซีไวยากรณ์หายไป นี่คือวิธีที่มีดโกนของ Occam กำจัดรายละเอียดที่ไร้ประโยชน์หากสิ่งทั้งหมดยังคงมีความเกี่ยวข้องมานานพอ
ดังนั้นขอให้เราเข้าใจง่าย - การทราบถึงความแตกต่างระหว่างแถวและเร็กคอร์ดจะไม่เพิ่มความสามารถของเราในการพัฒนาและดูแลฐานข้อมูล ผู้เชี่ยวชาญที่ยอดเยี่ยมหลายคนใช้แถวและบันทึกสลับกันได้ แต่พัฒนาระบบที่ยอดเยี่ยม ดังนั้นมีดโกนของ Occam ควรกำจัดความแตกต่างในที่สุดและคนรุ่นต่อไปจะต้องเรียนรู้ความจริงที่ไร้ประโยชน์ ถ้าแน่นอน SQL ยังคงเกี่ยวข้องในเวลานั้น
ในการอ้างอิงหนังสือของ CJ Date "คำแนะนำเกี่ยวกับระบบฐานข้อมูล" " แถวของตารางดังกล่าวสามารถถือเป็นบันทึกของไฟล์ ... "
ดังนั้นสำหรับฐานข้อมูลมันคือแถว
คำตอบสั้น ๆ :
หมายเหตุ: ตารางจัดเก็บเรคคอร์ดเป็นเส้นตรงและคิวรีส่งคืนผลลัพธ์เป็นเส้นตรง
การสนับสนุน :
คำจำกัดความเพิ่มเติมจากทั่วทั้งเว็บ:
เป็นที่น่าสังเกตว่าคำจำกัดความของ SQL เป็นไปตามข้อกำหนดของภาษาอังกฤษ
หากคุณมีคำจำกัดความที่คุณคิดว่าควรจะอยู่ที่นี่โปรดเพิ่มลงในความคิดเห็น
ฉันสนใจเป็นพิเศษในคำจำกัดความจากมาตรฐาน SQL หรือเอกสารของการดำเนินงาน
คำพูดถูกนำขึ้นมา "แถวไม่ใช่เร็กคอร์ด" นำออกจากบริบทนี้ดูเหมือนจะขัดแย้งยืนยันก่อนหน้าของฉัน (และบรรดาผู้เชี่ยวชาญด้านฐานข้อมูลจำนวนมาก) แต่ถ้าคุณอ่านบทความทั้งหมด ( 1ค้นหาคำพูด) โดย Joe Celko (aka --CELKO--) มันชัดเจนว่า Joe Celko พยายามแก้ไขความเข้าใจผิดของบุคคลที่ Joe Celko เชื่อว่าเกิดขึ้นจากบุคคลนั้น " ... พื้นหลังในการประมวลผลข้อมูลด้วยระบบไฟล์ดั้งเดิม ... " ในระยะสั้น Joe Celko บอกว่าแถว SQL ไม่ทำงานเหมือนกับระเบียนในระบบอื่น Joe Celko ไม่ได้อ้างสิทธิ์ / สิทธิพิเศษในการกำหนดคำศัพท์เขาพยายามที่จะกำจัดความเข้าใจที่ผิดพลาดที่เกิดจากการใช้หลักการหนึ่งรูปแบบการจัดเก็บกับอีกแบบหนึ่งอย่างไม่ถูกต้อง