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

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

3
PostgreSQL ข้อ จำกัด หลายคอลัมน์ที่ไม่ซ้ำกันและค่าเป็นศูนย์
ฉันมีตารางดังนี้: create table my_table ( id int8 not null, id_A int8 not null, id_B int8 not null, id_C int8 null, constraint pk_my_table primary key (id), constraint u_constrainte unique (id_A, id_B, id_C) ); และฉันต้องการ(id_A, id_B, id_C)ชัดเจนในทุกสถานการณ์ ดังนั้นส่วนแทรกสองรายการต่อไปนี้ต้องส่งผลให้เกิดข้อผิดพลาด: INSERT INTO my_table VALUES (1, 1, 2, NULL); INSERT INTO my_table VALUES (2, 1, …

3
การลบไฟล์ mysql-bin ปลอดภัยหรือไม่
ฉันมีการจำลองแบบ MM ใน mysql และฉันต้องการที่จะบีบพื้นที่ว่างในกล่องเพื่อลบไฟล์ที่ไม่จำเป็นฉันเจอmysql-binไฟล์เหล่านี้ข้างใน/var/db/mysql/มีหลายร้อยไฟล์เช่นmysql-bin.000123นั้นmysql-bin.000223ฯลฯ ฉันได้ตรวจสอบการจำลองแบบ mysql ด้วยการทำshow master statusและshow slave statusพวกเขา การใช้ไฟล์ MySQL-bin บางที่บางตำแหน่ง แต่ผมคิดว่าทุกไฟล์ bin อื่น ๆ ที่เหลือซึ่งจะไม่ถูกนำมาใช้อีกต่อไป ในกรณีนี้ปลอดภัยที่จะลบไฟล์ mysql-bin ทั้งหมดยกเว้นไฟล์ที่การเรพลิเคทกำลังชี้ไปที่? หากปลอดภัยที่จะลบจะมีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อลบไฟล์เหล่านั้นโดยอัตโนมัติเมื่อไม่ได้ใช้งาน

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

15
ทำไมการบริหารฐานข้อมูลจึงยาก
ฉันรู้จักผู้ดูแลฐานข้อมูลจำนวนมากและมีอายุ 28-29 ปี การบริหารฐานข้อมูลทั้งหมดเป็นเช่นนั้นหรือไม่? ฉันหมายถึงนี่เป็นเรื่องเกี่ยวกับการได้รับประสบการณ์อย่างน้อย 7-8 ปีหรือเปล่า? หรือเป็นผู้ดูแลระบบฐานข้อมูลอย่างหนัก

5
ควรใช้ TINYINT บน INT เมื่อใด
โดยทั่วไปฉันมักจะใช้ Ints ฉันรู้ว่าในทางทฤษฎีแล้วนี่ไม่ใช่วิธีปฏิบัติที่ดีที่สุดเนื่องจากคุณควรใช้ประเภทข้อมูลที่เล็กที่สุดที่จะรับประกันการจัดเก็บข้อมูล ตัวอย่างเช่นจะดีกว่าที่จะใช้tinyintเมื่อคุณรู้ว่าข้อมูลเดียวที่คุณจะจัดเก็บคือ 1, 0 หรือ null (มีโอกาสน้อยมากที่จะขยายไปยัง 2 หรือ 3 ในภายหลัง) อย่างไรก็ตามเหตุผลเดียวที่ฉันรู้ในการทำเช่นนี้คือเพื่อวัตถุประสงค์ในการจัดเก็บข้อมูล - ใช้ 1 ไบต์ในแถวแทนที่จะเป็น 4 ไบต์ อะไรคือผลกระทบของการใช้tinyint(หรือsmallintหรือbigintมากกว่า) intนอกเหนือจากการประหยัดพื้นที่บนฮาร์ดไดรฟ์ของคุณ?

2
ฉันจะรับการประทับเวลา unix ปัจจุบันจาก PostgreSQL ได้อย่างไร
Unix timestampคือจำนวนวินาทีตั้งแต่เที่ยงคืน UTC 1 มกราคม 1970 ฉันจะรับการประทับเวลา unix ที่ถูกต้องจาก PostgreSQL ได้อย่างไร เมื่อเปรียบเทียบกับcurrenttimestamp.comและtimestamp.1e5b.deฉันไม่ได้รับเวลาที่คาดหวังจาก PostgreSQL: ส่งคืนการประทับเวลาที่ถูกต้อง: SELECT extract(epoch from now()); ในขณะนี้ไม่ได้: SELECT extract(epoch from now() at time zone 'utc'); ฉันอาศัยอยู่ในเขตเวลา UTC +02 วิธีที่ถูกต้องในการรับ timestamp ยูนิกซ์ปัจจุบันจาก PostgreSQL คืออะไร? สิ่งนี้จะคืนค่าเวลาและโซนเวลาที่ถูกต้อง: SELECT now(); now ------------------------------- 2011-05-18 10:34:10.820464+02 การเปรียบเทียบอื่น: select now(), extract(epoch from now()), extract(epoch from …

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

5
ทำไมคลัสเตอร์ของ RDBM ไม่สามารถทำแบบที่ NoSQL ทำได้
หนึ่งใน plusses ขนาดใหญ่สำหรับ nosql DBMS คือพวกเขาสามารถจัดกลุ่มได้ง่ายขึ้น สมมุติว่าด้วย NoSQL คุณสามารถสร้างเครื่องจักรราคาถูกนับร้อยที่เก็บข้อมูลต่าง ๆ และทำการค้นหาทั้งหมดในครั้งเดียว คำถามของฉันคือสิ่งนี้ทำไม DBMS เชิงสัมพันธ์ไม่สามารถทำเช่นเซิร์ฟเวอร์ mysql หรือ sql ได้ ผู้ค้าไม่ได้หาวิธีทางเทคนิคในการทำสิ่งนี้กับผลิตภัณฑ์ที่มีอยู่ของพวกเขาหรือมีปัญหากับตัวแบบเชิงสัมพันธ์ที่ป้องกันไม่ให้เกิดความเป็นไปได้หรือไม่? มีอะไรที่ยอดเยี่ยมเกี่ยวกับวิธี NoSQL ในการจัดเก็บและเข้าถึงข้อมูล (คีย์ / ค่าเอกสาร ฯลฯ ) ที่ทำให้การจัดกลุ่มง่ายขึ้นหากเป็นจริงทั้งหมด

6
กำลังดึงข้อมูลแถว n ต่อกลุ่ม
ฉันมักจะต้องเลือกจำนวนแถวจากแต่ละกลุ่มในชุดผลลัพธ์ ตัวอย่างเช่นฉันอาจต้องการแสดงมูลค่าการสั่งซื้อล่าสุด 'n' ที่สูงที่สุดหรือต่ำสุดต่อลูกค้า ในกรณีที่ซับซ้อนมากขึ้นจำนวนแถวที่จะแสดงอาจแตกต่างกันไปในแต่ละกลุ่ม (กำหนดโดยแอตทริบิวต์ของการจัดกลุ่ม / ระเบียนหลัก) ส่วนนี้เป็นทางเลือก / สำหรับเครดิตเพิ่มเติมและไม่ได้มีเจตนาเพื่อห้ามไม่ให้คนตอบรับ ตัวเลือกหลักสำหรับการแก้ไขปัญหาประเภทนี้ใน SQL Server 2005 และรุ่นที่ใหม่กว่าคืออะไร อะไรคือข้อดีและข้อเสียหลักของแต่ละวิธี? ตัวอย่าง AdventureWorks (เพื่อความชัดเจนและเป็นตัวเลือก) แสดงวันที่ล่าสุดของการทำธุรกรรมห้าครั้งและรหัสจากTransactionHistoryตารางสำหรับแต่ละผลิตภัณฑ์ที่เริ่มต้นด้วยตัวอักษรจาก M ถึง R เหมือนกันอีกครั้ง แต่มีnบรรทัดประวัติต่อผลิตภัณฑ์โดยที่nห้าเท่าของDaysToManufactureแอตทริบิวต์ผลิตภัณฑ์ เดียวกันสำหรับกรณีพิเศษที่ว่าเส้นหนึ่งของประวัติศาสตร์ที่ต่อผลิตภัณฑ์เป็นสิ่งจำเป็น (เดี่ยวรายการล่าสุดโดยผูกทำลายบนTransactionDateTransactionID


3
ดัชนีคอมโพสิตยังดีสำหรับการค้นหาในเขตข้อมูลแรกหรือไม่
สมมติว่าผมมีตารางที่มีสาขาและA Bฉันจะทำให้คำสั่งปกติA+ ดังนั้นฉันสร้างดัชนีคอมโพสิตในB (A,B)คำสั่งในการค้นหาAจะได้รับการปรับให้เหมาะสมอย่างเต็มที่โดยดัชนีคอมโพสิตหรือไม่ นอกจากนี้ผมสร้างดัชนีในAแต่ Postgres Aยังคงใช้ดัชนีคอมโพสิตสำหรับการค้นหาเท่านั้น หากคำตอบก่อนหน้าเป็นบวกฉันคิดว่ามันไม่สำคัญ แต่ทำไมมันถึงเลือกดัชนีคอมโพสิตตามค่าเริ่มต้นหากมีAดัชนีเดียว


6
ขั้นตอนการจัดเก็บป้องกันการฉีด SQL หรือไม่
เป็นความจริงหรือไม่ที่ขั้นตอนการจัดเก็บป้องกันการโจมตี SQL injection กับฐานข้อมูล PostgreSQL ฉันทำวิจัยเล็กน้อยและพบว่า SQL Server, Oracle และ MySQL ไม่ปลอดภัยต่อการฉีด SQL แม้ว่าเราจะใช้ขั้นตอนการจัดเก็บเท่านั้น อย่างไรก็ตามปัญหานี้ไม่มีอยู่ใน PostgreSQL การใช้โพรซีเดอร์ที่เก็บไว้ในแกน PostgreSQL ป้องกันการโจมตีจากการฉีด SQL หรือเป็นอย่างอื่นหรือไม่? หรือ PostgreSQL มีความอ่อนไหวต่อการฉีด SQL แม้ว่าเราจะใช้ขั้นตอนการจัดเก็บเท่านั้น ถ้าเป็นเช่นนั้นโปรดแสดงตัวอย่าง (เช่นหนังสือไซต์กระดาษ ฯลฯ )

4
วัดขนาดของแถวตาราง PostgreSQL
ฉันมีตาราง PostgreSQL select *ช้ามากในขณะที่select idดีและรวดเร็ว ฉันคิดว่าอาจเป็นไปได้ว่าขนาดของแถวนั้นใหญ่มากและใช้เวลาในการขนส่งสักครู่หรืออาจเป็นปัจจัยอื่น ฉันต้องการฟิลด์ทั้งหมด (หรือเกือบทั้งหมด) ดังนั้นการเลือกเฉพาะเซ็ตย่อยไม่ใช่การแก้ไขด่วน การเลือกเขตข้อมูลที่ฉันต้องการยังคงช้า นี่คือคีคีโต๊ะของฉันลบชื่อ: integer | not null default nextval('core_page_id_seq'::regclass) character varying(255) | not null character varying(64) | not null text | default '{}'::text character varying(255) | integer | not null default 0 text | default '{}'::text text | timestamp with time zone …

9
เมื่อใดที่จะใช้ NULL และเมื่อใช้สตริงว่าง?
ฉันสนใจ MySQL และ PostgreSQL เป็นส่วนใหญ่ แต่คุณสามารถตอบคำถามต่อไปนี้ได้โดยทั่วไป: มีสถานการณ์ตรรกะที่จะเป็นประโยชน์ในการแยกสตริงว่างจาก NULL หรือไม่ สิ่งที่จะเป็นผลกระทบที่เก็บทางกายภาพสำหรับการจัดเก็บสตริงว่างเปล่าเป็น ... โมฆะ? สตริงว่างเปล่า อีกสาขาหนึ่ง? มีวิธีอื่นอีกไหม?

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