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

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

19
เหตุใดการตั้งชื่อคอลัมน์คีย์หลักของตาราง“ Id” จึงถือว่าไม่เหมาะสม [ปิด]
ครู t-sql ของฉันบอกเราว่าการตั้งชื่อคอลัมภ์ PK "Id" ของเรานั้นถือว่าเป็นการฝึกที่ไม่ดีโดยไม่มีคำอธิบายใด ๆ เพิ่มเติม เหตุใดการตั้งชื่อคอลัมน์คอลัมน์ "PK" ของตาราง PK จึงถือว่าไม่เหมาะสม
210 sql  naming  tsql 

14
“ อย่าทำรหัสอะไรที่คุณสามารถทำให้เซิร์ฟเวอร์ SQL ทำงานได้ดีสำหรับคุณ” - นี่เป็นสูตรสำหรับการออกแบบที่ไม่ดีหรือไม่?
มันเป็นความคิดที่ฉันได้ยินซ้ำแล้วซ้ำอีกในหลาย ๆ ที่ บางคนยอมรับมากหรือน้อยว่าเมื่อพยายามแก้ปัญหาอย่างหมดจดใน SQL เกินระดับความซับซ้อนคุณควรจะจัดการมันในรหัส เหตุผลเบื้องหลังแนวคิดนี้ก็คือในกรณีส่วนใหญ่เอ็นจิ้นฐานข้อมูลจะทำงานได้ดีขึ้นในการค้นหาวิธีที่มีประสิทธิภาพสูงสุดในการทำงานให้สำเร็จมากกว่าที่คุณคิดในโค้ด โดยเฉพาะอย่างยิ่งเมื่อพูดถึงสิ่งต่าง ๆ เช่นการทำให้ผลลัพธ์มีเงื่อนไขในการดำเนินการกับข้อมูล เนื้อหาที่มีเครื่องยนต์ที่ทันสมัยอย่างมีประสิทธิภาพ JIT'ing + แคชรุ่นที่รวบรวมคำค้นหาของคุณมันจะทำให้รู้สึกบนพื้นผิว คำถามคือการใช้ประโยชน์จากเอนจินฐานข้อมูลของคุณด้วยวิธีนี้หรือไม่นั้นเป็นวิธีปฏิบัติที่ไม่ดีในการออกแบบ (และสาเหตุ) เส้นจะเบลอมากขึ้นเมื่อตรรกะทั้งหมดอยู่ในฐานข้อมูลและคุณเพียงแค่กดผ่าน ORM

13
เหตุใดจึงต้องใช้ฐานข้อมูลแทนที่จะบันทึกข้อมูลลงดิสก์
แทนที่จะเป็นฐานข้อมูลฉันเพิ่งจัดลำดับข้อมูลของฉันไปยัง JSON บันทึกและโหลดลงดิสก์เมื่อจำเป็น การจัดการข้อมูลทั้งหมดถูกสร้างขึ้นในโปรแกรมซึ่งเร็วกว่าและง่ายกว่าการใช้คิวรี SQL ด้วยเหตุนี้ฉันจึงไม่เคยเข้าใจว่าทำไมฐานข้อมูลจึงมีความจำเป็น ทำไมหนึ่งควรใช้ฐานข้อมูลแทนการบันทึกข้อมูลลงดิสก์
193 database  sql  mysql  nosql 

17
เป็นการดีที่จะมีคีย์หลักจำนวนเต็ม autoincrement เสมอหรือไม่
ในฐานข้อมูลของฉันฉันมักจะติดนิสัยที่จะมีคีย์หลักจำนวนเต็มที่เพิ่มขึ้นอัตโนมัติพร้อมชื่อidสำหรับทุกตารางที่ฉันทำเพื่อที่ฉันจะได้ค้นหาที่ไม่ซ้ำสำหรับแถวใดแถวหนึ่ง นี่ถือว่าเป็นความคิดที่ไม่ดีหรือไม่? มีข้อเสียใด ๆ ในการทำเช่นนี้? บางครั้งฉันก็มีดัชนีหลายอย่างเช่นid, profile_id, subscriptionsที่idเป็นตัวระบุเฉพาะการprofile_idเชื่อมโยงไปยังต่างประเทศidของProfileตาราง ฯลฯ หรือมีสถานการณ์ที่คุณไม่ต้องการเพิ่มเขตข้อมูลดังกล่าวหรือไม่

14
มีเหตุผลทางเทคนิคใด ๆ หรือไม่ในการเขียนโปรแกรมรูปแบบวันที่เริ่มต้นคือ YYYYMMDD และไม่ใช่อย่างอื่น?
มีเหตุผลด้านวิศวกรรมใด ๆ ทำไมมันเป็นเช่นนั้น? ฉันสงสัยในกรณีของ RDBMS ว่ามีบางอย่างเกี่ยวกับการแสดงเนื่องจาก "YEAR" มีความเฉพาะเจาะจงมากกว่า "MONTH" เช่นคุณมีเพียงหนึ่งปี 2000 แต่ทุกปีมี "มกราคม" ซึ่งจะทำให้ง่ายขึ้น / เร็วขึ้นในการกรอง / เรียงลำดับบางสิ่งบางอย่างในปีแรกและนั่นเป็นสาเหตุที่ปีนี้มาก่อน แต่ฉันไม่รู้ว่ามันสมเหตุสมผลจริงหรือ ... มีเหตุผลอะไรบ้าง?

4
เหตุใดฐานข้อมูล noSQL จึงสามารถปรับขนาดได้มากกว่า SQL
เมื่อเร็ว ๆ นี้ฉันอ่านมากเกี่ยวกับ noSQL DBMSs ผมเข้าใจCAP ทฤษฎีบท , กรดกฎBASEกฎและทฤษฎีพื้นฐาน แต่ไม่พบทรัพยากรใด ๆ ว่าทำไม noSQL จึงสามารถปรับขนาดได้ง่ายกว่า RDBMS (เช่นในกรณีของระบบที่ต้องใช้เซิร์ฟเวอร์ DB จำนวนมาก) ฉันเดาว่าการรักษาข้อ จำกัด และกุญแจต่างประเทศต้องใช้ทรัพยากรและเมื่อมีการกระจาย DBMS มันก็ซับซ้อนกว่ามาก แต่ฉันคาดหวังว่าจะมีมากกว่านี้ ใครช่วยกรุณาอธิบายว่า noSQL / SQL ส่งผลกระทบต่อความสามารถในการปรับขนาดได้หรือไม่?
98 sql  nosql  scalability 

10
เหตุใด“ เลือก * จากตาราง” จึงถือว่าไม่เหมาะสม
เมื่อวานนี้ฉันกำลังคุยกับโปรแกรมเมอร์ "งานอดิเรก" (ฉันเป็นโปรแกรมเมอร์มืออาชีพ) เราเจองานบางอย่างของเขาและเขาบอกว่าเขามักจะค้นหาคอลัมน์ทั้งหมดในฐานข้อมูลของเขา (แม้ใน / ในเซิร์ฟเวอร์การผลิต / รหัส) ฉันพยายามโน้มน้าวเขาไม่ให้ทำ แต่ก็ยังไม่ประสบความสำเร็จ ในความคิดของฉันโปรแกรมเมอร์ควรถามสิ่งที่จำเป็นจริง ๆ เพื่อประโยชน์ของ "prettiness" ประสิทธิภาพและปริมาณการใช้งาน ฉันเข้าใจผิดกับมุมมองของฉัน?
96 database  sql  mysql  bad-code 

9
เคยใช้รายการในฐานข้อมูลเชิงสัมพันธ์หรือไม่?
ฉันพยายามออกแบบฐานข้อมูลเพื่อให้สอดคล้องกับแนวคิดโครงการและพบกับสิ่งที่ดูเหมือนว่าจะเป็นประเด็นถกเถียงกันอย่างถึงพริกถึงขิง ฉันได้อ่านบทความไม่กี่คำและ Stack Overflow บางคำตอบที่ระบุว่าไม่เคย (หรือเกือบจะไม่เคย) ตกลงในการจัดเก็บรายการ ID หรือสิ่งที่ชอบในฟิลด์ - ข้อมูลทั้งหมดควรมีความสัมพันธ์ ฯลฯ อย่างไรก็ตามปัญหาที่ฉันพบคือฉันกำลังพยายามมอบหมายงาน ผู้คนจะสร้างงานมอบหมายให้คนหลายคนและมันจะบันทึกลงในฐานข้อมูล แน่นอนถ้าฉันบันทึกงานเหล่านี้ทีละรายการใน "บุคคล" ฉันจะต้องมีคอลัมน์ "TaskID" หลอกตานับสิบ ๆ ตัวและจัดการแบบไมโครเพราะจะมีงานมอบหมายให้บุคคลหนึ่งถึง 0 ถึง 100 จากนั้นอีกครั้งถ้าฉันบันทึกงานในตาราง "งาน" ฉันจะต้องมีคอลัมน์ "PersonID" หลอกตานับสิบ ๆ ตัวและจัดการกับมันแบบไมโคร - ปัญหาเช่นเดียวกับเมื่อก่อน สำหรับปัญหาเช่นนี้จะเป็นการดีไหมที่จะบันทึกรายการ ID ที่ใช้รูปแบบเดียวหรืออีกรูปแบบหนึ่งหรือฉันไม่คิดวิธีอื่นที่ทำได้โดยไม่ต้องทำลายหลักการ?

13
มันถือว่าเป็นรูปแบบการต่อต้านการเขียน SQL ในซอร์สโค้ดหรือไม่?
มันถือว่าเป็นรูปแบบการต่อต้านการ hardcode SQL ในแอปพลิเคชันเช่นนี้หรือไม่: public List<int> getPersonIDs() { List<int> listPersonIDs = new List<int>(); using (SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings["Connection"].ConnectionString)) using (SqlCommand command = new SqlCommand()) { command.CommandText = "select id from Person"; command.Connection = connection; connection.Open(); SqlDataReader datareader = command.ExecuteReader(); while (datareader.Read()) { listPersonIDs.Add(Convert.ToInt32(datareader["ID"])); } } return listPersonIDs; } …
87 c#  sql 

12
SQL: สตริงว่างกับค่า NULL
ฉันรู้ว่าหัวข้อนี้ขัดแย้งกันเล็กน้อยและมีบทความ / ความคิดเห็นมากมายลอยอยู่ในอินเทอร์เน็ต โชคไม่ดีที่พวกเขาส่วนใหญ่คิดว่าบุคคลนั้นไม่รู้ว่าความแตกต่างระหว่าง NULL และสตริงว่างคืออะไร ดังนั้นพวกเขาจึงบอกเล่าเรื่องราวเกี่ยวกับผลลัพธ์ที่น่าประหลาดใจด้วยการรวม / สรุปรวมและโดยทั่วไปจะทำบทเรียน SQL ขั้นสูงเพิ่มเติม โดยการทำเช่นนี้พวกเขาพลาดจุดทั้งหมดและไม่มีประโยชน์สำหรับฉัน ดังนั้นหวังว่าคำถามนี้และคำตอบทั้งหมดจะย้ายไปข้างหน้าเล็กน้อย สมมติว่าฉันมีตารางที่มีข้อมูลส่วนบุคคล (ชื่อ, วันเกิด, ฯลฯ ) โดยที่หนึ่งในคอลัมน์คือที่อยู่อีเมลที่มีประเภท varchar เราคิดว่าด้วยเหตุผลบางคนบางคนอาจไม่ต้องการให้ที่อยู่อีเมล เมื่อแทรกข้อมูลดังกล่าว (ไม่มีอีเมล) ลงในตารางมีสองตัวเลือกที่ใช้ได้: ตั้งค่าเซลล์เป็น NULL หรือตั้งค่าเป็นสตริงว่าง ('') สมมติว่าฉันทราบถึงผลกระทบทางเทคนิคทั้งหมดของการเลือกโซลูชันหนึ่งมากกว่าโซลูชันอื่นและฉันสามารถสร้างแบบสอบถาม SQL ที่ถูกต้องสำหรับสถานการณ์ใดสถานการณ์หนึ่ง ปัญหาคือแม้เมื่อค่าทั้งสองแตกต่างกันในระดับเทคนิคพวกเขาจะเหมือนกันในระดับตรรกะ หลังจากดู NULL และ '' ฉันได้ข้อสรุปเดียว: ฉันไม่รู้ที่อยู่อีเมลของผู้ชายคนนั้น ไม่ว่าฉันจะพยายามมากแค่ไหน ฉันไม่สามารถส่งอีเมลโดยใช้ NULL หรือสตริงว่างเปล่าได้ดังนั้นเซิร์ฟเวอร์ SMTP ส่วนใหญ่ก็เห็นด้วยกับเหตุผลของฉัน ดังนั้นฉันมักจะใช้ค่า NULL ที่ฉันไม่ทราบค่าและพิจารณาสตริงว่างเปล่าเป็นสิ่งที่ไม่ดี หลังจากการพูดคุยอย่างเข้มข้นกับเพื่อนร่วมงานฉันมาด้วยคำถามสองข้อ: ฉันถูกสมมติว่าการใช้สตริงว่างเปล่าสำหรับค่าที่ไม่รู้จักทำให้ฐานข้อมูล "โกหก" …
72 design  database  sql  strings  null 

6
เหตุใดจึงเลือกก่อนหน้าจากในแบบสอบถาม SQL [ปิด]
นี่เป็นสิ่งที่รบกวนฉันมากที่โรงเรียน ห้าปีที่แล้วเมื่อฉันเรียนรู้ SQL ฉันมักจะสงสัยว่าทำไมเราระบุเขตข้อมูลที่เราต้องการและจากที่ที่เราต้องการ ตามความคิดของฉันเราควรเขียน: From Employee e Select e.Name เหตุใดจึงต้องพูดตามนี้ Select e.Name -- Eeeeek, what does e mean? From Employee e -- Ok, now I know what e is ฉันใช้เวลาหลายสัปดาห์เพื่อทำความเข้าใจกับ SQL และฉันรู้ว่าองค์ประกอบจำนวนมากถูกใช้ไปโดยลำดับที่ไม่ถูกต้อง มันเหมือนกับการเขียนใน C #: string name = employee.Name; var employee = this.GetEmployee(); ดังนั้นฉันคิดว่ามันมีเหตุผลทางประวัติศาสตร์ ทำไม?
67 sql  history  syntax 

15
เพื่อนร่วมงานเปลี่ยนชื่อข้อความค้นหาทั้งหมดของฉัน [ปิด]
ฉันไม่รู้ว่าฉันควรจะหงุดหงิดมากหรืออะไร ฉันสร้างแบบสอบถามมากกว่า 300 รายการสำหรับฐานข้อมูลขนาดใหญ่และพัฒนาแผนการตั้งชื่อเพื่อที่ฉันจะได้ค้นพบในภายหลัง ไม่มีใครในออฟฟิศของฉันรู้วิธีสร้างคิวรี แต่ฉันเข้ามาเมื่อวานนี้เพื่อพบว่าพวกเขาทั้งหมดถูกเปลี่ยนชื่อ ตอนนี้ฉันมีเวลายากมากในการค้นหาสิ่งต่าง ๆ และฉันพยายามที่จะคิดออกว่าจะทำอย่างไร ฉันพูดกับคนที่รับผิดชอบและเธอก็วัดผลทุกสิ่ง เธอบอกว่าเธอเปลี่ยนชื่อพวกเขาเพื่อให้เธอสามารถค้นหาได้ง่ายขึ้น น่าเสียดายที่ฉันเป็นคนเดียวที่รู้วิธีสร้างแก้ไขและดูแลรักษาและเหตุผลเดียวที่เธอต้องการค้นหาพวกเขาคือการทดสอบข้อความค้นหา อนุสัญญาการตั้งชื่อใหม่ไม่สมเหตุสมผลเลยและฉันรู้สึกว่าเราก้าวไปข้างหลังในกระบวนการพัฒนา สิ่งที่ฉันพยายามคิดก็คือ: 1) ฉันทำมากไปไหม? 2) วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร? ฉันเกลียดที่จะพูดถึงเรื่องนี้กับเจ้านายของฉัน แต่หลังจากพูดคุยกับเพื่อนร่วมงานของฉันเมื่อวานนี้ฉันสามารถบอกได้ว่าเธอรู้สึกเหมือนเธอไม่ได้ทำอะไรผิด
63 database  sql  access 

6
นี่เป็นวิธีที่ไร้สาระในการสร้างโครงสร้าง DB หรือไม่หรือฉันขาดอะไรไปเลย?
ฉันทำงานกับฐานข้อมูลเชิงสัมพันธ์และคิดว่าฉันเข้าใจแนวคิดพื้นฐานของการออกแบบสคีมาที่ดีพอสมควร ฉันเพิ่งได้รับมอบหมายให้ทำโครงการที่ DB ออกแบบโดยที่ปรึกษาที่ได้รับค่าตอบแทนสูง โปรดแจ้งให้เราทราบว่าลำไส้ของฉัน - "WTF ??!?" - ได้รับการรับประกันหรือเป็นชายผู้นี้ที่เป็นอัจฉริยะที่เขาใช้งานนอกโลกของฉันหรือไม่? DB ในคำถามคือแอปที่ใช้ในการป้อนคำขอจากพนักงาน เพียงดูที่ส่วนเล็ก ๆ ของมันคุณมีข้อมูลเกี่ยวกับผู้ใช้และข้อมูลเกี่ยวกับการร้องขอ ฉันจะออกแบบเช่นนี้เพื่อ: ตารางผู้ใช้: UserID (primary Key, indexed, no dupes) FirstName LastName Department ขอโต๊ะ RequestID (primary Key, indexed, no dupes) <...> various data fields containing request details UserID -- foreign key associated with User table ง่ายใช่มั้ย ที่ปรึกษาออกแบบแบบนี้ …
61 database  sql  schema 

14
ทำไมกลไกการป้องกันการฉีด SQL ถึงวิวัฒนาการไปในทิศทางของการใช้คิวรีแบบพารามิเตอร์
วิธีที่ฉันเห็นการโจมตีด้วยการฉีด SQL สามารถป้องกันได้โดย: คัดกรองกรองเข้ารหัสการป้อนข้อมูลอย่างระมัดระวัง (ก่อนแทรกลงใน SQL) การใช้คำสั่งที่เตรียมไว้ / แบบสอบถามแบบใช้พารามิเตอร์ ฉันคิดว่ามีข้อดีข้อเสียสำหรับแต่ละข้อ แต่เหตุใด # 2 จึงถูกถอดออกและได้รับการพิจารณาว่ามีวิธีการป้องกันการฉีดยามากหรือน้อย มันปลอดภัยกว่าและมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลงหรือมีปัจจัยอื่น ๆ อีกหรือไม่? ตามที่ฉันเข้าใจถ้าใช้ # 1 อย่างถูกต้องและข้อควรระวังทั้งหมดได้รับการดูแลมันจะมีประสิทธิภาพเท่ากับ # 2 ฆ่าเชื้อโรคกรองและเข้ารหัส มีความสับสนในส่วนของฉันระหว่างสิ่งที่เป็นฆ่าเชื้อ , การกรองและการเข้ารหัสความหมาย ฉันจะบอกว่าสำหรับวัตถุประสงค์ของฉันทั้งหมดข้างต้นสามารถพิจารณาตัวเลือก 1. ในกรณีนี้ผมเข้าใจว่าการฆ่าเชื้อและการกรองมีศักยภาพในการแก้ไขหรือยกเลิกการป้อนข้อมูลในขณะที่การเข้ารหัสจะเก็บรักษาข้อมูลตามที่เป็นแต่ถอดรหัส อย่างถูกต้องเพื่อหลีกเลี่ยงการโจมตีของการฉีด ฉันเชื่อว่าการหลีกเลี่ยงข้อมูลถือได้ว่าเป็นวิธีการเข้ารหัส พารามิเตอร์การสืบค้นเทียบกับการเข้ารหัสห้องสมุด มีคำตอบที่แนวคิดของparameterized queriesและencoding librariesที่ได้รับการปฏิบัติแทนกันได้ แก้ไขฉันถ้าฉันผิด แต่ฉันรู้สึกว่าแตกต่างกัน ความเข้าใจของฉันคือว่าencoding librariesไม่ว่าพวกเขาจะมีศักยภาพในการปรับเปลี่ยน SQL "โปรแกรม" ได้ดีเพียงใดเพราะพวกเขากำลังทำการเปลี่ยนแปลง SQL เองก่อนที่มันจะถูกส่งไปยัง RDBMS Parameterized queries ในอีกทางหนึ่งส่งโปรแกรม SQL …

8
การใช้ฐานข้อมูล NoSQL ทำไม่ได้กับชุดข้อมูลขนาดใหญ่ที่คุณต้องการค้นหาตามเนื้อหาหรือไม่?
ฉันได้เรียนรู้เกี่ยวกับฐานข้อมูล NoSQL เป็นเวลาหนึ่งสัปดาห์แล้ว ฉันเข้าใจถึงข้อดีของฐานข้อมูล NoSQL และกรณีการใช้งานจำนวนมากที่ยอดเยี่ยม แต่บ่อยครั้งที่คนเขียนบทความราวกับว่า NoSQL สามารถแทนที่ฐานข้อมูลเชิงสัมพันธ์ได้ และมีจุดที่ฉันไม่สามารถไปรอบ ๆ : ฐานข้อมูล NoSQL เป็นที่เก็บคีย์ - ค่า (มัก) แน่นอนว่าเป็นไปได้ที่จะเก็บทุกอย่างไว้ในที่เก็บคีย์ - ค่า (โดยการเข้ารหัสข้อมูลใน JSON, XML, อะไรก็ตาม) แต่ปัญหาที่ฉันเห็นคือคุณต้องได้รับข้อมูลจำนวนหนึ่งที่ตรงกับเกณฑ์เฉพาะในหลาย ๆ ใช้กรณี ในฐานข้อมูล NoSQL คุณมีเกณฑ์เดียวคุณสามารถค้นหาได้อย่างมีประสิทธิภาพ - กุญแจ ฐานข้อมูลเชิงสัมพันธ์ได้รับการปรับปรุงเพื่อค้นหาค่าใด ๆ ในแถวข้อมูลได้อย่างมีประสิทธิภาพ ดังนั้นฐานข้อมูล NoSQL จึงไม่ใช่ทางเลือกสำหรับการเก็บข้อมูลที่ต้องการค้นหาเนื้อหาของพวกเขา หรือฉันเข้าใจผิดบางอย่าง? ตัวอย่าง: คุณต้องจัดเก็บข้อมูลผู้ใช้สำหรับ webshop ในฐานข้อมูลเชิงสัมพันธ์คุณเก็บผู้ใช้ทุกคนเป็นแถวในusersตารางโดยมี ID, ชื่อ, ประเทศของเขา ฯลฯ ในฐานข้อมูล NoSQL …

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