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

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

4
ควรหลีกเลี่ยง schema dbo หรือไม่
เมื่อพูดถึง dbo schema: เป็นวิธีปฏิบัติที่ดีที่สุดในการหลีกเลี่ยงการใช้ dbo schema เมื่อสร้างวัตถุฐานข้อมูลหรือไม่ เหตุใดจึงควรหลีกเลี่ยงสกีมา dbo หรือควร ผู้ใช้ฐานข้อมูลใดควรเป็นเจ้าของ dbo schema

4
ฉันควรอัปเดตอย่างชัดเจนไปยังคอลัมน์ที่ไม่ควรอัปเดตหรือไม่
ฉันคุ้นเคยกับการทำงานในสภาพแวดล้อมที่ปลอดภัยและดังนั้นฉันจึงออกแบบการอนุญาตของฉันให้ดีมาก สิ่งหนึ่งที่ฉันทำตามปกติคือDENYผู้ใช้สามารถระบุUPDATEคอลัมน์ที่ไม่ควรอัปเดตได้อย่างชัดเจน ตัวอย่างเช่น: create table dbo.something ( created_by varchar(50) not null, created_on datetimeoffset not null ); คอลัมน์สองเหล่านี้ไม่ควรเปลี่ยนแปลงเมื่อมีการตั้งค่า ดังนั้นผมจะชัดเจนรับอนุญาตเกี่ยวกับพวกเขาDENYUPDATE เมื่อเร็ว ๆ นี้ในระหว่างการประชุมทีมนักพัฒนาได้ยกประเด็นที่ตรรกะเพื่อให้แน่ใจว่าเขตข้อมูลที่ไม่เคยได้รับการปรับปรุงควรจะอยู่ในเลเยอร์แอปพลิเคชันและไม่ใช่ชั้นฐานข้อมูลในกรณีที่ "พวกเขาจำเป็นต้องปรับปรุงค่า สำหรับฉันแล้วดูเหมือนว่าความคิด dev ทั่วไป (ฉันรู้ว่าฉันเคยเป็นหนึ่ง!) ฉันเป็นสถาปนิกอาวุโสที่ บริษัท ของฉันและฉันได้ทำงานตามหลักการของสิทธิพิเศษจำนวนน้อยที่สุดที่ต้องใช้เพื่อให้แอปทำงานได้ สิทธิ์ทั้งหมดจะได้รับการตรวจสอบเป็นประจำ แนวปฏิบัติที่ดีที่สุดในสถานการณ์นี้คืออะไร?

7
ปัญหาใดที่แก้ไขได้โดยแยกที่อยู่เป็นคอลัมน์แต่ละคอลัมน์
เรามีทีมงานที่ออกแบบตารางและความสัมพันธ์สำหรับนักพัฒนาซอฟต์แวร์ ในองค์กรของเราพวกเขาค่อนข้างเข้มงวดเกี่ยวกับการบังคับใช้มาตรฐาน 3NF ซึ่งโดยความจริงแล้วฉันเห็นด้วยกับขนาดองค์กรของเราและความต้องการหรือลูกค้าของเราเปลี่ยนแปลงไปตามกาลเวลาอย่างไร มีเพียงส่วนเดียวที่ฉันไม่ชัดเจนเกี่ยวกับเหตุผลที่อยู่เบื้องหลังการตัดสินใจออกแบบ: ที่อยู่ แม้ว่าสิ่งนี้จะเน้นที่ที่อยู่ในสหรัฐอเมริกาเป็นส่วนใหญ่ แต่ฉันคิดว่าสิ่งนี้สามารถใช้ได้กับทุกประเทศที่ทำสิ่งนี้ ที่อยู่แต่ละส่วนจะได้รับคอลัมน์ของตนเองในตารางที่อยู่ ตัวอย่างเช่นใช้ที่อยู่ gnarly US นี้: Attn: Jane Doe 485 1/2 N Smith St SW, APT 300B Chicago, IL 11111-2222 มันจะถูกแยกย่อยในฐานข้อมูลดังนี้: ถนนหมายเลข: 485 เศษถนน: 1/2 ทิศทางก่อนถนน: N (เหนือ) ชื่อถนน: Smith ประเภทถนน: ST (ถนน) ทิศทางหลังถนน: SW (ตะวันตกเฉียงใต้) เมือง: ชิคาโก รัฐ: IL (อิลลินอยส์) รหัสไปรษณีย์: 11111 …

4
ขั้นตอนใดที่จำเป็นในการรีสตาร์ทเครื่องที่โฮสต์ Microsoft SQL Server อย่างปลอดภัย
มีขั้นตอนพิเศษที่จำเป็นเพื่อป้องกันความเสียหายของข้อมูลเมื่อรีสตาร์ทเซิร์ฟเวอร์ที่โฮสต์อินสแตนซ์ MS SQL Server หรือไม่ ตัวอย่างเช่นฉันเพิ่งพบข้อเสนอแนะของการหยุดบริการ SQL ด้วยตนเอง ความเข้าใจของฉันอยู่ที่นี้จะถูกจัดการโดยใช้ Windows shutdownกระบวนการ ฉันแน่ใจว่ามีขั้นตอน zillion ซึ่งแต่ละคนอาจแนะนำเหมือนที่ผมกล่าวถึงเพียง แต่ฉันต้องการที่จะหลีกเลี่ยงการทำซ้ำการปฏิบัติที่ล้าสมัยหรือเชื่อโชคลาง มีคำแนะนำจาก Microsoft หรือมาตรฐานอุตสาหกรรมที่แพร่หลายหรือไม่ คำถามนี้เกี่ยวข้องกับขั้นตอนระยะสั้นในการรีบูตเครื่อง มีคำถามอีกข้อหนึ่งเกี่ยวกับขั้นตอนระยะยาวในการรับรองว่าเครื่องไม่ได้ใช้งานก่อนที่จะนำไปทิ้งอย่างถาวร

5
เป็นการดีที่สุดที่จะหลีกเลี่ยงการใช้พอร์ตเริ่มต้นสำหรับ SQL Server หรือไม่
ในอดีตนั้นไม่แนะนำให้ใช้พอร์ตเริ่มต้นสำหรับการเชื่อมต่อกับ SQL Server ซึ่งเป็นส่วนหนึ่งของแนวปฏิบัติด้านความปลอดภัยที่ดีที่สุด บนเซิร์ฟเวอร์ที่มีอินสแตนซ์เริ่มต้นเดียวจะใช้พอร์ตต่อไปนี้เป็นค่าเริ่มต้น: บริการ SQL Server - พอร์ต 1433 (TCP) บริการเบราว์เซอร์เซิร์ฟเวอร์ SQL - พอร์ต 1434 (UDP) การเชื่อมต่อผู้ดูแลระบบเฉพาะ - พอร์ต 1434 (TCP) คำถาม: คำแนะนำนี้ยังเกี่ยวข้องหรือไม่? ควรเปลี่ยนพอร์ตด้านบนทั้งหมดหรือไม่


5
การใช้ชื่อแทนตารางเป็นแนวทางปฏิบัติที่ไม่ดี
ฉันจำได้ว่าเรียนรู้ที่จะทำสิ่งนี้ในหลักสูตร DBMS สำหรับนักเรียนปริญญาโทสาขาบริการข้อมูล ในการช่วยตัวเองให้พิมพ์คุณสามารถพิมพ์: SELECT t1.id, t2.stuff FROM someTable t1 INNER JOIN otherTable t2 ON t1.id=t2.id ; แต่ ... ทำไมจึงเป็นที่ยอมรับในขั้นตอนการจัดเก็บและเช่นนี้? ดูเหมือนว่าทั้งหมดจะเป็นอันตรายต่อความสามารถในการอ่านของคำสั่งในขณะที่ประหยัดเวลาน้อยมาก มีเหตุผลการทำงานหรือเหตุผลในการทำเช่นนี้? ดูเหมือนว่าจะเพิ่มความกำกวมมากกว่าลบออก; เหตุผลที่ยอมรับได้เพียงอย่างเดียวที่ฉันเห็นสำหรับการใช้รูปแบบนี้คือถ้าคุณเพิ่มนามแฝงที่มีความหมายเชิงความหมาย - ตัวอย่างเช่นFROM someTable idsTable- เมื่อชื่อตารางไม่อธิบายเพียงพอ การใช้ชื่อแทนตารางเป็นวิธีปฏิบัติที่ไม่ดีหรือเป็นเพียงการใช้ระบบที่เป็นประโยชน์ในทางที่ผิด

3
มีประสิทธิภาพมากขึ้นคืออะไรส่วนคำสั่งหรือการรวมกับตารางล้านบวกแถว?
เราเรียกใช้เว็บไซต์ที่มีแถว 250 มม. ในหนึ่งตารางและในอีกตารางหนึ่งที่เราเข้าร่วมเพื่อการค้นหาส่วนใหญ่จะมีแถวที่ต่ำกว่า 15 มม. โครงสร้างตัวอย่าง: MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows UserTable (Id, Role, Created, UserName...) -- 12K Rows เราต้องทำแบบสอบถามสองสามข้อกับตารางเหล่านี้เป็นประจำ หนึ่งคือสถิติโลภสำหรับผู้ใช้ฟรี (ผู้ใช้ฟรี ~ 10k) Select Count(1) from DetailsTable dt join MasterTable mt on mt.Id = dt.MasterId join UserTable ut …

2
SQL Server - วิธีปฏิบัติที่ดีที่สุดสำหรับการเติบโตของไฟล์ฐานข้อมูล
ฉันเฝ้าสังเกตการเติบโตของไฟล์ผ่านตัวรวบรวมข้อมูลใน sql server 2008 r2 เป็นเวลาสองสัปดาห์ ฐานข้อมูลมีการเติบโตอย่างต่อเนื่องที่ประมาณ 35 (MB) / วัน ฐานข้อมูลยังไม่ถึงขนาดเริ่มต้นที่ 2 GB การเติบโตอัตโนมัติของไฟล์ฐานข้อมูลถูกตั้งไว้ที่ 5MB และฉันต้องการลองวิธีอื่นดังนั้นฉันจึงกำลังมองหาคำแนะนำและหรือความคิดเห็น มีงานปรับแต่งที่ทำงานทุกสัปดาห์ในคืนวันอาทิตย์เวลา 1:30 น. ภารกิจจะ: ตรวจสอบความสมบูรณ์ของฐานข้อมูล ย่อขนาดแฟ้มบันทึก - (ไม่เป็นไรเนื่องจากโหมดการบันทึกเป็นแบบง่าย) ลดขนาดฐานข้อมูล จัดระเบียบดัชนีใหม่ สร้างดัชนีใหม่ อัปเดตสถิติ ล้างประวัติ ฉันต้องการเพิ่มอีกสองขั้นตอนในแผนการปรับรายสัปดาห์: ขยายไฟล์ฐานข้อมูลขึ้น 500 MB หากพื้นที่ที่ใช้จนถึงขีด จำกัด หรือขนาดทั้งหมด ขยายไฟล์บันทึกเพิ่มขึ้น 250 MB (หลังการย่อขนาด) หากพื้นที่ที่ใช้จนถึงขีด จำกัด ขนาดทั้งหมด ด้วยการวางภาระการเติบโตในเวลาออฟไลน์ฉันหวังว่าจะได้รับประสิทธิภาพโดยการลดจำนวนกิจกรรมการเติบโตอัตโนมัติในช่วงที่มีงานหนัก ฉันมีคำถามสองข้อเกี่ยวกับไฟล์ที่กำลังเติบโตอัตโนมัติ สถานที่ที่ดีที่สุดที่จะนำขั้นตอนการเติบโตของไฟล์มาไว้ก่อนหน้าขั้นตอนปัจจุบันหรือหลังจากนั้น หากฉันใช้ALTER DATABASE|MODIFY FILEเพื่อขยายไฟล์ฉันจะทราบได้SpaceUsedInFile …

6
การกำหนดค่า RAID ที่แนะนำสำหรับฐานข้อมูล Oracle คืออะไร
RAID (อาร์เรย์สำรองของดิสก์ราคาถูก) มาพร้อมกับการกำหนดค่าต่าง ๆ (RAID-0, RAID-1 ... ) อะไรคือการกำหนดค่า RAID ที่แนะนำที่ฉันควรตั้งค่าและใช้เมื่อติดตั้งฐานข้อมูล Oracle ฐานข้อมูลส่วนใหญ่จะใช้เป็นคลังข้อมูล

3
การสำรองข้อมูลบันทึกธุรกรรมแบบอนุกรมหรือแบบขนาน?
เรากำลังใช้ SQL Server 2012 Standard Edition อยู่ ฉันยังใช้สคริปต์ของ Ola Hallengren เพื่อจัดเตรียมกรอบงานที่ง่ายและยืดหยุ่นมากขึ้นสำหรับการสำรองและบำรุงรักษา คำถามนี้ไม่ได้เกี่ยวกับสคริปต์ของ Ola มากนักเนื่องจากเป็นแนวปฏิบัติที่ดีที่สุด ฉันรู้ว่าคำตอบที่ดีที่สุดคือ "ขึ้นอยู่กับข้อกำหนดของ บริษัท ของคุณ" แต่ฉันกำลังพยายามค้นหาคำแนะนำของชุมชนว่าจะทำสิ่งที่ฉันเข้าใจให้ดีที่สุดให้ตรงตามข้อกำหนดของ บริษัท ฉันต้องการตั้งค่าการสำรองข้อมูลบันทึกธุรกรรมทุก 15 นาที วิธีนี้เราหวังว่าจะสูญเสียข้อมูลไม่เกิน 15 นาที ฉันควรตั้งค่าหนึ่งงานที่ใช้ ALL_DATABASES หรือไม่ หรือมันจะดีกว่าถ้าคุณตั้งค่าหนึ่งงานสำหรับแต่ละฐานข้อมูลและเริ่มทำงานพร้อมกัน? ฉันถามเพราะฉันมีความรู้สึกตามวิธีที่ฉันเห็นสคริปต์ของ Ola ทำงานว่าการสำรองข้อมูลนั้นเริ่มต้นอย่างต่อเนื่อง ข้อเสียของซีเรียลคือการสำรองข้อมูลต่อเนื่องแต่ละครั้งจะรอจนกว่าข้อมูลอื่นจะเสร็จสมบูรณ์ สิ่งนี้อาจเพิ่มระยะเวลาระหว่างการสำรองข้อมูล (เช่นมากกว่า 15 นาที) บวกกับความกังวลของฉันคือความล้มเหลวในการสำรองข้อมูลหนึ่งครั้งจะหยุดไม่ให้เกิดขึ้นอีกและฉันไม่ต้องการให้เป็นเช่นนั้น ฉันต้องการให้คนอื่นสำรองข้อมูลต่อไป เป็นจริงหรือไม่ที่สคริปต์ของ Ola ทำงานในอนุกรมและความล้มเหลวจะหยุดการสำรองข้อมูลอย่างต่อเนื่อง และจะดีกว่าหรือไม่ที่จะมีงานสำหรับแต่ละฐานข้อมูล หรืองานเดียวที่ทำทั้งหมด ความชอบของฉันมีต่องานแยกกัน แต่ฉันต้องการที่จะเข้าใจว่า DBA ของ SQL …

3
แผนการบำรุงรักษา SQL Server แนวปฏิบัติที่ดีที่สุดมีลักษณะอย่างไร [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันเป็นนักเรียนจากมหาวิทยาลัย Fontys ใน Eindhoven และขณะนี้ฉันกำลังดำเนินการสัมภาษณ์หลายชุดเพื่อช่วยในการพัฒนาเครื่องมือ SQL Server และฉันต้องการรับคำติชมจากผู้เชี่ยวชาญในสาขานี้ หนึ่งในคำถามของฉันคือ: แผนการบำรุงรักษา SQL Server แนวปฏิบัติที่ดีที่สุดมีลักษณะอย่างไร คุณใช้แผนการบำรุงรักษาของ SQL Server สำหรับสิ่งนี้หรือคุณใช้สคริปต์ที่กำหนดเองได้หรือไม่?

2
แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับตารางการค้นหาในฐานข้อมูลเชิงสัมพันธ์คืออะไร
ตารางการค้นหา (หรือตารางรหัสตามที่บางคนเรียกพวกเขา) มักจะเป็นชุดของค่าที่เป็นไปได้ที่สามารถกำหนดสำหรับคอลัมน์ที่แน่นอน ตัวอย่างเช่นสมมติว่าเรามีตารางการค้นหาที่เรียกว่าparty(หมายถึงการเก็บข้อมูลเกี่ยวกับพรรคการเมือง) ที่มีสองคอลัมน์: party_code_idnซึ่งเก็บค่าตัวเลขที่ระบบสร้างขึ้นและ (ขาดความหมายโดเมนธุรกิจ ) ทำงานเป็นตัวแทนสำหรับคีย์จริง party_codeเป็นกุญแจจริงหรือ "ธรรมชาติ" ของตารางเนื่องจากจะรักษาค่าที่มีนัยยะของโดเมนธุรกิจ และให้เราบอกว่าตารางดังกล่าวเก็บข้อมูลที่ตามมา: +----------------+------------+ | party_code_idn | party_code | +----------------+------------+ | 1 | Republican | | 2 | Democratic | +----------------+------------+ party_codeคอลัมน์ซึ่งช่วยให้ค่า 'รีพับลิกัน' และ 'ประชาธิปไตย' เป็นสำคัญที่แท้จริงของตารางมีการตั้งค่าที่มีข้อ จำกัด ที่ไม่ซ้ำกัน แต่ผมเลือกที่จะเพิ่มparty_code_idnและกำหนดเป็น PK ของตาราง (แม้ว่าเหตุผลที่พูด , party_codeอาจทำงานเป็นคีย์หลัก [PK]) คำถาม แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการชี้ไปยังค่าการค้นหาจากตารางธุรกรรมคืออะไร ฉันควรสร้างการอ้างอิงต่างประเทศ (FK) อ้างอิงทั้ง(a)โดยตรงกับค่าที่เป็นธรรมชาติและมีความหมายหรือ(b)เพื่อแทนค่า? …

1
วิธีตั้งค่ากระบวนการพัฒนาฐานข้อมูลท้องถิ่นสำหรับทีมงานเว็บขนาดเล็ก
พื้นหลัง ฉันกำลังทำงานเพื่อสร้างกระบวนการพัฒนาใหม่สำหรับทีมงานเว็บขนาดเล็กที่มีโปรแกรมเมอร์ประมาณ 4 คนและนักออกแบบ 4 คนที่มีศักยภาพชัดเจนในการเติบโตทีมในอนาคต ผลิตภัณฑ์ของเราเป็นแอพพลิเคชั่นกลางที่สนับสนุนเว็บไซต์ลูกค้าที่เราออกแบบและโฮสต์ ก่อนหน้านี้เราทำงานผ่าน FTP บนเซิร์ฟเวอร์ dev ด้วยฐานข้อมูล dev เดียว มัน "ทำงาน" *ในขณะที่ แต่เราจะย้ายเข้าไปอยู่ในทิศทางใหม่ดังนั้นจึงเป็นเวลาที่จะครบกำหนดกระบวนการของเรา เราใช้ Percona Server 5.5 แต่นี่ควรเป็นฐานข้อมูลที่ไม่เชื่อเรื่องพระเจ้าโดยมีแนวคิดว่าจะรักษาต้นทุนให้ต่ำ เป้าหมาย : ฉันกำลังมองหาการสร้างกระบวนการการรวมอย่างต่อเนื่อง (CI) สำหรับการพัฒนาฐานข้อมูลโดยคำนึงถึงสิ่งต่อไปนี้: นักพัฒนามีสำเนาของข้อมูลภายในเพื่อเรียกใช้รหัสการพัฒนาเทียบกับ โครงสร้างฐานข้อมูลย้อนกลับไปยังชุดการแก้ไขก่อนหน้า สามารถแยกการเปลี่ยนแปลงคุณสมบัติใหม่กับการเปลี่ยนแปลงแก้ไขการออกแบบสคีมา สามารถแก้ไขโครงสร้างฐานข้อมูลในเครื่องเพื่อทำการทดสอบ แนวคิดเริ่มต้น ผมได้ร่างออกกระบวนการด้านล่างใช้ SVN และ LiquiBase #4แม้ว่ามันจะลบอย่างสมบูรณ์ สร้างสาขา 'การพัฒนา' จากลำตัว เซิร์ฟเวอร์ db 'กลางพัฒนา' จะปิดสาขา 'พัฒนา' นักพัฒนาท้องถิ่นถูกตั้งค่าให้เป็นทาสของสาขาการพัฒนา (แสดง#1ไว้ด้านบน) liquibase การแก้ไขมีความมุ่งมั่นอย่างสม่ำเสมอเพื่อให้สาขาการพัฒนาที่ดำเนินการหลังกระทำเบ็ดเพื่อปรับปรุงการพัฒนาฐานข้อมูลกลาง …

6
แยกตารางใน MySQL การปฏิบัติที่ดี?
ฉันเริ่มทำงานกับโครงการที่มีอยู่และผู้พัฒนาคนก่อนหน้าได้แบ่งตารางออกเป็น 10 ตารางแยกกันด้วยสคีมาที่เหมือนกัน แต่มีข้อมูลต่างกัน ตารางมีลักษณะดังนี้: [tableName_0] [tableName_1] [tableName_2] [tableName_3] [tableName_4] [tableName_5] [tableName_6] [tableName_7] [tableName_8] [tableName_9] คีย์หลักคือidฟิลด์จำนวนเต็ม แอปพลิเคชันใช้อัลกอริทึมแฮช ( idmod 10) เพื่อให้ทราบว่าตารางใดที่จะเข้าถึงเมื่อทำการค้นหา ตัวอย่างid= 10 [tableName_0]จะส่งผลให้ เมื่อรวมกันแล้วตารางอาจมี 100,000 แถวและอัตราการเติบโตค่อนข้างต่ำ ดังนั้นคำถามของฉันคือว่านี่เป็นทางออกที่ทำงานได้หรือไม่แม้ว่ามันจะเป็นแนวปฏิบัติที่ดีในทุกสถานการณ์ ทฤษฎีของฉันคือการผลักดันให้พวกเขารวมกันเพราะมันจะทำให้สิ่งต่าง ๆ ง่ายขึ้นเท่าที่UNIONs ฯลฯ ไป ข้อเสียเปรียบหลักคือการเปลี่ยนรหัสแอปพลิเคชันทั้งหมดและไม่ว่าจะคุ้มค่าในระยะยาวหรือไม่

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