ผู้ดูแลฐานข้อมูล

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

4
การสืบค้นแต่ละรายการเร็วกว่าการเข้าร่วมหรือไม่
คำถามแนวคิด: แบบสอบถามแต่ละรายการเร็วกว่าการเข้าร่วมหรือ: ฉันควรพยายามบีบข้อมูลทุกครั้งที่ฉันต้องการในฝั่งไคลเอ็นต์ให้เป็นคำสั่ง SELECT หนึ่งคำหรือใช้ให้มากที่สุดเท่าที่จะสะดวก? TL : DR : หากคิวรีที่เข้าร่วมของฉันใช้เวลานานกว่ารันคิวรีแต่ละรายการนี่เป็นความผิดของฉันหรือเป็นสิ่งที่คาดหวัง ก่อนอื่นฉันไม่ค่อยเข้าใจฐานข้อมูลมากนักดังนั้นอาจเป็นเพียงฉัน แต่ฉันสังเกตว่าเมื่อฉันต้องรับข้อมูลจากหลาย ๆ ตารางมันเร็วกว่าที่จะได้รับข้อมูลนี้จากการสืบค้นหลายรายการในตารางแต่ละรายการ มีการรวม Inner ง่ายๆ) และแก้ไขข้อมูลร่วมกันบนฝั่งไคลเอ็นต์ที่พยายามเขียนแบบสอบถามแบบซับซ้อน (ซับซ้อน) ที่ฉันสามารถรับข้อมูลทั้งหมดในแบบสอบถามเดียว ฉันพยายามใส่ตัวอย่างง่ายๆอย่างหนึ่งไว้ด้วยกัน: ซอ Fiddle การตั้งค่าสคีมา : CREATE TABLE MASTER ( ID INT NOT NULL , NAME VARCHAR2(42 CHAR) NOT NULL , CONSTRAINT PK_MASTER PRIMARY KEY (ID) ); CREATE TABLE DATA ( …

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

7
ฉันควรเก็บที่อยู่อีเมลไว้ในฐานข้อมูลประเภทใด
ฉันเข้าใจว่าที่อยู่อีเมล 254 ตัวอักษรนั้นถูกต้อง แต่การใช้งานที่ฉันได้วิจัยมักจะใช้ varchar (60) ถึง varchar (80) หรือเทียบเท่า ตัวอย่างเช่น: คำแนะนำ SQL Serverนี้ใช้ varchar (80) หรือตัวอย่างของ Oracle มีเหตุผลที่จะไม่ใช้จำนวนอักขระสูงสุด 254 ตัวหรือไม่ varchar ตามคำจำกัดความไม่ใช้ที่เก็บข้อมูลเท่าที่จำเป็นเพื่อเก็บข้อมูลหรือไม่ มีนัยยะเกี่ยวกับประสิทธิภาพ / การแลกเปลี่ยนที่สำคัญซึ่งทำให้การใช้งานจำนวนมากใช้น้อยกว่า 254 อักขระที่เป็นไปได้ทั้งหมดหรือไม่

4
ผู้ใช้ที่สร้างขึ้นสามารถเข้าถึงฐานข้อมูลทั้งหมดใน PostgreSQL โดยไม่ต้องมีการมอบสิทธิ์ใด ๆ
ฉันต้องคิดถึงบางสิ่งเกี่ยวกับการตั้งค่า PostgreSQL สิ่งที่ฉันต้องการจะทำคือสร้างฐานข้อมูลและผู้ใช้ที่แยกจากกันเพื่อให้ผู้ใช้เฉพาะสามารถเข้าถึงฐานข้อมูลที่ฉันระบุ อย่างไรก็ตามจากสิ่งที่ฉันสามารถตรวจสอบได้ผู้ใช้ที่สร้างขึ้นใด ๆ สามารถเข้าถึงฐานข้อมูลทั้งหมดโดยไม่มีการมอบสิทธิ์ใด ๆ นี่คือสิ่งที่ฉันทำบน Ubuntu Server 12.04: apt-get install postgresql sudo -u postgres createuser -DRSP mike1 (การระบุรหัสผ่านสำหรับผู้ใช้ใหม่) sudo -u postgres createdb data1 psql -h localhost -U mike1 data1 (การระบุรหัสผ่านสำหรับผู้ใช้ mike1 เพื่อล็อกอิน) ดูเหมือนว่าผู้ใช้ใหม่ "mike1" ไม่มีปัญหาในการเชื่อมต่อกับฐานข้อมูล "data1" และการสร้างตาราง ฯลฯ และสิ่งนี้โดยไม่ต้องเรียกใช้คำสั่ง GRANT เลย (และเจ้าของ "data1" คือ "postgres" เนื่องจากฉันไม่ได้ระบุ เจ้าของในขั้นตอนที่ …

3
แนวคิดของดัชนีคลัสเตอร์ในการออกแบบ DB มีความหมายเมื่อใช้ SSD หรือไม่
เมื่อออกแบบ SQL data data schema ของเซิร์ฟเวอร์และเคียวรีที่ตามมา, sprocs, views, ฯลฯ แนวคิดของดัชนีคลัสเตอร์และลำดับของข้อมูลบนดิสก์มีเหตุผลหรือไม่ที่จะต้องพิจารณาการออกแบบ DB ที่ทำให้ติดตั้งบนแพลตฟอร์ม SSD อย่างชัดเจน ? http://msdn.microsoft.com/en-us/library/aa933131(v=sql.80).aspx "ดัชนีคลัสเตอร์กำหนดลำดับทางกายภาพของข้อมูลในตาราง" บนแพลตฟอร์มดิสก์แบบฟิสิคัลการออกแบบเพื่อพิจารณาว่าเหมาะสมสำหรับฉันเมื่อสแกนฟิสิคัลข้อมูลเพื่อดึงแถว "เรียงตามลำดับ" อาจมีประสิทธิภาพมากกว่าการค้นหาในตาราง บนแพลตฟอร์ม SSD การเข้าถึงการอ่านข้อมูลทั้งหมดใช้การค้นหาที่เหมือนกัน ไม่มีแนวคิดของ "การสั่งซื้อทางกายภาพ" และการอ่านข้อมูลไม่ใช่ "ต่อเนื่อง" ในแง่ที่ว่าบิตถูกเก็บไว้ในซิลิคอนชิ้นเดียวกัน ดังนั้นในกระบวนการกำหนดฐานข้อมูลแอปพลิเคชันการพิจารณาดัชนีกลุ่มที่เกี่ยวข้องกับแพลตฟอร์มนี้คืออะไร? ความคิดเริ่มต้นของฉันคือว่าไม่ใช่เพราะแนวคิดของ "ข้อมูลที่สั่งซื้อ" ไม่ได้ใช้กับการจัดเก็บข้อมูล SSD และการค้นหา / การเพิ่มประสิทธิภาพการกู้คืน แก้ไข:ฉันรู้ว่า SQL Server จะสร้างหนึ่งฉันแค่ปรัชญาเกี่ยวกับว่ามันเหมาะสมที่จะคิดในระหว่างการออกแบบ / การเพิ่มประสิทธิภาพ

6
แนวปฏิบัติที่ดีที่สุดในช่องของบุคคลทั่วไป (ชื่อ, อีเมล, ที่อยู่, เพศ ฯลฯ ... ) [ปิด]
อะไรคือแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับความยาวและประเภทข้อมูลในฟิลด์ทั่วไปเช่น: ชื่อจริง นามสกุล ที่อยู่ อีเมล์ เพศ สถานะ เมือง ประเทศ หมายเลขโทรศัพท์ ฯลฯ ....

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

14
กำจัดรายการที่ซ้ำกันใน ListAgg (Oracle)
ก่อนหน้า Oracle 11.2 ฉันใช้ฟังก์ชันการรวมแบบกำหนดเองเพื่อต่อคอลัมน์เข้ากับแถว 11.2 เพิ่มLISTAGGฟังก์ชั่นดังนั้นฉันพยายามจะใช้มันแทน ปัญหาของฉันคือฉันต้องกำจัดรายการที่ซ้ำกันในผลลัพธ์และดูเหมือนจะไม่สามารถทำได้ นี่คือตัวอย่าง CREATE TABLE ListAggTest AS ( SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual CONNECT BY rownum<=6 ); SELECT * FROM ListAggTest; NUM1 NUM2 ---------- --------------------- 1 2 2 2 << Duplicate 2 3 3 4 4 5 5 6 6 สิ่งที่ฉันต้องการเห็นคือ: NUM1 NUM2S …

3
วิธีการทำให้ชื่อตาราง MySQL กรณีตายใน Ubuntu?
ฉันใช้ Ubuntu 13.10 และ MySQL 5.6 และฉันรู้ว่าชื่อฐานข้อมูลและชื่อตารางเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน Ubuntu (และบางสภาพแวดล้อม * nix) โดยค่าเริ่มต้น ตอนนี้ฉันต้องการให้ MySQL ทำงานเป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน Ubuntu เป็นไปได้ไหม? ถ้าใช่ฉันจะทำอย่างไร

4
มุมมองเป็นอันตรายต่อประสิทธิภาพใน PostgreSQL หรือไม่
ต่อไปนี้เป็นข้อความที่ตัดตอนมาจากหนังสือเกี่ยวกับการออกแบบ db (การออกแบบฐานข้อมูลเริ่มต้น ISBN: 0-7645-7490-6): อันตรายจากการใช้มุมมองคือการกรองคิวรีกับมุมมองโดยคาดว่าจะอ่านส่วนเล็ก ๆ ของตารางที่มีขนาดใหญ่มาก การกรองใด ๆ ที่ควรทำในมุมมองเพราะการกรองใด ๆ กับตัวเองถูกนำไปใช้หลังจากแบบสอบถามในมุมมองได้ดำเนินการเสร็จสมบูรณ์ โดยทั่วไปมุมมองมีประโยชน์สำหรับการเร่งกระบวนการพัฒนา แต่ในระยะยาวสามารถฆ่าประสิทธิภาพของฐานข้อมูลได้อย่างสมบูรณ์ ต่อไปนี้เป็นข้อความที่ตัดตอนมาจากเอกสารประกอบ PostgreSQL 9.5: การใช้มุมมองแบบเสรีเป็นสิ่งสำคัญในการออกแบบฐานข้อมูล SQL ที่ดี มุมมองช่วยให้คุณสามารถแค็ปซูลรายละเอียดของโครงสร้างของตารางของคุณซึ่งอาจเปลี่ยนแปลงได้เมื่อแอปพลิเคชันของคุณพัฒนาขึ้นหลังอินเทอร์เฟซที่สอดคล้องกัน แหล่งที่มาทั้งสองดูเหมือนจะขัดแย้งกัน ("ไม่ออกแบบด้วยมุมมอง" กับ "ทำออกแบบด้วยมุมมอง") อย่างไรก็ตามในมุมมอง PG จะดำเนินการโดยใช้ระบบกฎ ดังนั้นอาจเป็นไปได้ (และนี่คือคำถามของฉัน) การกรองใด ๆ กับมุมมองจะถูกเขียนใหม่เป็นตัวกรองภายในมุมมองทำให้เกิดการเรียกใช้แบบสอบถามแบบครั้งเดียวเทียบกับตารางต้นแบบ การตีความของฉันถูกต้องหรือไม่และ PG ได้รวมเอาส่วนคำสั่งเข้าและออกจากที่ไหน? หรือมันแยกกันทีละอัน? ตัวอย่างสั้น ๆ ที่มีอยู่ในตัวถูกต้อง (คอมไพล์ได้)?

3
วิธีการให้สิทธิ์พิเศษแก่ผู้ใช้?
ฉันสร้างผู้ใช้และให้สิทธิ์แก่ผู้ใช้ 1 `grant all privileges on db1.* to user1@'%' with grant option; ฉันกำลังใช้ mysql workbench เพื่อนำเข้าฐานข้อมูลของฉัน ขณะที่อิมพอร์ตดัมพ์ไปยังฐานข้อมูล db1 ข้อผิดพลาดเกิดขึ้นโดยระบุว่า ERROR 1227 (42000) at line 49: Access denied; you need (at least one of) the SUPER privilege(s) for this operation ในที่ทิ้งตารางทั้งหมดจะถูกนำเข้าเรียบร้อยแล้ว แต่เกิดข้อผิดพลาดในขณะที่นำเข้ารูทีนไปยังฐานข้อมูล มีอะไรผิดปกติกับสิทธิพิเศษที่ฉันมอบให้กับผู้ใช้ 1 หรือไม่ โปรดให้คำแนะนำ.

3
จะยกเลิกการเชื่อมต่อทั้งหมดไปยังฐานข้อมูลเฉพาะโดยไม่หยุดเซิร์ฟเวอร์ได้อย่างไร
ฉันต้องการยกเลิกการเชื่อมต่อทั้งหมด (เซสชัน) ที่เปิดอยู่ในขณะนี้ไปยังฐานข้อมูล PostgreSQL เฉพาะ แต่ไม่ต้องรีสตาร์ทเซิร์ฟเวอร์หรือยกเลิกการเชื่อมต่อกับฐานข้อมูลอื่น ฉันจะทำสิ่งนั้นได้อย่างไร

6
มีการ จำกัด จำนวนฐานข้อมูลที่คุณสามารถวางบนเซิร์ฟเวอร์ SQL เครื่องเดียวหรือไม่?
ฉันกำลังตั้งค่าระบบ SaaS ที่เราวางแผนที่จะให้ฐานข้อมูลลูกค้าของพวกเขาแต่ละคน ระบบได้รับการตั้งค่าไว้แล้วเพื่อให้เราสามารถขยายไปยังเซิร์ฟเวอร์เพิ่มเติมได้อย่างง่ายดายหากโหลดมากเกินไป เราหวังว่าจะมีลูกค้าเป็นพันหรือเป็นหมื่น คำถาม มีข้อ จำกัด ในทางปฏิบัติเกี่ยวกับจำนวนฐานข้อมูลขนาดเล็กที่คุณสามารถ / ควรมีใน SQL Server เดียวหรือไม่? มันมีผลต่อประสิทธิภาพของเซิร์ฟเวอร์หรือไม่ มันจะดีกว่าหรือถ้ามี 10,000 ฐานข้อมูลละ 100 MB หรือหนึ่งฐานข้อมูล 1 TB ข้อมูลเพิ่มเติม เมื่อฉันพูดว่า "ฐานข้อมูลไมโคร" ฉันไม่ได้หมายถึง "ไมโคร" ฉันแค่หมายถึงว่าเรากำลังตั้งเป้าให้ลูกค้าหลายพันรายดังนั้นแต่ละฐานข้อมูลจะเป็นหนึ่งในพันหรือน้อยกว่าของพื้นที่จัดเก็บข้อมูลทั้งหมด ในความเป็นจริงแต่ละฐานข้อมูลจะอยู่ที่ประมาณ 100MB โดยขึ้นอยู่กับจำนวนการใช้งานที่ได้รับ เหตุผลหลักในการใช้ 10,000 ฐานข้อมูลเพื่อความยืดหยุ่น ความจริงก็คือ V1 ของระบบมีฐานข้อมูลเดียวและเรามีช่วงเวลาที่อึดอัดเมื่อฐานข้อมูลกำลังถูกบีบให้โหลด มันกำลังทำให้เครียด CPU, หน่วยความจำ, I / O - ทั้งหมดข้างต้น แม้ว่าเราจะแก้ไขปัญหาเหล่านั้นพวกเขาก็ทำให้เราตระหนักว่าในบางจุดแม้จะมีการจัดทำดัชนีที่ดีที่สุดในโลกหากเราประสบความสำเร็จอย่างที่เราหวังว่าจะเป็นเราก็ไม่สามารถใส่ข้อมูลทั้งหมดของเราได้ ฐานข้อมูล ดังนั้นสำหรับ V2 …

1
ข้อ จำกัด การปรับขนาดของ PostgreSQL และ MySQL
ฉันได้ยินมาว่าประสิทธิภาพของฐานข้อมูลเชิงสัมพันธ์ที่ไม่มีส่วนแบ่งเช่น MySQL หรือ PostgreSQL "แตก" เกินกว่า 10 TB ฉันสงสัยว่าข้อ จำกัด ดังกล่าวมีอยู่เนื่องจากไม่มีใครมากับ Netezza, Greenplum หรือ Vertica ฯลฯ อย่างไรก็ตามฉันอยากจะถามว่าใครที่นี่มีการอ้างอิงถึงรายงานการวิจัยหรือกรณีศึกษาอย่างเป็นทางการที่มีการ จำกัด ปริมาณเหล่านี้หรือไม่

9
ขอให้ไม่ใช้ธุรกรรมและใช้วิธีแก้ปัญหาเพื่อจำลองสถานการณ์หนึ่ง
ฉันได้พัฒนา T-SQL มาหลายปีแล้วและกำลังขุดอยู่เสมอและเรียนรู้ทุกอย่างที่เกี่ยวกับภาษาได้อย่างต่อเนื่อง ฉันเพิ่งเริ่มทำงานกับ บริษัท ใหม่และได้รับสิ่งที่ฉันคิดว่าเป็นข้อเสนอแนะแปลก ๆ เกี่ยวกับการทำธุรกรรม ไม่เคยใช้พวกเขา ใช้วิธีแก้ปัญหาที่จำลองธุรกรรมแทน นี่มาจาก DBA ของเราที่ทำงานในฐานข้อมูลเดียวกับธุรกรรมจำนวนมากและต่อมามีการบล็อกจำนวนมาก ฐานข้อมูลที่ฉันทำงานเป็นหลักไม่ประสบปัญหานี้และฉันเห็นว่ามีการใช้ธุรกรรมในอดีต ฉันเข้าใจว่าการปิดกั้นเป็นสิ่งที่คาดว่าจะเกิดขึ้นเนื่องจากเป็นไปตามปกติของพวกเขาและถ้าคุณสามารถหลีกเลี่ยงได้โดยไม่ต้องใช้สิ่งใดสิ่งหนึ่ง แต่ฉันมีหลายครั้งที่แต่ละคำสั่งต้องทำงานสำเร็จ หากล้มเหลวพวกเขาทั้งหมดจะต้องล้มเหลวในการกระทำ ฉันรักษาขอบเขตการทำธุรกรรมของฉันให้แคบที่สุดเสมอใช้ร่วมกับ SET XACT_ABORT ON เสมอและอยู่ในการทดลอง / จับ ตัวอย่าง: CREATE SCHEMA someschema; GO CREATE TABLE someschema.tableA (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColA VARCHAR(10) NOT NULL ); GO CREATE TABLE someschema.tableB (id …

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