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

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

11
ฉันควรกำหนดความสัมพันธ์ระหว่างตารางในฐานข้อมูลหรือเพียงแค่ในรหัส?
จากประสบการณ์ของฉันหลายโครงการที่ฉันเคยอ่านในอดีตไม่ได้มีคำจำกัดความความสัมพันธ์ในฐานข้อมูล แต่พวกเขาเพียงกำหนดไว้ในซอร์สโค้ด ดังนั้นฉันสงสัยว่าอะไรคือข้อดี / ข้อเสียของการกำหนดความสัมพันธ์ระหว่างตารางในฐานข้อมูลและในซอร์สโค้ด? และคำถามที่กว้างขึ้นเกี่ยวกับคุณสมบัติขั้นสูงอื่น ๆ ในฐานข้อมูลที่ทันสมัยเช่นน้ำตก, ทริกเกอร์, ขั้นตอน ... มีบางจุดในความคิดของฉัน: ในฐานข้อมูล: แก้ไขข้อมูลจากการออกแบบ ป้องกันข้อผิดพลาดของแอปพลิเคชันซึ่งอาจทำให้ข้อมูลไม่ถูกต้อง ลดเครือข่ายไปกลับแอปพลิเคชันเมื่อทำการแทรก / อัปเดตข้อมูลเนื่องจากแอปพลิเคชันต้องทำแบบสอบถามเพิ่มเติมเพื่อตรวจสอบความถูกต้องของข้อมูล ในรหัสที่มา: ยืดหยุ่นมากขึ้น ดีกว่าเมื่อขยายไปยังหลายฐานข้อมูลเนื่องจากบางครั้งความสัมพันธ์สามารถข้ามฐานข้อมูลได้ ควบคุมความสมบูรณ์ของข้อมูลได้มากขึ้น ฐานข้อมูลไม่จำเป็นต้องตรวจสอบทุกครั้งที่แอปพลิเคชันแก้ไขข้อมูล (ความซับซ้อนสามารถเป็น O (n) หรือ O (n log n) (?)) แต่จะมอบให้กับแอปพลิเคชันแทน และฉันคิดว่าการจัดการความสมบูรณ์ของข้อมูลในแอปพลิเคชันจะทำให้เกิดข้อความแสดงข้อผิดพลาดมากกว่าการใช้ฐานข้อมูล เช่น: เมื่อคุณสร้างเซิร์ฟเวอร์ API หากคุณกำหนดความสัมพันธ์ในฐานข้อมูลและมีบางอย่างผิดปกติ (เช่นไม่มีเอนทิตีที่อ้างอิง) คุณจะได้รับ SQL Exception พร้อมข้อความ วิธีที่ง่ายคือการคืน 500 ให้กับลูกค้าว่ามีข้อผิดพลาด "เซิร์ฟเวอร์ภายใน" และลูกค้าจะไม่ทราบว่าเกิดอะไรขึ้น หรือเซิร์ฟเวอร์สามารถแยกวิเคราะห์ข้อความเพื่อหาว่ามีอะไรผิดปกติซึ่งเป็นวิธีที่น่าเกลียดและผิดพลาดในความคิดของฉัน หากคุณปล่อยให้แอปพลิเคชันจัดการกับสิ่งนี้ …

12
ทำไมฐานข้อมูลเชิงสัมพันธ์ไม่สนับสนุนข้อมูลที่ส่งคืนในรูปแบบที่ซ้อนกัน?
สมมติว่าฉันกำลังสร้างบล็อกที่ฉันต้องการโพสต์และแสดงความคิดเห็น ดังนั้นฉันจึงสร้างสองตารางตาราง 'โพสต์' ที่มีคอลัมน์ 'id' จำนวนเต็มโดยอัตโนมัติและตาราง 'ความคิดเห็น' ที่มีคีย์ต่างประเทศ 'post_id' จากนั้นฉันต้องการเรียกใช้สิ่งที่อาจเป็นคิวรีที่พบบ่อยที่สุดของฉันซึ่งก็คือเรียกโพสต์และความคิดเห็นทั้งหมด ค่อนข้างใหม่สำหรับฐานข้อมูลเชิงสัมพันธ์วิธีที่ปรากฏชัดเจนที่สุดสำหรับฉันคือการเขียนแบบสอบถามที่มีลักษณะดังนี้: SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments FROM posts WHERE id = 7 ซึ่งจะให้ ID และเนื้อหาของโพสต์ที่ฉันต้องการพร้อมกับแถวความคิดเห็นที่เกี่ยวข้องทั้งหมดที่บรรจุอย่างเป็นระเบียบในอาร์เรย์ (การแสดงแบบซ้อนที่คุณต้องการใช้ใน JSON) แน่นอนว่า SQL และฐานข้อมูลเชิงสัมพันธ์ไม่ทำงานเช่นนี้และสิ่งที่ใกล้เคียงที่สุดที่พวกเขาจะได้รับก็คือการเข้าร่วมระหว่าง 'โพสต์' และ 'ความคิดเห็น' ซึ่งจะส่งคืนข้อมูลซ้ำซ้อนที่ไม่จำเป็นจำนวนมาก ในทุก ๆ แถว) ซึ่งหมายความว่าเวลาในการประมวลผลจะถูกใช้ทั้งในฐานข้อมูลเพื่อรวมเข้าด้วยกันและบน ORM ของฉันเพื่อแยกวิเคราะห์และเลิกทำทั้งหมด แม้ว่าฉันจะสั่งให้ ORM …
46 database  sql  rdbms  query 

9
เหตุใดจึงควรใช้ระบบไฟล์สำหรับบันทึกแทน RDBMS
คำถามควรชัดเจนจากชื่อ ตัวอย่างเช่น Apache บันทึกการเข้าถึงและบันทึกข้อผิดพลาดในไฟล์แทน RDBMS ไม่ว่าจะมีการใช้งานขนาดใหญ่หรือขนาดเล็กเพียงใดก็ตาม สำหรับ RDMS เราเพียงแค่ต้องเขียนแบบสอบถาม SQL และมันจะทำงานในขณะที่สำหรับไฟล์ที่เราต้องตัดสินใจในรูปแบบเฉพาะแล้วเขียน regex หรืออาจจะแยกวิเคราะห์เพื่อจัดการกับพวกเขา และสิ่งเหล่านั้นอาจล้มเหลวในกรณีพิเศษหากไม่ได้รับการดูแลที่ดี ดูเหมือนว่าทุกคนจะชอบระบบไฟล์เพื่อบำรุงรักษาบันทึก ฉันไม่ได้ลำเอียงกับวิธีการใด ๆ เหล่านี้ แต่ฉันอยากจะรู้ว่าทำไมมันถึงมีประสบการณ์เช่นนี้ มันคือความเร็วหรือการบำรุงรักษาหรืออย่างอื่น?

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

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

3
เหตุใดจึงไม่ใช้ฐานข้อมูลเชิงวัตถุมากเท่ากับฐานข้อมูลเชิงสัมพันธ์ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันเจอระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) มากมาย แต่เมื่อเร็ว ๆ นี้ฉันใช้โหมดไฮเบอร์เนตทำให้ฉันเริ่มสงสัยว่าทำไมฐานข้อมูล Object Oriented จึงไม่เป็นที่นิยม ถ้าภาษาเชิงวัตถุเช่น Java หรือ C # ได้รับความนิยมดังนั้นทำไมระบบการจัดการฐานข้อมูลเชิงวัตถุ (OODBMS) จึงไม่เป็นที่นิยมเช่นกัน?

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 

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

4
ตารางเฉพาะเหล่านี้ต้องการคีย์ตัวแทนหรือไม่
พื้นหลัง ฉันมีตารางนี้ +-------------------------+ +------------------------+ |Airport | |Country | |-------------------------| |------------------------| |airport_code string (PK) | |country_code string (PK)| |address string | |name string | |name string | +------------------------+ +-------------------------+ +-------------------------+ |Currency | |-------------------------| |currency_code string (PK)| |name string | +-------------------------+ airport_codeเป็นรหัสสนามบินIATA (สมาคมการขนส่งทางอากาศระหว่างประเทศ) คุณสามารถดูได้ในแท็กกระเป๋าของคุณเมื่อคุณเดินทางโดยเครื่องบิน country_codeคือรหัสประเทศมาตรฐาน ISO 3166-1 A3คุณสามารถดูได้ในโอลิมปิก currency_codeคือรหัสสกุลเงิน 3 ตัวอักษรมาตรฐาน IS0 …

5
เมื่อใดที่จะไม่ใช้ ORM และชอบวิธีการจัดเก็บ?
ฉันใช้ PetaPoco micro-ORM เป็นเรื่องง่ายและปลอดภัยในการทำงานกับฐานข้อมูลโดยใช้เครื่องมือ ORM แต่สิ่งเดียวที่ฉันเกลียดคือรหัสพิเศษ ฉันเคยใส่รหัสส่วนใหญ่ในฐานข้อมูลของตัวเองและใช้คุณสมบัติ RDBMS ทั้งหมดเช่น Stored Procedure, Triggers เป็นต้นซึ่งมันถูกสร้างขึ้นเพื่อจัดการที่ดีขึ้น ฉันต้องการที่จะรู้ว่าเมื่อใดที่จะไม่ใช้ ORM มากกว่าขั้นตอนการจัดเก็บ / ทริกเกอร์และในทางกลับกัน

2
แถวใดที่เรียงลำดับคำสั่งที่หายไปโดยเรียงลำดับ?
โปรแกรมเมอร์คนหนึ่งกำลังทดสอบและเปรียบเทียบแอปพลิเคชันเดียวกันซึ่งใช้โครงสร้างฐานข้อมูลเดียวกันและข้อมูลเดียวกันเฉพาะในฐานข้อมูลที่แยกกันสองแห่งหนึ่งแห่งคือ Oracle 8 และอีกแห่งหนึ่งกับ Oracle 9 แอปรันคิวรีโดยไม่มี ORDER BYส่วนคำสั่ง เขาอ้างว่าแบบสอบถาม ORDER-BY-less ควรส่งคืนแถวตามลำดับเดียวกันในฐานข้อมูลทั้งสอง ฉันบอกเขาว่าไม่มีการรับประกันของคำสั่งแถวเดียวกันเว้นแต่ว่าคุณจะอธิบายคำสั่ง ORDER BY ฐานข้อมูลมีดัชนีและคีย์เหมือนกัน แต่แผนอธิบายแสดงให้เห็นว่าในฐานข้อมูลหนึ่งเอ็นจินกำลังใช้คีย์ของหนึ่งในตารางที่เข้าร่วมขณะที่ในอีกฐานข้อมูลหนึ่งกำลังใช้ของอีกอัน เขายืนยันว่าสภาพแวดล้อมฐานข้อมูลทั้งสองนั้นไม่เท่ากันซึ่งเป็นเพราะพวกเขามีสถิติที่แตกต่างกันเครื่องยนต์ rdbms ที่แตกต่างกัน ฯลฯ แต่ไม่ใช่เพราะฉันไม่สามารถทำซ้ำทุกดัชนีที่ฐานข้อมูลเดิมมี ฉันบอกเขาว่าเขาต้องอธิบายให้ORDER BYประโยคถ้าคำสั่งนั้นสำคัญจริงๆ คำถาม ดังนั้นฉันสามารถอธิบายเขาได้ดีกว่า: แบบสอบถามดึงข้อมูลแถวใดเมื่อคุณไม่อธิบายให้เรียงลำดับ ORDER BY และทำไมแบบสอบถามนั้นไม่ส่งคืนแถวในลำดับเดียวกัน
11 sql  oracle  rdbms 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.