คำถามติดแท็ก sql

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

6
รหัสการจัดรูปแบบแบบสอบถาม SQL
ฉันควรทำลายแบบสอบถาม SQL ในบรรทัดที่แตกต่างกันหรือไม่ ตัวอย่างเช่นในโครงการที่ฉันกำลังดำเนินการเรามีแบบสอบถามที่ใช้คอลัมน์ 1600! 1600 + ตัวอักษรแท็บ ฉันเขียนข้อความค้นหาเช่นนี้: "SELECT bla , bla2 , bla FROM bla " . "WHERE bla=333 AND bla=2" . "ORDER BY nfdfsd ..."; แต่พวกเขาเรียกร้องให้ฉันใส่ไว้ในบรรทัดเดียวและบอกว่าสไตล์ของฉันจัดรูปแบบไม่ถูกต้อง ทำไมมันเป็นการปฏิบัติที่ไม่ดี?

7
เร็วกว่าอะไร ใช้ REST API หรือสอบถามฐานข้อมูลโดยตรง
ประสิทธิภาพที่รวดเร็วกว่าคืออะไร การสร้าง REST API และการมีเว็บแอปของคุณใช้ REST API เพื่อทำการโต้ตอบกับฐานข้อมูลของคุณหรือทำการสืบค้นฐานข้อมูลของคุณโดยตรง (เช่นการใช้วัตถุทั่วไปที่ภาษาของคุณใช้ในการสืบค้นฐานข้อมูลเช่น JDBC for Java)? วิธีที่ฉันเห็นด้วย REST: คุณสร้างวัตถุในรหัสของคุณเพื่อเรียกใช้วิธีการ REST โทรวิธี http รหัสภายใน REST API ของคุณจะค้นหาฐานข้อมูล ฐานข้อมูลส่งคืนข้อมูลบางส่วน รหัส REST API จะแพ็คข้อมูลลงใน Json และส่งไปยังลูกค้าของคุณ ลูกค้าได้รับการตอบสนอง Json / XML แมปการตอบสนองกับวัตถุในรหัสของคุณ ในทางตรงกันข้ามการสืบค้นฐานข้อมูลโดยตรง: คุณทำวัตถุด้วยสายอักขระแบบสอบถามเพื่อสอบถามฐานข้อมูล ฐานข้อมูลส่งคืนข้อมูลบางส่วน แมปการตอบสนองกับวัตถุในรหัสของคุณ ดังนั้นนี่ไม่ได้หมายความว่าการใช้ REST API จะช้าลงหรือไม่ อาจขึ้นอยู่กับประเภทของฐานข้อมูล (SQL กับ NoSQL)?
16 database  rest  sql 

7
คุณเวอร์ชั่น / ติดตามการเปลี่ยนแปลงตาราง SQL อย่างไร
เมื่อทำงานในทีมนักพัฒนาที่ทุกคนทำการเปลี่ยนแปลงตารางท้องถิ่นและตารางการพัฒนาคุณจะเปลี่ยนแปลงการซิงค์ทั้งหมดอย่างไร ไฟล์บันทึกกลางที่ทุกคนเก็บการเปลี่ยนแปลงของ sql หรือไม่ หน้าวิกิเพื่อติดตามแก้ไขคำสั่งตาราง, ไฟล์. sql แต่ละไฟล์ที่ devs สามารถรันเพื่อนำโลคัล db ไปเป็นเวอร์ชันล่าสุดได้หรือไม่? ฉันใช้วิธีแก้ปัญหาเหล่านี้แล้วและฉันก็คาดหวังว่าจะได้วิธีแก้ปัญหาที่ดีร่วมกันซึ่งใช้งานได้ดีดังนั้นฉันจึงขอขอบคุณความคิดของคุณ

4
ทำไมฐานข้อมูลเชิงสัมพันธ์ยอมรับเฉพาะแบบสอบถาม SQL?
เท่าที่ฉันรู้ฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่ไม่ได้เสนอ API ระดับไดรเวอร์สำหรับการสืบค้นยกเว้นqueryฟังก์ชั่นที่ใช้สตริง SQL เป็นอาร์กิวเมนต์ ฉันกำลังคิดว่ามันจะง่ายกว่านี้หากมีใครทำได้: var result = mysql.select('article', {id: 3}) สำหรับตารางที่เข้าร่วมมันจะซับซ้อนกว่าเล็กน้อย แต่ก็ยังเป็นไปได้ ตัวอย่างเช่น: var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'}); mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID']) รหัสที่สะอาดกว่าไม่มีการแยกสตริงค่าใช้จ่ายไม่มีปัญหาการฉีดใช้องค์ประกอบการสืบค้นได้ง่ายขึ้น ... ฉันเห็นข้อดีมากมาย มีเหตุผลที่เฉพาะเจาะจงหรือไม่ที่เลือกให้เฉพาะการเข้าถึงคิวรีผ่าน SQL เท่านั้น
15 database  sql 

7
ไปยังโดเมนหรือไม่ไปยังโดเมน
มาตรฐาน SQL92 และ SQL99 กำหนดโครงสร้างDDL ไม่ใช่ทุกฐานข้อมูลที่รองรับสิ่งนี้หรือมีชื่ออื่น (SQL Server มีประเภทที่กำหนดโดยผู้ใช้เป็นต้น)CREATE DOMAIN สิ่งเหล่านี้อนุญาตให้หนึ่งเพื่อกำหนดชนิดข้อมูลที่มีข้อ จำกัด ที่จะใช้ในฐานข้อมูลของพวกเขาเพื่อให้ง่ายและบังคับใช้กฎที่เกี่ยวข้องกับค่าที่อนุญาต ชนิดข้อมูลดังกล่าวสามารถใช้ในการประกาศคอลัมน์ในอินพุตและเอาต์พุตไปยังโพรซีเดอร์และฟังก์ชันที่เก็บไว้ ... ผมอยากจะรู้ว่า: ผู้คนใช้โดเมนในการออกแบบฐานข้อมูลจริง ๆ หรือไม่ ถ้าเป็นเช่นนั้นในระดับใด? มีประโยชน์อย่างไร คุณพบข้อผิดพลาดอะไรบ้าง ฉันพยายามประเมินศักยภาพของการใช้สิ่งเหล่านี้ในการพัฒนาฐานข้อมูลในอนาคต
15 sql  sql-domain 

10
เหตุใด RDBMS จึงไม่ส่งคืนตารางที่เข้าร่วมในรูปแบบที่ซ้อนกัน
ตัวอย่างเช่นฉันต้องการดึงข้อมูลผู้ใช้และหมายเลขโทรศัพท์และที่อยู่อีเมลทั้งหมดของเขา หมายเลขโทรศัพท์และอีเมลจะถูกเก็บไว้ในตารางแยกต่างหากผู้ใช้หนึ่งรายไปยังโทรศัพท์ / อีเมลจำนวนมาก ฉันสามารถทำได้ค่อนข้างง่าย: SELECT * FROM users user LEFT JOIN emails email ON email.user_id=user.id LEFT JOIN phones phone ON phone.user_id=user.id ปัญหานี้คือการส่งคืนชื่อผู้ใช้ DOB สีที่ชื่นชอบและข้อมูลอื่น ๆ ทั้งหมดที่จัดเก็บในตารางผู้ใช้ซ้ำแล้วซ้ำอีกสำหรับแต่ละระเบียน (ผู้ใช้บันทึกอีเมลโทรศัพท์) สันนิษฐานว่ากินแบนด์วิดท์ ลงผลลัพธ์ จะดีกว่าไหมถ้ามันส่งคืนแถวเดียวสำหรับผู้ใช้แต่ละคนและภายในบันทึกนั้นมีรายการอีเมลและรายการโทรศัพท์หรือไม่ มันจะทำให้ข้อมูลทำงานได้ง่ายขึ้นด้วยเช่นกัน ฉันรู้ว่าคุณสามารถรับผลลัพธ์เช่นนี้โดยใช้ LINQ หรือกรอบงานอื่น ๆ แต่ดูเหมือนว่ามันจะเป็นจุดอ่อนในการออกแบบฐานข้อมูลเชิงสัมพันธ์ เราสามารถแก้ไขได้โดยใช้ NoSQL แต่ไม่ควรมีพื้นกลางบ้าง ฉันพลาดอะไรไปรึเปล่า? ทำไมจึงไม่มีสิ่งนี้ * ใช่มันถูกออกแบบด้วยวิธีนี้ ฉันเข้าใจแล้ว ฉันสงสัยว่าทำไมไม่มีทางเลือกอื่นให้ทำงานด้วยได้ง่ายขึ้น SQL สามารถทำสิ่งที่มันทำอยู่ต่อไป แต่จากนั้นพวกเขาสามารถเพิ่มคำสำคัญหรือสองคำเพื่อทำ post-processing …
14 design  sql  rdbms 

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

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

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

5
คำถามอะไรที่จะทดสอบความรู้โปรแกรมเมอร์ของ SQL? [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา คำถามอะไรที่จะทดสอบความรู้โปรแกรมเมอร์ของ SQL? คำตอบของคำถามคืออะไร? และการไม่มีคำตอบที่ถูกต้องจะมีความหมายอย่างไรในแง่ของเวลาที่น่าจะเข้าใจแนวคิดที่เกี่ยวข้องกับคำถาม GOOGLED:ความท้าทาย sql
14 sql  hiring 

4
เกี่ยวกับวันที่ของฐานข้อมูลประเภท crusade: ถูกต้อง? คุ้มค่า? มีใครรู้สึกบ้างไหม?
ฉันใช้เวลามากในการตอบคำถาม SQL ผ่านทาง SO ฉันเจอคำถามของตระกูลนี้บ่อยครั้ง: SELECT * FROM person WHERE birthdate BETWEEN '01/01/2017' AND '01/03/2017' SELECT * FROM person WHERE birthdate BETWEEN '2017-01-01' AND '2017-03-01' SELECT * FROM person WHERE birthdate BETWEEN 'some string' AND 'other string' เช่นอาศัยการแปลงโดยนัยจากสตริงถึงวันที่ (ไม่ดี) ของพารามิเตอร์ที่กำหนดหรืออาศัยฐานข้อมูลที่แปลงค่า x ล้านแถวของฐานข้อมูลเป็นสตริงและทำการเปรียบเทียบสตริง (แย่กว่า) ฉันแสดงความคิดเห็นเป็นครั้งคราวโดยเฉพาะอย่างยิ่งถ้าเป็นผู้ใช้ตัวแทนสูงที่เขียนคำตอบสมาร์ท แต่คนที่ฉันรู้สึกว่าควรจะมีความเลอะเทอะน้อยลง / พิมพ์ด้วยชนิดข้อมูลของพวกเขาน้อยลง ความคิดเห็นมักจะใช้แบบฟอร์มที่มันอาจจะดีกว่าถ้าพวกเขาแปลงสตริงเป็นวันที่อย่างชัดเจนโดยใช้ to_date (Oracle), …

4
ตารางประวัติฐานข้อมูล / ตารางการติดตาม
ขณะนี้ฉันต้องการจัดโครงสร้างตารางการติดตาม / ประวัติดังนี้: PrimaryKey - ID OtherTableId - fk fieldName - ชื่อของฟิลด์ที่ติดตาม OLDVALUE NewValue ชื่อผู้ใช้ CreateDateTime โดยพื้นฐานแล้วฉันต้องการมีตารางที่จะติดตามประวัติของตารางอื่นเก็บชื่อคอลัมน์ของฟิลด์ที่ถูกเปลี่ยนแปลงด้วยค่าใหม่และเก่า คำถามของฉันคือทุกคนสามารถเจาะรูในนี้ นอกจากนี้วิธีที่ง่ายที่สุดในการตรวจสอบให้แน่ใจว่ามีเพียงชื่อคอลัมน์จากตารางที่ติดตามเท่านั้นที่ถูกป้อนลงในคอลัมน์ fieldName ปัจจุบันตัวเลือกของฉันจะต้องมี enum ในบริการที่ฉันกำลังสร้างหรือสร้างตารางสถานะอื่นและทำให้ fieldName เป็น fk มีความคิดที่ดีกว่านี้ไหม? แก้ไข เป้าหมาย: ขณะนี้มีเพียง 2 ฟิลด์ที่เราต้องการติดตาม หนึ่งฟิลด์จะปรากฏบนหน้าเว็บเพื่อแสดงประวัติส่วนอื่น ๆ จะเข้าถึงได้โดยแผนกหนึ่งเท่านั้นและพวกเขามีสิทธิ์เข้าถึงมุมมองของฐานข้อมูลที่พวกเขาสามารถสืบค้นได้ พวกเขาต้องการสอบถามเพียงหนึ่งช่องนี้เพื่อรับข้อมูลว่าใครเปลี่ยนฟิลด์และจะทำอย่างไร นี่คือเหตุผลที่เราต้องการตั้งค่าที่เขตข้อมูลฐานข้อมูลกำหนดคอลัมน์ตารางแทนที่จะมีสำเนาที่แน่นอนของประวัติศาสตร์บันทึกตาราง เราต้องการเพียงสองฟิลด์ที่ถูกติดตามพร้อมกับความเป็นไปได้ในการเพิ่มหรือลบฟิลด์ในอนาคต ขอบคุณ!
13 database  sql  tracking 

3
การพึ่งพาการสืบค้นแบบ Parametrized เป็นวิธีเดียวที่จะป้องกันการฉีด SQL หรือไม่
สิ่งที่ฉันได้เห็นจากการโจมตีด้วยการฉีด SQL ดูเหมือนว่าจะแนะนำว่าการสืบค้นแบบ parametrized โดยเฉพาะอย่างยิ่งในขั้นตอนการจัดเก็บเป็นวิธีเดียวที่จะป้องกันการโจมตีดังกล่าว ในขณะที่ฉันกำลังทำงาน (ย้อนกลับไปในยุคมืด) ขั้นตอนการจัดเก็บถูกมองว่าเป็นการปฏิบัติที่ไม่ดีส่วนใหญ่เป็นเพราะพวกเขาเห็นว่าบำรุงรักษาได้น้อยลง ทดสอบได้น้อยลง คู่อย่างมาก และล็อคระบบเป็นผู้ขายรายเดียว ( คำถามนี้ครอบคลุมเหตุผลอื่น ๆ ) แม้ว่าเมื่อฉันกำลังทำงานอยู่โครงการต่าง ๆ แทบไม่รู้ตัวถึงความเป็นไปได้ของการโจมตีดังกล่าว มีการนำกฎต่างๆมาใช้เพื่อรักษาความปลอดภัยของฐานข้อมูลต่อการทุจริตในหลาย ๆ ประเภท กฎเหล่านี้สามารถสรุปได้ดังนี้: ไม่มีไคลเอ็นต์ / แอปพลิเคชันเข้าถึงตารางฐานข้อมูลโดยตรง การเข้าถึงตารางทั้งหมดทั้งหมดผ่านมุมมอง (และการอัปเดตทั้งหมดไปยังตารางฐานถูกทำผ่านทริกเกอร์) รายการข้อมูลทั้งหมดมีโดเมนที่ระบุ ไม่มีรายการข้อมูลที่ได้รับอนุญาตให้เป็นโมฆะ - นี่เป็นนัยที่ DBAs บดฟันของพวกเขาในบางครั้ง; แต่ถูกบังคับใช้ บทบาทและการอนุญาตได้รับการตั้งค่าอย่างเหมาะสม - ตัวอย่างเช่นบทบาทที่ถูก จำกัด ให้สิทธิ์ในการดูข้อมูลเท่านั้น ดังนั้นชุดของกฎ (บังคับ) เช่นนี้ (แม้ว่าไม่จำเป็นต้องเป็นชุดนี้โดยเฉพาะ) เป็นทางเลือกที่เหมาะสมในการค้นหาแบบ parametrized ในการป้องกันการโจมตี SQL injection? ถ้าไม่ทำไมล่ะ สามารถรักษาความปลอดภัยฐานข้อมูลจากการโจมตีดังกล่าวด้วยฐานข้อมูล …

13
SQL Devs สร้างแบบสอบถาม SQL โดยใช้ SQL Query Designers หรือไม่
ฉันแค่อยากรู้ว่า SQL Devs เขียนโค้ดด้วยมือเปล่าหรือพวกมันใช้ประโยชน์จากนักออกแบบคิวรี่ภาพเพื่อสร้างคิวรี? ในกรณีส่วนใหญ่ตัวออกแบบคิวรีสามารถสร้างคิวรีที่ไม่ซับซ้อนได้ใช่หรือไม่ (ฉันเป็น WinForms dev เพิ่งเริ่มต้นกับ SQL Server)
13 sql  sql-server 

3
วิธีที่ดีที่สุดในการจัดการแบบสอบถาม SQL ที่เก็บไว้ในรหัสของคุณ? (หรือคุณควร?) [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันแน่ใจว่าฉันไม่ใช่คนเดียวที่ได้รับความผิดหวังเมื่อพวกเขาเห็นหน้าของรหัสเกลื่อนไปด้วยแบบสอบถาม SQL ActiveRecord และรูปแบบ ORM อื่น ๆ ช่วยลดจำนวน SQL ที่ใช้ในโครงการได้ดี แต่ในหลาย ๆ กรณีของการสืบค้นที่ซับซ้อนการใช้ SQL นั้นดูเหมือนจะหลีกเลี่ยงไม่ได้ ฉันกำลังมองหาความคิดเห็นเกี่ยวกับวิธีจัดระเบียบแบบสอบถาม SQL ด้วยส่วนที่เหลือของรหัส (หรือภายนอก) เพื่อป้องกันไม่ให้ถูกกระจายไปทั่วสถานที่? แนวคิดหนึ่งที่เห็นได้ชัดคือการใช้ Views แต่บ่อยครั้งที่ Views สามารถเป็นแหล่งที่มาของปัญหาประสิทธิภาพเมื่อต้องจัดการกับตารางที่มีดัชนีขนาดใหญ่หลาย ๆ ตัวเป็นต้น แก้ไข 1 - ฉันสมมติว่าคุณได้แยกมันออกเป็นเลเยอร์โมเดลแล้ว

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