ทำไม SQL จึงถูกเรียกว่าภาษาที่อิงตามความสัมพันธ์ / ใช้งานได้?


14

เรากำลังเรียนรู้ว่าภาษาส่วนใหญ่จัดอยู่ในประเภทใดประเภทหนึ่งทั้งสอง "ตามความสัมพันธ์" หรือ "ระดับสูง" ฉันไม่เคยใช้ SQL มาก่อน แต่จากการอ่านไวยากรณ์ดูเหมือนว่ามีความจำเป็น / มีความจำเป็นในระดับสูงกว่าการใช้งาน / ความสัมพันธ์ (Lisp, Haskell)

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

ขอบคุณ :)

คำตอบ:


14

เรากำลังเรียนรู้ว่าภาษาส่วนใหญ่จัดอยู่ในประเภทใดประเภทหนึ่งทั้งสอง "ตามความสัมพันธ์" หรือ "ระดับสูง"

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

ในความเป็นจริงมีแกนอีกมากมายที่สามารถจำแนกภาษาโปรแกรมและข้อมูลได้ น่าสนใจโดยเฉพาะอย่างยิ่งเป็นที่เปิดเผยความจำเป็นกับ ภาษาที่เปิดเผยอธิบายสิ่งที่บางสิ่งบางอย่างคือ ; ภาษาที่จำเป็นอธิบายถึงวิธีการทำบางสิ่ง ส่วน DDL ของ SQL ส่วนใหญ่จะเป็นที่เปิดเผยแม้จะมีคำหลักความจำเป็นที่ดู (" CREATE TABLE", ' DROP DATABASE' ฯลฯ ) และแม้กระทั่งส่วนการจัดการข้อมูล ( SELECT, UPDATE, INSERT, DELETE) ยังคงเปิดเผยสวย คุณสมบัติที่น่าสนใจมากของ SQL คือมันไม่ได้ทำให้เสร็จสมบูรณ์: คุณไม่สามารถเขียนลูปที่ไม่มีขอบเขตใน ANSI SQL มาตรฐานธรรมดา

ศูนย์การเขียนโปรแกรมเชิงฟังก์ชั่นมีแนวคิดหลักสองสามข้อ:

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

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


ANSI SQL เสร็จสมบูรณ์แล้ว คุณสามารถฝังCyclic Tag Systemโดยใช้ CTE (แนะนำใน SQL: 1999) และ Windowing (SQL: 2003)
Jörg W Mittag

@ JörgWMittag: อาจทำสิ่งที่คล้ายกับทริกเกอร์ ...
jmoreno

"ความสัมพันธ์ที่อิงตามความหมายของความหมายของภาษานั้นตั้งอยู่บนพื้นฐานของแนวคิดของความสัมพันธ์นั่นคือการเชื่อมโยงหลายต่อหลายกลุ่มระหว่างสองชุด (ความสัมพันธ์เป็นพื้นฐานทางคณิตศาสตร์ที่อยู่เบื้องหลังตาราง SQL)" - ความสัมพันธ์ใน RDBMS ไม่ใช่ชุดข้อมูล "beteen" เป็นชุดของ tuples ตารางมุมมองหรือผลลัพธ์ของแบบสอบถามคือ "ความสัมพันธ์" ทั้งหมด
David Aldridge

12

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

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

สิ่งที่ทั้งถูกห่อรอบแบบเชิงสัมพันธ์


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

5

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


1
แต่แบบสอบถาม (เลือกข้อความสั่ง) คือฟังก์ชัน (คณิตศาสตร์บริสุทธิ์) และวัตถุชั้นหนึ่งในกล่อง ทำให้ภาษาทำงานได้
ผู้หญิง

3

เป็นไปได้ไหมว่าบันทึกย่อของคุณมีสัญญาณรบกวน

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

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


แบบสอบถามเป็นฟังก์ชั่นที่บริสุทธิ์ในชุด / ความสัมพันธ์และเป็นวัตถุชั้นหนึ่งในภาษา Ipso พฤตินัยทำงานได้
ผู้หญิง

1

SQL เป็นภาษาเชิงสัมพันธ์ซึ่งตั้งค่าการทำงานของขั้นตอนไว้

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


-1

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

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


-1

ฉันไม่รู้ความสามารถทั้งหมดของสิ่งที่จำเป็นสำหรับภาษาที่จะมีคุณสมบัติเป็นใช้งานได้ แต่ SQL Server แนะนำวิธีที่น่าสนใจในการทำงานกับฟังก์ชั่นต่างๆ ส่วนคำสั่งพิเศษทำให้ฟังก์ชั่นสามารถโต้ตอบกันในแบบสอบถาม มันเรียกว่าใช้ เมื่อฉันอธิบายสิ่งนั้นกับโปรแกรมเมอร์ APL คนก่อนเขาบอกฉันว่าประโยคที่คล้ายกันนี้มีอยู่ใน APL สำหรับเป้าหมายที่คล้ายกัน Apply clause อนุญาตให้ส่งชุดของแอ็ตทริบิวต์จากแถวของตารางหรือแถวของฟังก์ชันตารางเป็นอินพุตไปยังฟังก์ชันอื่น ที่ถูกกล่าวว่าฉันกำหนดข้อ จำกัด เกี่ยวกับประเภทของตารางฟังก์ชั่นในการเขียนเพื่อพิจารณาการทำงาน จะต้องประกาศว่าเป็นแบบอินไลน์ซึ่งหมายถึงการแสดงเป็นคำสั่งเลือกเดียว สิ่งนี้เรียกว่าไม่มีตัวแปร สามารถเขียนเคียวรีที่มีลอจิกจำนวนมากให้คุณใช้นิพจน์ตารางทั่วไปซึ่งอนุญาตให้เปลี่ยนนิพจน์ลงในคอลัมน์ซึ่งเป็นตัวแปรที่ไม่เปลี่ยนแปลงซึ่งสามารถนำกลับมาใช้ใน CTE อื่นได้ ในที่สุด the.f ฟังก์ชั่นจะกลายเป็นแมโครที่มีขนาดใหญ่มากซึ่งทำให้เครื่องมือเพิ่มประสิทธิภาพฟรีเพื่อเพิ่มประสิทธิภาพตามที่ต้องการสิ่งเดียวที่ผู้คนขาดคือเทคนิคง่ายๆในการเขียนตรรกะตามเงื่อนไขและประกาศข้อมูลสนับสนุนตรรกะในแบบสอบถาม สุดท้ายบางฟังก์ชั่นที่ใช้ส่วนคำสั่ง over over นั้นจำเป็นต้องใช้เป็นวิธีที่ ro ดำเนินการกับผลลัพธ์เป็นค่าที่ใช้งานได้ในแถวจากแถวอื่น ๆ แต่มันจะค่อนข้างซับซ้อนในระยะยาวที่นี่ สิ่งเดียวที่ผู้คนขาดคือเทคนิคง่ายๆในการเขียนตรรกะตามเงื่อนไขและประกาศข้อมูลสนับสนุนทางตรรกะในแบบสอบถาม สุดท้ายบางฟังก์ชั่นที่ใช้ส่วนคำสั่ง over over นั้นจำเป็นต้องใช้เป็นวิธีที่ ro ดำเนินการกับผลลัพธ์เป็นค่าที่ใช้งานได้ในแถวจากแถวอื่น ๆ แต่มันจะค่อนข้างซับซ้อนในระยะยาว สิ่งเดียวที่ผู้คนขาดคือเทคนิคง่ายๆในการเขียนตรรกะตามเงื่อนไขและประกาศข้อมูลสนับสนุนทางตรรกะในแบบสอบถาม สุดท้ายบางฟังก์ชั่นที่ใช้ส่วนคำสั่ง over over นั้นจำเป็นต้องใช้เป็นวิธีที่ ro ดำเนินการกับผลลัพธ์เป็นค่าที่ใช้งานได้ในแถวจากแถวอื่น ๆ แต่มันจะค่อนข้างซับซ้อนในระยะยาว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.