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

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

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

2
SQL IN () กับ OR
ฉันทำงานกับแบบสอบถามที่ฉันเขียนวันนี้ต้องเปลี่ยนรหัสจากส่วนWHEREคำสั่งเพื่อใช้ตัวกรอง IN (รายการสิ่ง) แทนการใช้สิ่งที่ชอบ item_desc = 'item 1' OR item_desc = 'item 2' OR item_desc = 'item 3' OR item_desc = 'item 4' ข้างต้นวิ่งเป็นเวลา 15 นาทีและไม่ได้คืนสิ่งใดเลย แต่สิ่งต่อไปนี้ให้ผลลัพธ์ของฉันใน 1.5 นาที item_desc IN ( 'item 1' ,'item 2' ,'item 3' ,'item 4' ) ฉันทำสิ่งนี้ใน SQL และสงสัยว่าทำไม IN (รายการของรายการ) จึงทำงานได้เร็วกว่าคำสั่ง OR - แก้ไข …
23 sql  speed 

11
เพื่อนร่วมงานของฉันสร้างตาราง SQL 96 คอลัมน์
ที่นี่เราอยู่ในปี 2010 วิศวกรซอฟต์แวร์ที่มี 4 หรือ 5 ปีหรือประสบการณ์ยังคงออกแบบตารางที่มีคอลัมน์ 96 fracking ฉันบอกเขาว่ามันจะเป็นฝันร้าย ฉันแสดงให้เขาเห็นว่าเราต้องใช้กฎเพื่อเชื่อมต่อ MySQL กับ C # ฉันอธิบายว่าตารางที่มีคอลัมน์มากกว่าแถวมีกลิ่นมาก ถึงกระนั้นฉันได้รับ "มันจะง่ายขึ้นด้วยวิธีนี้" ฉันควรทำอย่างไร? แก้ไข * ตารางนี้มีข้อมูลจากเซ็นเซอร์ เรามีเซ็นเซอร์ 1 พร้อมด้วย Dynamic_D1X Dynamic_D1Y [... ] Dynamic_D6X Dynamic_D6Y [... ] แก้ไข 2 * ในที่สุดฉันก็ออกจากงานนั้น มันเป็นสัญญาณเมื่อโปรแกรมเมอร์อื่นมืดไปเป็นเวลาหลายเดือนในขณะที่มันเป็นสัญญาณอีกครั้งเมื่อผู้บริหารไม่ได้ตระหนักว่านี่เป็นปัญหา
23 sql  code-smell 

4
ทำไมไม่เพียงแค่สร้างแบบสอบถามที่ไม่ใช่พารามิเตอร์ส่งคืนข้อผิดพลาด?
การฉีด SQL เป็นปัญหาด้านความปลอดภัยที่ร้ายแรงเป็นส่วนใหญ่เพราะง่ายต่อการเข้าใจผิด: วิธีที่ชัดเจนและใช้งานง่ายในการสร้างแบบสอบถามที่มีการป้อนข้อมูลของผู้ใช้ทำให้คุณมีความเสี่ยงและวิธีที่ถูกต้องในการลดความแปรปรวน แบบสอบถามและการฉีด SQL ก่อน ดูเหมือนกับฉันว่าวิธีที่ชัดเจนในการแก้ไขปัญหานี้ก็คือการปิดตัวเลือกที่ชัดเจน (แต่ผิด): แก้ไขเอ็นจิ้นฐานข้อมูลเพื่อให้แบบสอบถามใด ๆ ที่ได้รับซึ่งใช้ค่าตายตัวในส่วนคำสั่ง WHERE แทนที่จะเป็นพารามิเตอร์ ข้อความแสดงข้อผิดพลาดแจ้งให้คุณใช้พารามิเตอร์แทน สิ่งนี้จะต้องมีตัวเลือกในการยกเลิกเพื่อให้สิ่งต่าง ๆ เช่นแบบสอบถาม ad-hoc จากเครื่องมือการดูแลระบบจะยังคงทำงานได้อย่างง่ายดาย แต่ควรเปิดใช้งานตามค่าเริ่มต้น การมีสิ่งนี้จะทำให้การฉีด SQL เย็นลงเกือบข้ามคืน แต่เท่าที่ฉันรู้ไม่มี RDBMS ทำสิ่งนี้ได้จริง มีเหตุผลที่ดีทำไมไม่
22 security  sql  rdbms 

2
SQLite ที่มีสองกระบวนการของไพ ธ อนเข้าถึง: หนึ่งการอ่านหนึ่งการเขียน
ฉันกำลังพัฒนาระบบขนาดเล็กที่มีสององค์ประกอบ: โพลหนึ่งข้อมูลจากแหล่งข้อมูลอินเทอร์เน็ตและแปลเป็นข้อมูล sql เพื่อคงอยู่ในระบบ คนที่สองอ่านว่าข้อมูล sql จากอินสแตนซ์ในท้องถิ่นและให้บริการผ่านทาง json และ api ที่สงบ เดิมทีฉันวางแผนจะคงข้อมูลไว้กับ postgresql แต่เนื่องจากแอปพลิเคชันจะมีข้อมูลปริมาณน้อยมากในการจัดเก็บและรับส่งข้อมูลเพื่อให้บริการฉันคิดว่ามันเกินความจริง SQLite ขึ้นอยู่กับงานหรือไม่? ฉันชอบความคิดของรอยเท้าขนาดเล็กและไม่จำเป็นต้องบำรุงรักษาเซิร์ฟเวอร์ SQL อื่นสำหรับงานนี้ แต่ฉันกังวลเกี่ยวกับการทำงานพร้อมกัน ดูเหมือนว่าเมื่อเปิดใช้งานการบันทึกล่วงหน้าเขียนการอ่านและการเขียนฐานข้อมูล SQLite สามารถเกิดขึ้นได้โดยไม่ต้องล็อคกระบวนการใด ๆ ออกจากฐานข้อมูล อินสแตนซ์ SQLite เดียวสามารถรักษากระบวนการที่เกิดขึ้นพร้อมกันสองกระบวนการให้เข้าถึงได้หากมีเพียงหนึ่งการอ่านและการเขียนอื่นเท่านั้น ฉันเริ่มเขียนโค้ด แต่สงสัยว่านี่เป็นการใช้ผิดของ SQLite หรือไม่

2
SQL ประกาศหรือไม่
ฉันถามเพราะคำถามมากมายที่ฉันเห็นในจำนวน SQL ถึง: "นี่ช้าฉันจะเร่งความเร็วได้อย่างไร"? หรือแบบฝึกหัดที่ระบุว่า "ทำแบบนี้ไม่ใช่แบบนั้นเพราะมันเร็วกว่า" สำหรับฉันแล้วดูเหมือนว่าส่วนใหญ่ของ SQL จะรู้วิธีการแสดงออกและการแสดงออกของความรู้ที่เลือกสไตล์การแสดงออกที่ดีขึ้น สิ่งนี้ไม่ได้เป็นรูปสี่เหลี่ยมจัตุรัสในแง่มุมหนึ่งของการเขียนโปรแกรมเชิงประกาศซึ่งเป็นการออกจากระบบเพื่อตัดสินใจว่าจะทำการคำนวณอย่างไรให้ดีที่สุดกับคุณเพียงแค่ระบุสิ่งที่การคำนวณควรสร้าง ไม่ควรเครื่องยนต์ SQL ไม่สนใจเกี่ยวกับถ้าคุณใช้in, existsหรือjoinถ้ามันเป็นจริงที่เปิดเผยไม่ควรมันก็ให้คำตอบที่ถูกต้องในเวลาที่เหมาะสมถ้าเป็นไปได้ใด ๆ ของทั้งสามวิธี? ตัวอย่างล่าสุดนี้ได้รับแจ้งจากโพสต์ล่าสุดนี้ซึ่งเป็นประเภทที่ระบุไว้ในย่อหน้าเปิดของฉัน ดัชนี ฉันเดาตัวอย่างที่ง่ายที่สุดที่ฉันสามารถใช้เกี่ยวข้องกับการสร้างดัชนีสำหรับตาราง ชัยชนะที่นี่บน w3schools.comแม้พยายามอธิบายว่าเป็นสิ่งที่ผู้ใช้มองไม่เห็นซึ่งมีเหตุผลด้านประสิทธิภาพ คำอธิบายของพวกเขาดูเหมือนจะใส่ดัชนี SQL ในค่ายที่ไม่ประกาศและพวกเขาจะถูกเพิ่มด้วยมือเป็นประจำด้วยเหตุผลด้านประสิทธิภาพอย่างหมดจด เป็นกรณีที่มี SQL DB ในอุดมคติที่เปิดเผยมากกว่าที่เหลือทั้งหมด แต่เพราะเป็นสิ่งที่ดีไม่ได้ยินหรือไม่

4
การรักษาความสมบูรณ์ของ Referential ระหว่างไคลเอนต์มือถือและเซิร์ฟเวอร์
ดังนั้นฉันจึงมีระบบที่ค่อนข้างเรียบง่าย ลูกค้าโทรศัพท์มือถือสร้างบันทึกในฐานข้อมูล SQLite ที่ผมอยากจะได้ซิงค์กับเซิร์ฟเวอร์ระยะไกล SQL (ที่ใช้ร่วมกันกับลูกค้ามือถืออื่น ๆ ) ดังนั้นเมื่อฉันสร้างระเบียนใหม่ในตาราง sqlite ของโทรศัพท์ฉันจะผลักดันการเปลี่ยนแปลงไปยังบริการระยะไกลของฉันผ่าน RESTful API ปัญหาที่ฉันมีคือฉันจะสั่งซื้อคีย์หลักอย่างไรเพื่อไม่ให้เกิดการชนกันของข้อมูล (เช่นบันทึกในโทรศัพท์มีคีย์หลักเดียวกันกับระเบียนที่แตกต่างกันโดยสิ้นเชิงบนเซิร์ฟเวอร์) "แนวปฏิบัติที่ดีที่สุดสำหรับการอ้างอิงระเบียนบนไคลเอนต์คืออะไรและสำหรับการอ้างอิงระเบียนเดียวกันบนเซิร์ฟเวอร์?
21 sql  web-services 

9
จะวางตรรกะทางธุรกิจไว้ใน Stored Procedure หรือไม่
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 8 ปีที่ผ่านมา มีการถกเถียงกันในหัวข้อนี้เสมอ - "ไม่ว่าจะวางตรรกะทางธุรกิจในกระบวนงานที่เก็บไว้หรือไม่ หากเราตัดสินใจที่จะไม่ใช้เครื่องมือ ORM และไม่ใส่ Business Logic ใน Stored Procedure เราจะวาง Business Logic ไว้ที่ไหน? ในแอปพลิเคชันก่อนหน้าของฉันฉันมักจะต้องการวาง Business Logic ทั้งหมดในขั้นตอนการจัดเก็บเท่านั้น จากนั้นในรหัส. NET ฉันเรียกขั้นตอนการจัดเก็บเหล่านี้โดยใช้ Data Application Application Blocks SQLHelper เป็นต้น แต่นี่ไม่สามารถเป็นสถานการณ์ได้ตลอดเวลา ดังนั้นฉันจึงทำ googling แต่ก็สับสนในที่สุด ....... ข้อเสนอแนะใด ๆ ... ?
21 c#  .net  sql 

8
คุณจะออกแบบฐานข้อมูลผู้ใช้ด้วยฟิลด์ที่กำหนดเองได้อย่างไร
คำถามนี้เกี่ยวกับวิธีที่ฉันควรออกแบบฐานข้อมูลมันอาจเป็นฐานข้อมูลเชิงสัมพันธ์ / nosql ขึ้นอยู่กับสิ่งที่จะเป็นทางออกที่ดีกว่า กำหนดข้อกำหนดที่คุณจะต้องสร้างระบบที่จะเกี่ยวข้องกับฐานข้อมูลเพื่อติดตาม "บริษัท " และ "ผู้ใช้" ผู้ใช้คนเดียวเป็นของ บริษัท เดียวเสมอ ผู้ใช้สามารถเป็นของ บริษัท เดียวเท่านั้น บริษัท สามารถมีผู้ใช้หลายคน การออกแบบสำหรับตาราง "บริษัท " ค่อนข้างตรงไปตรงมา บริษัท จะมีคุณสมบัติ / คอลัมน์ต่อไปนี้: (ขอให้ง่าย) ID, COMPANY_NAME, CREATED_ON สถานการณ์แรก เรียบง่ายและตรงไปตรงมาผู้ใช้ทุกคนมีคุณลักษณะเดียวกันดังนั้นสิ่งนี้สามารถทำได้อย่างง่ายดายในลักษณะสัมพันธ์ตารางผู้ใช้: ID, COMPANY_ID, FIRST_NAME, LAST_NAME, EMAIL, CREATED_ON สถานการณ์ที่สอง จะเกิดอะไรขึ้นหาก บริษัท ต่าง ๆ ต้องการจัดเก็บแอตทริบิวต์โปรไฟล์ที่แตกต่างกันสำหรับผู้ใช้ แต่ละ บริษัท จะมีชุดแอตทริบิวต์ที่กำหนดไว้ซึ่งจะใช้กับผู้ใช้ทั้งหมดของ บริษัท นั้น ตัวอย่างเช่น: บริษัท …

6
การโต้ตอบกับข้อมูลโดยใช้ฐานข้อมูล / เซิร์ฟเวอร์หลายตัว
โครงการทั้งหมดที่ฉันต้องจัดการจนถึงตอนนี้ต้องการเพียงฐานข้อมูลเดียวบนเซิร์ฟเวอร์เดียว ฉันสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่โปรเจ็กต์ที่ต้องการปรับย้ายไปยังฐานข้อมูลและ / หรือเซิร์ฟเวอร์หลายตัวเพื่อช่วยในการจัดการโหลด ฉันตระหนักถึงความยืดหยุ่นสูงแต่ฉันสนใจตัวอย่างโค้ดหรือแหล่งข้อมูลเพิ่มเติมที่ฉันสามารถอ่านเพิ่มเติมเกี่ยวกับหัวเรื่องได้ ตัวอย่างเช่น ตัวเชื่อมถูกสร้างขึ้นระหว่างสองตารางในหลายฐานข้อมูลอย่างไร (ตัวอย่างรหัสที่นี่จะเป็นประโยชน์) มีกลยุทธ์พิเศษสำหรับการติดตามตารางใดในฐานข้อมูลใดบ้าง รหัสแอปพลิเคชันจำเป็นต้องรู้หรือไม่ว่าฐานข้อมูลอย่างน้อยหนึ่งฐานข้อมูลกระจายอยู่ในหลาย ๆ เซิร์ฟเวอร์ หากไม่ได้รับการกรองคำขอในระดับใด เวลาที่จะย้ายเกินกว่าการตั้งค่าเซิร์ฟเวอร์ 1 / ฐานข้อมูล 1? การทำเช่นนี้ต้องทำกันมากแค่ไหน?
18 php  sql 

2
F # เสนออะไรที่มีประโยชน์อย่างยิ่งสำหรับการพัฒนาเว็บที่ใช้ฐานข้อมูลหรือไม่?
ในที่สุดองค์กรของฉันอัพเกรดเป็น MS Visual Studio 2010 ในปีนี้ หนึ่งในคุณสมบัติใหม่ที่ยิ่งใหญ่ที่ Visual Studio 2010 นำเสนอคือภาษาการเขียนโปรแกรม F # ฉันเข้าใจว่า F # เสนอกระบวนทัศน์การเขียนโปรแกรมที่ใช้งานได้คล้ายกับ Lisp ซึ่งแตกต่างจาก Lisp แม้ว่า F # จะถูกรวบรวมเป็นโค้ดที่ได้รับการจัดการสำหรับ. NET Framework ตอนนี้ฉันทำงานในการพัฒนาโปรแกรมประยุกต์บนเว็บที่ใช้ฐานข้อมูล ตอนนี้ฉันกำลังทำงานกับแอปพลิเคชัน n-tier พร้อมรหัส SQL ที่ส่วนท้ายและเว็บแอปพลิเคชัน AJAX C # .net ที่ส่วนหน้า ฉันต้องการทราบว่า F # เสนออะไรที่จะเป็นประโยชน์อย่างยิ่งสำหรับการพัฒนาประเภทนี้หรือไม่

4
ฐานข้อมูลนามธรรม - มันมากเกินไปหรือไม่
หลังจากได้สัมผัสกับเลเยอร์สิ่งที่เป็นนามธรรมหลายชั้นฉันเริ่มสงสัยว่าประเด็นใดที่ห้องสมุดทุกแห่งคิดค้นกระบวนทัศน์ที่แตกต่างกันของพวกเขาเองในการเข้าถึงข้อมูล การรับ DAL ใหม่รู้สึกเหมือนได้เรียนรู้ภาษาใหม่อีกครั้งเมื่อสิ่งที่ฉันต้องการทำคือการโน้มน้าวให้เลเยอร์ส่งออกแบบสอบถาม SQL ที่ฉันได้เขียนไปแล้วในหัวของฉัน และนั่นคือโดยไม่ต้องสัมผัสกับการอ่านหลังจากข้อเท็จจริง: # Exhibit A: A typical DAL rows = db(db.ips_x_users.ip_addr == '127.0.0.1') .inner_join(db.ips_x_users.user_id == db.users.id) .select(order=(db.ips_x_users.last_seen, 'desc'), limit=10) # Exhibit B: Another typical DAL rows = db.ips_x_users .join(db.users, on=db.ips_x_users.user_id == db.users.id) .filter(db.ips_x_users.ip_addr == '127.0.0.1') .select(sort=~db.ips_x_users, limit=10) # Exhibit C: A hypothetical DAL based on …
18 database  sql  api-design  dsl 

5
เหตุผลที่ต้องชอบ RIGHT JOIN มากกว่า LEFT JOIN
ถ้าฉันเข้าใจถูกต้องทุกคนRIGHT JOIN: SELECT Persons.*, Orders.* FROM Orders RIGHT JOIN Persons ON Orders.PersonID = Persons.ID สามารถแสดงเป็นLEFT JOIN: SELECT Persons.*, Orders.* FROM Persons LEFT JOIN Orders ON Persons.ID = Orders.PersonID ความคิดเห็นส่วนตัวของฉันคือเจตนาของแถลงการณ์: ก่อนได้รับ Persons จากนั้นขยาย / ทำซ้ำPersonsตามที่จำเป็นเพื่อให้ตรงกับOrders แสดงได้ดีกว่าโดยคำสั่งของPersons LEFT JOIN Ordersกว่าสั่งย้อนกลับOrders RIGHT JOIN Persons(และฉันไม่เคยใช้RIGHT JOINเป็นผล) มีสถานการณ์ใดบ้างที่RIGHT JOINเป็นที่ต้องการ? หรือมีกรณีการใช้งานที่RIGHT JOINสามารถทำสิ่งที่LEFT JOINไม่สามารถ?

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

7
ข้อดีของการใช้ตัวสร้างคิวรี SQL คืออะไร
มีข้อได้เปรียบอะไรบ้างในการใช้ตัวสร้างแบบสอบถามแทนที่จะใช้ SQL ดิบ? เช่น $q->select('*') ->from('posts') ->innerJoin('terms', 'post_id') ->where(...) VS: SELECT * FROM posts WHERE ... ฉันเห็นว่ากรอบงานจำนวนมากใช้เลเยอร์สิ่งที่เป็นนามธรรมเหล่านี้ แต่ฉันไม่เข้าใจถึงประโยชน์
17 php  sql  frameworks 

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