ทางเลือกอื่นที่ดีสำหรับ SQL (ภาษา) คืออะไร? [ปิด]


96

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

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

ฉันไม่ได้มองหาฐานข้อมูลประเภทอื่น (การเคลื่อนไหวของ NoSQL) เพียงวิธีการต่างๆในการเข้าถึงฐานข้อมูล


22
SQL ห่วย? การอ้างอิงใด ๆ ?
Murali VP

3
คุณไม่ได้บอกว่ามันแย่เมื่อเทียบกับ XML ใช่ไหม
Bratch

6
ไม่ว่า SQL จะห่วยจริงหรือไม่เป็นสิ่งที่ฉันสนใจนี่คือตัวอย่างแม้ว่าen.wikipedia.org/wiki/The_Third_Manifestoฉันเดาว่า "ห่วย" อาจเป็นคำที่ผิด ..
Brendan Long

4
เพื่อชี้แจง: ฉันไม่มีปัญหากับ SQL ฉันชอบเรียนรู้เกี่ยวกับแนวคิดอื่น ๆ เผื่อว่าจะมีอะไรที่ดีกว่า
Brendan Long

6
หากต้องเป็นภาษาแบบสอบถามและต้องเป็นภาษา RDBMS ให้ตรวจสอบ Quel: en.wikipedia.org/wiki/QUEL_query_languagesซึ่งเป็นภาษาที่ Postgres ใช้ก่อนปี 1995 เมื่อเปลี่ยนชื่อเป็นภาษาที่ล้ำ "PostgreSQL" โง่ ๆ
Ken

คำตอบ:


48

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

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

  • SchemeQLและCLSQLซึ่งน่าจะมีความยืดหยุ่นมากที่สุดเนื่องจากมรดก Lisp แต่ก็ดูเหมือน SQL มากกว่าส่วนหน้าอื่น ๆ
  • LINQ (ใน. Net)
  • ScalaQLและScalaQuery (ใน Scala)
  • SqlStatement , ActiveRecordและอื่น ๆ อีกมากมายใน Ruby,
  • HaskellDB
  • ... รายการยังมีภาษาอื่น ๆ อีกมากมาย

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


น่าสนใจ. นั่นทำให้รู้สึกว่า
Brendan Long

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

3
ไชโยเคน! เมื่อสามปีก่อนฉันกำลังดิ้นรนกับหนี้ทางเทคนิคที่กำลังขยายตัวซึ่งเป็นผลมาจากการปฏิบัติขององค์กรโดยทั่วไปในการคัดลอกแบบสอบถาม SQL ซ้ำแล้วซ้ำเล่าโดยมีการเปลี่ยนแปลงเล็กน้อยเนื่องจากไม่มีสิ่งที่เรียกว่าการห่อหุ้มหรือวิธีการท้องถิ่นใน SQL ฉันค้นหา ScalaQuery จากโพสต์ของคุณ (ซึ่งตอนนี้เรียกว่า Slick) และเขียนระบบใหม่ทั้งหมดและทุกๆ 6 คำค้นหาจะกลายเป็น 1 เพียงเพราะคุณสามารถห่อหุ้มและมีวิธีการในท้องถิ่นได้! หากใครกำลังทุกข์ทรมานจากความน่ากลัวของ SQL ลองค้นหา Scala Slick หรือ Quill และเตรียมตัวสำหรับการตรัสรู้!
ChoppyTheLumberjack

การแพร่หลายของวิธีการซ่อน SQL เป็นตัวบ่งชี้ว่ามันแย่แค่ไหน SQL พยายามทำมากเกินไปในคำสั่งเดียว
Zendel

19

ลองดูรายการนี้

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

แน่นอนว่ามีสิ่ง NoSQL มากมาย แต่คุณพูดถึงโดยเฉพาะว่าคุณไม่สนใจสิ่งเหล่านั้น


แน่นอนว่าสิ่งที่ฉันกำลังมองหา
Brendan Long

รายการนั้นมีชุดภาษาที่ซับซ้อนมาก ฉันไม่คิดว่า XQuery เป็นของและฉันไม่รู้เกี่ยวกับ D มากพอที่จะรู้ว่าทำไมถึงเป็น
Ken Bloom

1
@Ken Bloom เห็นได้ชัดว่ามีภาษาแบบสอบถามชื่อ D และภาษาคล้าย C แยกต่างหากชื่อ D คนแรกที่ฉันนึกถึงคือภาษาเหมือน c ..
Brendan Long

ฉันพูดเร็วเกินไปเกี่ยวกับ D. เมื่อฉันเห็นชื่อฉันคิดว่า Digital Mars 'D - ฉันเห็นว่าภาษาข้อมูล D เป็นอย่างอื่นทั้งหมด
Ken Bloom

2
c2.com/cgi/wiki?QueryLanguageComparisonก็คุ้มเช่นกัน
Ken Bloom

13

"ฉันได้ยินบางครั้งเกี่ยวกับการทำงานของ SQL และมันไม่ใช่ภาษาที่ดี"

SQL มีอายุมากกว่าสามสิบปี ข้อมูลเชิงลึกเกี่ยวกับ "คุณลักษณะใดที่ทำให้ภาษา" ดี "และคุณลักษณะใดที่ทำให้ภาษา" ไม่ดี "" ได้รับการพัฒนาอย่างรวดเร็วกว่า SQL

นอกจากนี้ SQL ไม่ใช่ภาษาที่สอดคล้องกับมาตรฐานปัจจุบันของ "สิ่งที่ต้องใช้เพื่อความสัมพันธ์" ดังนั้น SQL จึงไม่ใช่ภาษาเชิงสัมพันธ์ในการบูต

"แต่ฉันไม่เคยได้ยินเกี่ยวกับทางเลือกอื่นมากนัก"

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

"แล้วภาษาดีๆอื่น ๆ ที่ตอบสนองวัตถุประสงค์เดียวกัน (การเข้าถึงฐานข้อมูล) คืออะไรและอะไรทำให้ดีกว่า SQL"

Date & Darwen อธิบายคุณลักษณะที่ภาษาจัดการข้อมูลสมัยใหม่ต้องเป็นไปตาม "Third Manifesto" ซึ่งเป็นเวอร์ชันล่าสุดที่ระบุไว้ในหนังสือ "Databases, types & the Relational Model"

"มีฐานข้อมูลดีๆที่ใช้ภาษาทางเลือกนี้หรือไม่"

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

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

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

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

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


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

2
มันเป็นความยุ่งยากอายุเก่าของผู้คนทั้งหมดที่สัมพันธ์ "ประสิทธิภาพ" ดูเหมือนว่าจะถูกมองว่าเป็นลักษณะของการเป็นรูปแบบ การรับรู้นั้นมีข้อบกพร่องระยะเวลา ประสิทธิภาพเป็นลักษณะของการใช้งานแบบจำลอง การใช้งาน RM ที่มีอยู่ในปัจจุบันมักจะทำให้เกิดปัญหาด้านประสิทธิภาพการทำงานเป็นการรวมกันของปัจจัยหลายประการ: (ก) การนำ RM ไปใช้อย่างเต็มรูปแบบนั้นเป็นเรื่องยากมาก (b) ผู้จำหน่าย DBMS ไม่ได้ผลักดันอย่างหนักพอสำหรับความคืบหน้าในการใช้งานใหม่ และ (c) ผู้ใช้ขาดความเข้าใจที่เพียงพอเกี่ยวกับอัลกอริทึมพื้นฐาน
Erwin Smout

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

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

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

12

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

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

เมื่อเร็ว ๆ นี้ฉันถูกชี้ไปที่. QLซึ่งดูเหมือนจะช่วยแก้ปัญหาการปิดสวิทช์ได้ดี แต่ฉันไม่รู้ว่ามันสามารถแก้ไขปัญหากับโดเมนที่สั่งซื้อได้หรือไม่


4
มีข้อผิดพลาดบางประการที่ป้องกัน "ระบบเชิงสัมพันธ์ 100%" แม้จะมี "การกำหนดวินัยวิธีที่คุณใช้ SQL" ก็ตามเนื่องจาก SQL ไม่เกี่ยวข้องกับความสัมพันธ์อย่างแท้จริง ตัวอย่าง: SELECT Sum (foo) BAR Blah WHERE 1 = 0 SQL คืนค่า null ความสัมพันธ์ 100% ต้องการศูนย์ carfield.com.hk/document/misc/SQL_Pro issues.pdf
McKay

1
นอกจากนี้คุณเขียน "DISTINCT" ทุกครั้งที่เลือกหรือไม่
McKay

ใช่ฉันจะหลีกเลี่ยง NULL โดยสิ้นเชิง (ดังนั้นจึงต้องมีปลอกพิเศษสำหรับผลลัพธ์ที่ว่างเปล่า) และเขียน DISTINCT ทุกที่หรืออย่างน้อยทุกที่ที่ฉันต้องใช้ COUNT
Reinierpost

8

คำตอบโดยตรง: ฉันไม่คิดว่าจะมีคู่แข่งที่จริงจังอยู่ที่นั่น DBase และผู้ลอกเลียนแบบ (Foxpro, Codebase ฯลฯ ) เป็นคู่แข่งกันมาระยะหนึ่งแล้ว แต่ฉันคิดว่าโดยพื้นฐานแล้วพวกเขาแพ้สงครามภาษาสืบค้นฐานข้อมูล มีผลิตภัณฑ์ฐานข้อมูลอื่น ๆ อีกมากมายที่มีภาษาค้นหาของตัวเองเช่น Progress และ Paradox และอื่น ๆ อีกมากมายที่ฉันเคยใช้ชื่อที่ฉันจำไม่ได้และอื่น ๆ อีกมากมายที่ฉันไม่เคยได้ยิน แต่ฉันไม่คิดว่าคู่แข่งรายอื่นจะเข้ามาใกล้จะได้รับส่วนแบ่งตลาดที่ไม่สำคัญ

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

การเดินเตร่ด้านข้าง: ฉันไม่ได้บอกว่า SQL นั้นแย่ แต่ก็มีข้อบกพร่องมากมาย ด้วยประโยชน์จากประสบการณ์และการมองย้อนกลับที่เรามีมาหลายปีในตอนนี้ฉันมั่นใจว่าเราสามารถออกแบบภาษาแบบสอบถามที่ดีขึ้น แต่การสร้างภาษาแบบสอบถามที่ดีขึ้นและการโน้มน้าวใจให้ผู้คนใช้เป็นสองสิ่งที่แตกต่างกันมาก จะดีกว่าไหมที่จะโน้มน้าวผู้คนว่ามันคุ้มค่ากับปัญหาในการเรียน ผู้คนใช้เวลาหลายปีในชีวิตเพื่อเรียนรู้การใช้ SQL อย่างมีประสิทธิภาพ แม้ว่าภาษาใหม่ของคุณจะใช้งานง่ายกว่า แต่ก็มีช่วงการเรียนรู้อย่างแน่นอน และคุณจะย้ายระบบที่มีอยู่ของคุณจาก SQL ไปเป็นภาษาใหม่ได้อย่างไร? ฯลฯ ก็สามารถทำได้เช่นเดียวกับ C ++, C # และ Java ได้ล้มล้าง COBOL และ FORTRAN เป็นส่วนใหญ่ แต่ต้องใช้การผสมผสานระหว่างความเหนือกว่าทางเทคนิคและการตลาดที่ดีเพื่อดึงมันออกมา

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


1
@Jay: การแทนที่ SQL ที่เป็นไปได้อย่างหนึ่งอาจไม่ใช่ภาษาเฉพาะฐานข้อมูลเลยใช้ภาษาการเขียนโปรแกรม OO ตามปกติของคุณเพื่อความคงอยู่ของข้อมูล ดูคำตอบของฉันเกี่ยวกับ Object-databases และ ORM ฉันจะไม่บอกว่า ORM ไม่ได้รับส่วนแบ่งการตลาดในตอนนี้
kriss

Kriss: ฉันคิดว่า ORM ไม่ใช่ "ภาษาสำหรับค้นหา" แต่เป็นสิ่งที่อยู่ด้านบนของภาษาสืบค้น ฉันคิดว่าถ้านั่นคือสิ่งที่คุณใช้ในการสื่อสารกับฐานข้อมูลอาจถือได้ว่าเป็นภาษาของแบบสอบถามและบางทีฉันอาจจะเป็นคนอวดดี ฉันจำได้ว่าเมื่อหลายปีก่อนอ่านว่าภาษา COBOL และ C ไม่ใช่ภาษาคอมพิวเตอร์จริงๆมีเพียงแอสเซมเบลอร์เท่านั้นที่เป็นภาษาคอมพิวเตอร์จริง COBOL และ C เป็นเพียงสิ่งที่แปลเป็นภาษาคอมพิวเตอร์ การโต้เถียงดูเหมือนตอนนี้และตอนนี้จะโง่ ๆ ) ดังนั้น: โอเคฉันจะซื้อมัน
Jay

1
คำตอบนี้อาจล้าสมัย ขณะนี้มีฐานข้อมูลที่ไม่ใช่ SQL เช่น Mongo เป็นต้นซึ่งมีส่วนแบ่งตลาดที่ไม่สำคัญ
เจย์

8

ดู LINQ เป็น SQL ...

ลองใช้เมื่อสองสามเดือนก่อนและไม่เคยมองย้อนกลับไป ....


1
Linq นั้นยอดเยี่ยมมาก แต่ถ้าคุณกำลังพัฒนาบน. NET :)
Justin Ethier

7

ย้อนกลับไปในปี 1980 ObjectStoreให้การเข้าถึงวัตถุแบบโปร่งใส มันเหมือนกับ RDBMS บวก ORM ยกเว้นไม่มีเลเยอร์นามธรรมที่รั่วไหลพิเศษทั้งหมดนั่นคือมันเก็บวัตถุไว้ในฐานข้อมูลโดยตรง

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

(แน่นอนว่ามันไม่ได้มีกล้ามเนื้อทางการตลาดของ Oracle และไม่มี MySQL เป็นศูนย์ดังนั้นทุกคนจึงไม่สนใจและตอนนี้เราพยายามทำซ้ำด้วย RDBMS และ ORM และบางคนพยายามโต้แย้งว่าจริง ๆ แล้วตาราง เหมาะสมสำหรับการจัดเก็บวัตถุและการเขียนไฟล์ XML ขนาดยักษ์เพื่อบอกคอมพิวเตอร์ของคุณว่าจะแมปวัตถุกับตารางอย่างไรเป็นวิธีแก้ปัญหาที่สมเหตุสมผล)


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

4
ความแตกต่าง: เครื่องมือเพิ่มประสิทธิภาพการค้นหาอยู่ในรูปแบบที่ยิ่งใหญ่ของสิ่งต่างๆค่อนข้างโง่ ดูว่าคำถาม "ช่วยฉันเพิ่มประสิทธิภาพการสืบค้นของฉัน" มีกี่คำถามใน SO ในการเขียนแบบสอบถามที่มีประสิทธิภาพคุณต้องเข้าใจว่าเครื่องมือเพิ่มประสิทธิภาพการสืบค้นกำลังจะทำอะไร ฉันมีโปรไฟล์สำหรับสภาพแวดล้อมการเขียนโปรแกรมของฉันแล้ว - และดีบักเกอร์สำหรับเรื่องนั้น - และมันดีกว่า EXPLAIN ที่ฉันเคยเห็นมาหลายไมล์ ผมไม่ทราบว่าวิธีการที่ดี ObjectStore ที่นี้ แต่สแต็คซอฟแวร์ที่เป็นเนื้อเดียวกันสามารถที่น่ากลัว
Ken

ในปี 2554 คุณสามารถดาวน์โหลด Gemstone เวอร์ชันฟรีและโปรแกรมได้ใน Smalltalk สิ่งเดียวที่ต้องคิดคือวิธีย้ายอินสแตนซ์ของคลาสหนึ่งไปยังอีกเวอร์ชันหนึ่ง (กรณีง่ายๆที่จัดการโดยอัตโนมัติ)
Stephan Eggermont

5

ฉันคิดว่าคุณอาจสนใจที่จะดูDataphorซึ่งเป็นสภาพแวดล้อมการพัฒนาเชิงสัมพันธ์แบบโอเพนซอร์สที่มีเซิร์ฟเวอร์ฐานข้อมูลของตัวเอง (ซึ่งพูดถึง D) และความสามารถในการรับส่วนต่อประสานผู้ใช้จากภาษาแบบสอบถาม

นอกจากนี้ดูเหมือนว่า Ingresยังคงรองรับ QUEL และเป็นโอเพ่นซอร์ส


ในทางเทคนิคภาษาที่เซิร์ฟเวอร์ข้อมูลพูดคือ D4, D (หรือบทช่วยสอน D ... ) เป็นภาษาที่แตกต่างกันเล็กน้อย
McKay

แว็กซ์อวดดียิ่งขึ้น D ไม่ใช่ภาษา แต่เป็นข้อกำหนดที่ Date & Darwen มอบให้ พวกเขาใช้ "บทช่วยสอน D" เป็นภาษาตัวอย่าง D4 มีคุณสมบัติเป็น D หรืออย่างน้อยที่สุดก็เป็นเช่นนั้น แต่ McKay ถูกต้องที่ควรกล่าวว่าเป็น "a D" ไม่ใช่ว่า "เป็น D" มีเอกสารความสอดคล้องในเอกสาร Dataphor
N8allan

5

การเคลื่อนไหวทั่วไปในปัจจุบันคือ NoSQL; โดยทั่วไปเทคโนโลยีเหล่านี้ ได้แก่ :

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


2
+1 สำหรับฐานข้อมูลเชิงเอกสาร เมื่อชุดข้อมูลมีขนาดใหญ่ขึ้นแบบจำลองเชิงสัมพันธ์อาจช้ามาก ...
Mike Cialowicz

2
สิ่งที่คุณพูดถึงไม่ใช่ทางเลือกอื่นสำหรับ SQL ไม่ใช่แม้แต่ภาษา ความคิดริเริ่มเช่น Apache Pig และ Apache Hive มีความคล้ายคลึงกันมากขึ้น
Reinierpost

4

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

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

เพื่อตอบสนองต่อการแก้ไขของคุณ:

หากคุณกำลังมองหาทางเลือกอื่นสำหรับ SQL DML สำหรับการดึงข้อมูลจากที่เก็บข้อมูลเชิงสัมพันธ์ฉันไม่เคยได้ยินทางเลือกอื่นใดสำหรับ SQL เลย

ฉันคิดว่าการ Knocks SQL นั้นไม่ได้เทียบกับภาษามากนักเมื่อเทียบกับหลักการจัดเก็บข้อมูลพื้นฐานที่ภาษานั้นใช้ ผู้คนมักสับสนระหว่างภาษา SQL กับโมเดลข้อมูลเชิงสัมพันธ์ที่สร้าง RDBMSes


1
ใช่ฉันรู้หลังจากเขียนสิ่งนี้ว่าทุกคนสิ่งที่ SQL และฐานข้อมูลเชิงสัมพันธ์เป็นสิ่งเดียวกัน ..
Brendan Long

4

ฐานข้อมูลเชิงสัมพันธ์ไม่ใช่ฐานข้อมูลเพียงชนิดเดียว ฉันควรพูดคำเกี่ยวกับObject-Databasesเพราะฉันไม่เห็นมันในการตอบสนองจากผู้อื่น ฉันมีประสบการณ์บางอย่างกับ Zope python framework ที่ใช้ZODBสำหรับความคงอยู่ของวัตถุแทน RDBMS (ในทางทฤษฎีเป็นไปได้ที่จะแทนที่ ZODB ด้วยฐานข้อมูลอื่นภายใน zope แต่ครั้งสุดท้ายที่ฉันตรวจสอบฉันไม่ประสบความสำเร็จในการทำให้มันทำงานได้ ไม่เป็นบวกเกี่ยวกับเรื่องนี้)

ความคิดของ ZODB นั้นแตกต่างกันมากเช่นเดียวกับการเขียนโปรแกรมออบเจ็กต์ที่อาจเกิดขึ้นอย่างต่อเนื่อง

ORMสามารถมองเห็นได้ว่าเป็นภาษาชนิดหนึ่ง

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


3

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

มีฐานข้อมูลวัตถุเช่นdb4oและมีฐานข้อมูลnoSQLที่คล้ายกันซึ่งอ้างถึงกลไกการจัดเก็บข้อมูลใด ๆ ที่ไม่ต้องพึ่งพา SQL แต่ผลิตภัณฑ์โอเพ่นซอร์สส่วนใหญ่เช่นCassandraยึดตามแนวคิดBigtableของ Google อย่างหลวม ๆ

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

ไม่มีสิ่งเหล่านี้เทียบเท่ากับ SQL

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

หากคุณกำลังใช้งานเว็บไซต์เครือข่ายสังคมอื่นและไม่ได้กังวลกับหลักการของกรดมากเกินไปให้เริ่มมองหาผลิตภัณฑ์เช่น db4o อย่างไรก็ตามหากคุณกำลังพัฒนาระบบธุรกิจที่มีความสำคัญอย่างยิ่งยวดฉันขอแนะนำอย่างยิ่งให้คุณคิดทบทวนก่อนที่จะเข้าร่วมคอรัส "SQL sucks" ทำการวิจัยก่อนค้นหาว่าคุณสมบัติใดบ้างที่ผลิตภัณฑ์ต่างๆสามารถรองรับและไม่สามารถรองรับได้


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

บางทีคุณอาจกำลังมองหาสิ่งที่เป็นนามธรรมมากกว่าไวยากรณ์ Linq ไปยัง SQL, Entity Framework, Hibernate / NHibernate, SubSonic และโฮสต์ของเครื่องมือ ORM อื่น ๆ ล้วนมีไวยากรณ์คล้าย SQL ของตัวเองซึ่งไม่ใช่ SQL ซะทีเดียว "คอมไพล์ดาวน์" ทั้งหมดนี้เป็น SQL หากคุณเรียกใช้ SQL Server คุณยังสามารถเขียน CLR Functions / Procedures / Triggers ซึ่งช่วยให้คุณสามารถเขียนโค้ดในภาษา. NET ใด ๆ ที่จะทำงานภายในฐานข้อมูล อย่างไรก็ตามนี่ไม่ใช่สิ่งทดแทน SQL แต่เป็นส่วนขยายเพิ่มเติม

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


ฉันคิดว่าคุณกำลังสับสนฐานข้อมูลเชิงสัมพันธ์กับฐานข้อมูล SQL ไม่มีเหตุผลใดที่ฐานข้อมูลเชิงสัมพันธ์ต้องใช้ SQL (ยกเว้นคนอื่นใช้) และใช่ฉันตระหนักดีว่าผลิตภัณฑ์ฐานข้อมูลส่วนใหญ่ใช้ SQL เท่านั้น
Brendan Long

1
@Brendan Long: ถูกต้องฐานข้อมูลเชิงสัมพันธ์ไม่จำเป็นต้องใช้ SQL แต่นั่นคือสิ่งที่ฐานข้อมูลเชิงสัมพันธ์ทำใช้ ผลิตภัณฑ์อื่น ๆ ที่ไม่ใช่ SQL ที่มีอยู่ในปัจจุบันไม่ใช่ฐานข้อมูลเชิงสัมพันธ์
Aaronaught

แล้ว D กับ Quel ล่ะ? ดูเหมือนจะไม่เป็นที่นิยมมากนัก แต่มีอยู่ (และใช้สำหรับฐานข้อมูลเชิงสัมพันธ์)
Brendan Long

1
@Brendan Long: Quel เท่าที่ฉันรู้ถูกแทนที่ด้วย SQL ครั้งแรกที่ฉันเคยได้ยินเกี่ยวกับ D และจากบทความวิกิฉันดูปรากฏว่ามันไม่ใช่ภาษาจริงๆ แต่เป็นชุดคุณสมบัติที่กำหนดไว้ซึ่งภาษา DB ควรมี แม้ว่าอาจมีการใช้งานที่คลุมเครือ แต่ฉันไม่คิดว่าสิ่งนี้จะเปลี่ยนแปลงอะไรข้างต้น นอกจากนี้ฉันคิดว่าคุณควรตระหนักว่าเมื่อมีคนพูดว่า "SQL Sucks" พวกเขาไม่ได้อ้างถึงไวยากรณ์ของ SQL พวกเขา (ถูกหรือผิด) อ้างถึงฐานข้อมูลเชิงสัมพันธ์ที่ใช้ SQL
Aaronaught

3

SQL เป็น de-facto

เฟรมเวิร์กที่พยายามป้องกันนักพัฒนาจากนั้นได้สร้างภาษาเฉพาะของตนเองขึ้นมาในที่สุด (Hibernate HQL อยู่ในใจ)

SQL แก้ปัญหาได้ดีพอสมควร ไม่ใช่เรื่องยากที่จะเรียนรู้ไปกว่าภาษาโปรแกรมระดับสูง หากคุณรู้ภาษาที่ใช้งานได้แล้วการเข้าใจ SQL เป็นเรื่องง่าย

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

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


LINQ ไม่ใช่ภาษาที่ออกแบบมาเพื่อป้องกันนักพัฒนาจาก SQL แต่เป็นไวยากรณ์ของแบบสอบถามที่ใช้ในการซักถามคอลเลกชันซึ่งสามารถขยายเพื่อรองรับแหล่งที่มาของคอลเล็กชันต่างๆ ฐานข้อมูล SQL เป็นหนึ่งในแหล่งข้อมูลเหล่านั้น
Khanzor

จุดดี LINQ ไม่ใช่ตัวอย่างที่ถูกต้อง แก้ไขแล้ว
codenheim

2

ปัญหาที่เกิดขึ้นกับ SQL ได้กระตุ้นให้ฉันเสกสรรภาษาร่างแบบสอบถามที่เรียกว่าSMEQLมากกว่าที่พอร์ตแลนด์แบบวิกิพีเดีย Repository ความคิดเห็นยินดีต้อนรับ มันยืมแนวคิดจากการเขียนโปรแกรมเชิงฟังก์ชันและภาษา Business System 12 แบบทดลองของ IBM (เดิมทีฉันเรียกมันว่า TQL แต่พบว่าชื่อนั้นถูกใช้ในภายหลัง)


SMEQL อยู่หรือไม่ อยู่นอก C2 หรือไม่ มีซอฟต์แวร์หรือไม่?
david.pfx

นอกจากนี้ยังมี "BQL" - ข้อเสนอพิเศษของ SQL ซึ่งสามารถถ่ายทอด
Nickolay

1

ภายในโลก. NET ในขณะที่มันยังคงมีความรู้สึกแบบ SQL อยู่ LINQ-to-SQL จะช่วยให้คุณมีการผสมผสานที่ดีระหว่าง SQL และการประมวลผลข้อมูล. NET ในหน่วยความจำของคุณ นอกจากนี้ยังช่วยลดความยุ่งยากในการวางท่อข้อมูลระดับล่างที่ไม่มีใครอยากทำ

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


0

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

ไมเคิล Stonebraker ครอบคลุมนี้ว่า "NoSQL" การสนทนามีอะไรจะทำอย่างไรกับ SQL


NoACID "ฐานข้อมูล" จึงเป็นอีกทางเลือกหนึ่งของ SQL ในฐานะภาษาเข้าถึงฐานข้อมูลหรือไม่? ไม่พวกเขาไม่ได้เป็น.
Reinierpost

แม้ว่า SQL จะมีประสิทธิภาพ แต่พีชคณิตเชิงสัมพันธ์ก็มีประสิทธิภาพมากกว่า
McKay

@reineirpost: เห็นด้วย คุณสามารถใช้ SQL เพื่อค้นหาฐานข้อมูล NoACID คุณสามารถค้นหาไฟล์ข้อความแทนความสัมพันธ์ได้ (เครื่องมือบรรทัดคำสั่ง Unix โบราณบางตัวสอดคล้องกับการดำเนินการในพีชคณิตเชิงสัมพันธ์
Jim Ferrans

@McKay: มี RDBMS เชิงพาณิชย์ที่รองรับไวยากรณ์พีชคณิตเชิงสัมพันธ์หรือไม่? ที่จะเย็น
Jim Ferrans

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