คำถามติดแท็ก best-practices

แนวปฏิบัติที่ดีที่สุดได้รับการยอมรับโดยทั่วไปและไม่เป็นทางการว่าเป็นวิธีการและกระบวนการที่ได้รับการแสดงเมื่อเวลาผ่านไปเพื่อให้เหนือกว่าผู้ที่ได้รับจากวิธีการอื่น

6
เมื่อใดที่ฉันควรใช้ข้อ จำกัด ที่ไม่ซ้ำกันแทนที่จะเป็นดัชนีที่ไม่ซ้ำกัน
เมื่อฉันต้องการให้คอลัมน์มีค่าที่แตกต่างฉันสามารถใช้ข้อ จำกัด ได้ create table t1( id int primary key, code varchar(10) unique NULL ); go หรือฉันสามารถใช้ดัชนีเฉพาะ create table t2( id int primary key, code varchar(10) NULL ); go create unique index I_t2 on t2(code); คอลัมน์ที่มีข้อ จำกัด เฉพาะดูเหมือนจะเป็นตัวเลือกที่ดีสำหรับดัชนีเฉพาะ มีเหตุผลใดบ้างที่ทราบว่าใช้ข้อ จำกัด ที่เป็นเอกลักษณ์และไม่ใช้ดัชนีที่ไม่ซ้ำกันแทน

19
นักพัฒนาควรจะสามารถสืบค้นฐานข้อมูลการผลิตได้หรือไม่
นักพัฒนาควรได้รับอนุญาตให้สืบค้นSELECTฐานข้อมูลการผลิต( / อ่านอย่างเดียว) หรือไม่? สถานที่ก่อนหน้านี้ที่ฉันทำงานทีมพัฒนามีdb_datareaderบทบาท; ที่ฉันทำงานอยู่ตอนนี้ทีมพัฒนาไม่สามารถเชื่อมต่อกับอินสแตนซ์การผลิตได้ หนึ่งในอินสแตนซ์ทดสอบคือสำเนาของการผลิตที่คืนค่าจากการสำรองการผลิตสัปดาห์ละครั้งดังนั้นจึงไม่มีปัญหาใด ๆ กับนักพัฒนาที่เห็นข้อมูลจริง มีเหตุผลที่ดีอะไรบ้างที่ไม่อนุญาตให้นักพัฒนาทำการสืบค้นการผลิต (ยกเว้นเพียงแค่ไม่ต้องการให้พวกเขาเข้าถึงการอ่านข้อมูลที่ละเอียดอ่อน)?

5
ให้สิทธิ์การเข้าถึงตารางทั้งหมดสำหรับผู้ใช้
ฉันใหม่สำหรับ Postgres และพยายามย้ายฐานข้อมูล MySQL ของเราไป ใน MySQL ฉันสามารถให้สิทธิ์SELECT, UPDATE, INSERTและDELETEสิทธิพิเศษในการใช้สิทธิพิเศษต่ำและเปิดใช้ทุนเหล่านั้นเพื่อนำไปใช้กับตารางทั้งหมดในฐานข้อมูลที่ระบุ ฉันต้องหายไปบางอย่างใน Postgres เพราะดูเหมือนว่าฉันต้องให้สิทธิ์เหล่านั้นสำหรับแต่ละตารางทีละครั้ง ด้วยฐานข้อมูลจำนวนมากและหลายร้อยตารางต่อฐานข้อมูลที่ดูเหมือนว่าเป็นงานที่น่ากลัวเพียงเพื่อออกจากพื้นดิน นอกจากนี้เมื่อฐานข้อมูลทำงานอยู่การเพิ่มตารางเกิดขึ้นบ่อยครั้งพอที่ฉันไม่ต้องการให้สิทธิ์ในแต่ละครั้งเว้นแต่จะจำเป็นจริงๆ สิ่งนี้สำเร็จได้ดีที่สุดอย่างไร

19
การเพิ่มส่วนนำหน้า 'tbl' ลงในชื่อตารางเป็นปัญหาหรือไม่
ฉันดูวิดีโอบางส่วน Brent Ozar ( เช่นนี้ตัวอย่างเช่น ) และเขาก็แสดงให้เห็นไม่ prefixing ตารางที่มีหรือ‘tbl’‘TBL’ บนอินเทอร์เน็ตฉันพบว่ามีบางบล็อกที่บอกว่าไม่ได้เพิ่มอะไรลงไปในเอกสารประกอบและนอกจากนี้“ มันใช้เวลาในการอ่านนานกว่า” คำถามและข้อควรพิจารณา มันเป็นปัญหาหรือไม่? เพราะฉันเติมตารางด้วย 'tbl' ตั้งแต่งาน dba แรกของฉัน (DBA อาวุโสบอกให้ฉันทำแบบนั้นกับองค์กร) นี่เป็นสิ่งที่ฉันต้องกำจัดหรือไม่ ฉันทำการทดสอบคัดลอกตารางที่มีขนาดใหญ่มากและให้คำนำหน้า 'tbl' ในขณะที่รักษาอีกอันไว้โดยไม่มีมันและฉันไม่ได้สังเกตเห็นปัญหาเรื่องประสิทธิภาพใด ๆ

3
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะสร้างธุรกรรมอยู่เสมอ?
มันเป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะสร้างธุรกรรมอยู่เสมอ? ยกตัวอย่างเช่นมันเป็นวิธีที่ดีในการสร้างการทำธุรกรรมเพื่ออะไร แต่คนที่เรียบง่ายSELECT? ต้นทุนในการสร้างธุรกรรมเมื่อไม่จำเป็นจริงๆคืออะไร? แม้ว่าคุณจะใช้ระดับการแยกเช่นREAD UNCOMMITTEDนั้นมันเป็นการปฏิบัติที่ไม่ดีหรือไม่?

12
DBA จะเป็น 'โปรแกรมเมอร์ที่เป็นมิตร' มากขึ้นได้อย่างไร?
คำตอบและความคิดเห็นเกี่ยวกับรุ่น dba.seและprogrammers.se รุ่นของคำถาม"สิ่งที่ขัดแย้งกับหรือสำหรับการวางตรรกะของโปรแกรมประยุกต์ในชั้นฐานข้อมูลหรือไม่" มีการเปิดเผยเกี่ยวกับการแบ่งระหว่าง DBA และโปรแกรมเมอร์ในที่ทำงานบางแห่ง DBA ทำอะไรได้บ้างเพื่อให้ทำงานได้ดีขึ้นกับโปรแกรมเมอร์ในประเด็นเช่นนี้ เราควร: ศึกษาเครื่องมือและภาษาที่โปรแกรมเมอร์ของเราใช้เพื่อทำความเข้าใจปัญหาที่พวกเขาเผชิญโดยเฉพาะเมื่อทำงานกับฐานข้อมูลที่ออกแบบมาอย่างดี? ส่งเสริมให้โปรแกรมเมอร์ให้ความรู้เกี่ยวกับฐานข้อมูลและข้อดีของการมีตรรกะทางธุรกิจในระดับฐานข้อมูลดีขึ้นหรือไม่ เปลี่ยนวิธีที่เรากำหนดอินเทอร์เฟซให้กับข้อมูลของเรา - เช่นโดยใช้ API การทำธุรกรรมที่เป็นมิตรกับโปรแกรมเมอร์มากขึ้น (เช่นสำหรับปัญหาเช่นความเข้ากันได้ย้อนหลัง)?

4
ฟังก์ชั่นประสิทธิภาพ
มาจากพื้นหลังของ MySQL ที่ประสิทธิภาพของขั้นตอนการจัดเก็บ(บทความเก่า)และการใช้งานเป็นที่น่าสงสัยฉันกำลังประเมิน PostgreSQL สำหรับผลิตภัณฑ์ใหม่สำหรับ บริษัท ของฉัน หนึ่งในสิ่งที่ฉันอยากทำคือย้ายบางส่วนของตรรกะแอปพลิเคชันลงในกระบวนงานที่เก็บไว้ดังนั้นฉันจึงขอ DOs และ DON'Ts (แนวทางปฏิบัติที่ดีที่สุด) เกี่ยวกับการใช้ฟังก์ชันใน PostgreSQL (9.0) โดยเฉพาะเกี่ยวกับประสิทธิภาพการทำงานผิดพลาด

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

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

1
แนวทางปฏิบัติที่ดีที่สุดสำหรับการเปลี่ยนสคีมาและการย้ายข้อมูลไปยังฐานข้อมูลสดโดยไม่ต้องหยุดทำงาน
คุณทำการเปลี่ยนแปลง schema กับฐานข้อมูลจริงโดยไม่ต้องหยุดทำงานได้อย่างไร ตัวอย่างเช่นสมมติว่าฉันมีฐานข้อมูล PostgreSQL พร้อมตารางรวมถึงข้อมูลผู้ใช้ที่หลากหลายเช่นที่อยู่อีเมล ฯลฯ ทั้งหมดที่เกี่ยวข้องกับผู้ใช้เฉพาะ หากฉันต้องการย้ายที่อยู่อีเมลไปยังตารางเฉพาะใหม่ฉันต้องเปลี่ยนสคีมาแล้วย้ายข้อมูลอีเมลไปยังตารางใหม่ วิธีนี้สามารถทำได้โดยไม่หยุดเขียนไปยังตารางต้นฉบับ? แน่นอนว่าในขณะที่ข้อมูลถูกเขียนทับจากตารางเก่าไปยังตารางใหม่ข้อมูลใหม่จะถูกเขียนลงในตารางเดิมต่อไปและจะพลาดใช่ไหม ฉันเดาว่าปัญหานี้เกิดขึ้นค่อนข้างบ่อย แต่ฉันไม่สามารถหาวิธีแก้ปัญหามาตรฐานใด ๆ สำหรับจัดการกับมัน บทความนี้เกี่ยวกับปัญหา แต่ฉันไม่เข้าใจขั้นตอนที่ 3 เขาบอกว่าเขียนไปยังทั้งสองตารางจากนั้นย้ายข้อมูลเก่าจากตารางแรกไปยังตารางใหม่ คุณแน่ใจได้อย่างไรว่าคุณเพียงแค่ย้ายข้อมูลเก่าเท่านั้น (ฉันใช้PostgreSQL กับ Heroku )

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

2
โมเดลฐานข้อมูลพร้อมผู้ใช้บทบาทและสิทธิ์
ฉันมีโมเดลฐานข้อมูลพร้อมโต๊ะผู้ใช้และตารางบทบาท ฉันต้องการควบคุมการเข้าถึง (สิทธิ์) ให้มากถึง 10 องค์ประกอบที่แตกต่างกัน การเข้าถึงสามารถได้รับทั้งบทบาทหรือผู้ใช้คนเดียว ด้านล่างนี้เป็นคำจำกัดความของตารางของผู้ใช้บทบาทและรายการ: CREATE TABLE users ( id serial NOT NULL PRIMARY KEY, username character varying UNIQUE, password character varying, first_name character varying, last_name character varying, ... ); CREATE TABLE roles ( id serial NOT NULL PRIMARY KEY, name character varying NOT NULL, description character …

3
เมื่อใดควรสร้างสถิติแทนการสร้างดัชนี
ฉันได้พบข้อมูลมากมายเกี่ยวกับสิ่งที่ STATISTICS : วิธีการดูแลรักษาวิธีการสร้างด้วยตนเองหรือโดยอัตโนมัติจากแบบสอบถามหรือดัชนีและอื่น ๆ แต่ผมได้รับไม่สามารถที่จะหาใด ๆคำแนะนำหรือ "วิธีปฏิบัติที่ดีที่สุด" ข้อมูลเกี่ยวกับเมื่อเพื่อสร้าง: สถานการณ์ใดที่ได้ประโยชน์จากวัตถุสถิติที่สร้างขึ้นด้วยตนเองมากกว่าจากดัชนี ฉันได้เห็นสถิติที่สร้างขึ้นด้วยตนเองที่กรองแล้วช่วยสอบถามในตารางที่แบ่งพาร์ติชัน (เนื่องจากสถิติที่สร้างขึ้นสำหรับดัชนีครอบคลุมทั้งตารางและไม่ใช่ต่อพาร์ติชัน - ความสุกใส!) แต่แน่นอนว่าต้องมีสถานการณ์อื่น ๆ ที่จะได้รับประโยชน์จากวัตถุสถิติ ไม่ต้องการรายละเอียดของดัชนีหรือไม่คุ้มค่ากับการบำรุงรักษาดัชนีหรือเพิ่มโอกาสในการบล็อค / ล็อคตาย @JonathanFite ในความคิดเห็นพูดถึงความแตกต่างระหว่างดัชนีและสถิติ: ดัชนีจะช่วยให้ SQL ค้นหาข้อมูลได้เร็วขึ้นด้วยการสร้างการค้นหาที่เรียงลำดับแตกต่างจากตาราง สถิติช่วยให้ SQL พิจารณาว่าจำเป็นต้องใช้หน่วยความจำ / ความพยายามเท่าใดในการตอบแบบสอบถาม นั่นคือข้อมูลที่ดีส่วนใหญ่เป็นเพราะมันช่วยให้ฉันชี้แจงคำถามของฉัน: วิธีการที่ไม่ทราบนี้ (หรือข้อมูลทางเทคนิคอื่น ๆ ใด ๆ เกี่ยวกับสิ่งที่และวิธีการ s ที่เกี่ยวข้องกับพฤติกรรมและธรรมชาติของSTATISTICS) ช่วยตรวจสอบเมื่อให้เลือกCREATE STATISTICSมากกว่าCREATE INDEXโดยเฉพาะอย่างยิ่งเมื่อมีการสร้างดัชนีจะสร้างที่เกี่ยวข้องกับSTATISTICSวัตถุ? สถานการณ์ใดที่จะให้บริการที่ดีขึ้นโดยมีเพียงข้อมูลสถิติและไม่มีดัชนี มันจะเป็นซุปเปอร์ duper ประโยชน์ถ้าเป็นไปได้ที่จะมีตัวอย่างการทำงานของสถานการณ์ที่วัตถุที่เป็นแบบที่ดีกว่าSTATISTICSINDEX เนื่องจากฉันเป็นผู้เรียนด้วยสายตา / นักคิดฉันคิดว่ามันอาจช่วยให้เห็นความแตกต่างระหว่างSTATISTICSและINDEXes เคียงข้างกันเป็นวิธีที่เป็นไปได้ในการช่วยกำหนดว่าเมื่อใดSTATISTICSจะเป็นทางเลือกที่ดีกว่า …

1
GO หลังจากทุกคำสั่ง T-SQL
เหตุผลเบื้องหลังการใช้คำสั่ง GO หลังจากทุกคำสั่ง SQL คืออะไร ฉันเข้าใจว่า GO ส่งสัญญาณการสิ้นสุดของแบทช์และ / หรืออนุญาตให้มีชื่อเสียงของข้อความ แต่สิ่งที่มันมีประโยชน์ใช้หลังจากทุกคำสั่ง ฉันแค่อยากรู้อยากเห็นเป็นเอกสาร Microsoft จำนวนมาก ฯลฯ ได้เริ่มใช้มันหลังจากทุกคำสั่งหรือบางทีฉันเพิ่งเริ่มสังเกตเห็น นอกจากนี้สิ่งที่ถือว่าเป็นแนวปฏิบัติที่ดีที่สุด

1
การตั้งค่า BUFFERCOUNT, BLOCKSIZE และ MAXTRANSFERSIZE สำหรับคำสั่ง BACKUP
ฉันกำลังมองหาการปฏิบัติคำแนะนำสำหรับการตั้งค่าสำหรับBUFFERCOUNT, BLOCKSIZEและMAXTRANSFERSIZEของBACKUPคำสั่ง ฉันได้ทำการวิจัยนิดหน่อย (ดูด้านล่าง) ฉันได้ทำการทดสอบแล้วและฉันก็ตระหนักดีว่าคำตอบที่มีค่าอย่างแท้จริงจะเริ่มต้นด้วย "ดีขึ้นอยู่กับ ... " ความกังวลของฉันเกี่ยวกับการทดสอบที่ฉันได้ทำและการทดสอบที่แสดงในแหล่งข้อมูลใด ๆ ที่ฉันได้พบ (ดูวิธีด้านล่าง) คือการทดสอบจะทำในสุญญากาศซึ่งเป็นไปได้มากที่สุดในระบบที่ไม่มีโหลดอื่น ๆ ฉันอยากรู้เกี่ยวกับแนวทางที่ถูกต้อง / แนวปฏิบัติที่ดีที่สุดเกี่ยวกับสามตัวเลือกเหล่านี้ซึ่งยึดตามประสบการณ์ระยะยาว: มีจุดข้อมูลจำนวนมากในช่วงสัปดาห์หรือเป็นเดือน และฉันไม่ได้มองหาค่าที่เฉพาะเจาะจงเนื่องจากส่วนใหญ่เป็นฟังก์ชั่นของฮาร์ดแวร์ที่มีอยู่ แต่ฉันต้องการที่จะรู้ว่า: ปัจจัยฮาร์ดแวร์ / โหลดที่หลากหลายมีผลต่อสิ่งที่ควรทำ มีสถานการณ์ใดบ้างที่ไม่ควรแทนที่ค่าเหล่านี้? มีข้อผิดพลาดในการเอาชนะสิ่งเหล่านี้ที่ไม่ชัดเจนในทันทีหรือไม่? ใช้หน่วยความจำและ / หรือดิสก์ I / O มากเกินไปหรือไม่ มีความซับซ้อนในการกู้คืนการดำเนินการ? ถ้าฉันมีเซิร์ฟเวอร์ที่มีหลายอินสแตนซ์ของ SQL Server ทำงาน (เป็นค่าเริ่มต้นอินสแตนซ์และสองอินสแตนซ์ที่มีชื่อ) และหากฉันใช้การสำรองข้อมูลของทั้ง 3 อินสแตนซ์พร้อม ๆ กันไม่ว่าส่งผลกระทบต่อวิธีการที่ฉันตั้งค่าเหล่านี้เกินกว่าการทำให้แน่ใจว่าส่วนรวม ( BUFFERCOUNT* MAXTRANSFERSIZE) ไม่เกิน RAM ที่มีอยู่หรือไม่ การต่อสู้ …

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