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

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

5
การออกแบบฐานข้อมูลและตารางที่ดีที่สุดสำหรับพันล้านแถวของข้อมูล [ปิด]
ฉันกำลังเขียนแอปพลิเคชันที่ต้องการจัดเก็บและวิเคราะห์ข้อมูลไฟฟ้าและอุณหภูมิจำนวนมาก โดยทั่วไปฉันจำเป็นต้องจัดเก็บการวัดปริมาณการใช้ไฟฟ้ารายชั่วโมงเป็นจำนวนมากในช่วงหลายปีที่ผ่านมาและเป็นเวลาหลายปีที่จะมาถึงที่ตั้งหลายหมื่นแห่งจากนั้นวิเคราะห์ข้อมูลในลักษณะที่ไม่ซับซ้อนมาก ข้อมูลที่ฉันต้องการจัดเก็บ (ตอนนี้) คือรหัสสถานที่, เวลาประทับ (วันที่และเวลา), อุณหภูมิและการใช้ไฟฟ้า เกี่ยวกับปริมาณข้อมูลที่ต้องจัดเก็บนี่เป็นเพียงการประมาณ แต่มีบางสิ่งตามสายเหล่านี้: 20 000+ ตำแหน่ง 720 บันทึกต่อเดือน (วัดรายชั่วโมงประมาณ 720 ชั่วโมงต่อเดือน), 120 เดือน (สำหรับ 10 ปีย้อนหลัง ) และอีกหลายปีในอนาคต การคำนวณอย่างง่ายให้ผลลัพธ์ต่อไปนี้: 20 000 สถาน x 720 x 120 บันทึกเดือน (10 ปีหลัง) = 1 728 000 000 ระเบียน เหล่านี้เป็นบันทึกที่ผ่านมาบันทึกใหม่จะถูกนำเข้ารายเดือนเพื่อให้เป็นประมาณ 20 000 x 720 = 14 400 …

2
เชื่อมต่อกับ SQL Server ด้วย Windows Authentication ในโดเมนอื่น
ฉันพยายามเชื่อมต่อกับ SQL Server ระยะไกลบน VPN ในโดเมนอื่น เมื่อฉันป้อนชื่อเซิร์ฟเวอร์บน SQL Server และเลือกพารามิเตอร์การเชื่อมต่อเพิ่มเติมเพื่อเพิ่มสิ่งพิเศษที่โรงเรียนของฉันต้องการ: Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password ฉันได้รับข้อผิดพลาดต่อไปนี้: การเข้าสู่ระบบล้มเหลว การเข้าสู่ระบบมาจากโดเมนที่ไม่น่าเชื่อถือและไม่สามารถใช้กับการตรวจสอบ Windows

5
การทำงานของดัชนีใน PostgreSQL
ฉันมีคำถามสองสามข้อเกี่ยวกับการทำงานของดัชนีใน PostgreSQL ฉันมีFriendsตารางที่มีดัชนีต่อไปนี้: Friends ( user_id1 ,user_id2) user_id1และuser_id2เป็นกุญแจต่างประเทศเข้าสู่userตาราง สิ่งเหล่านี้เทียบเท่ากันหรือไม่ ถ้าไม่เช่นนั้นทำไม Index(user_id1,user_id2) and Index(user_id2,user_id1) ถ้าฉันสร้างคีย์หลัก (user_id1, user_id2) มันจะสร้างดัชนีให้โดยอัตโนมัติหรือไม่ หากดัชนีในคำถามแรกไม่เท่ากันดัชนีใดจะถูกสร้างขึ้นบนคำสั่งคีย์หลักด้านบน

6
SQL Server ไม่สามารถวางฐานข้อมูล <dbname> ได้เนื่องจากมีการใช้งานอยู่ ... แต่ไม่มีเซสชันปรากฏขึ้น
เมื่อฉันพยายามที่จะวางฐานข้อมูลฉันได้รับข้อผิดพลาด "ไม่สามารถวางฐานข้อมูล" dbname "เพราะมันกำลังใช้งานอยู่" อย่างไรก็ตามเมื่อฉันรันsp_who2ไม่มีการเชื่อมต่อเซสชันกับฐานข้อมูลนี้ single_user mode with rollback immediateฉันยังได้ตั้งฐานข้อมูลเพื่อ ทำไมสิ่งนี้จึงเกิดขึ้น

1
รวมส่วนย่อยของตารางเป้าหมาย
ฉันกำลังพยายามใช้MERGEคำสั่งเพื่อแทรกหรือลบแถวออกจากตาราง แต่ฉันต้องการดำเนินการกับชุดย่อยของแถวเหล่านั้นเท่านั้น เอกสารสำหรับMERGEคำเตือนที่มีคำพูดค่อนข้างแรง: สิ่งสำคัญคือต้องระบุเฉพาะคอลัมน์จากตารางเป้าหมายที่ใช้สำหรับจุดประสงค์ที่ตรงกัน นั่นคือระบุคอลัมน์จากตารางเป้าหมายที่เปรียบเทียบกับคอลัมน์ที่เกี่ยวข้องของตารางต้นฉบับ อย่าพยายามปรับปรุงประสิทธิภาพการสืบค้นด้วยการกรองแถวในตารางเป้าหมายในส่วนคำสั่ง ON เช่นโดยระบุ AND NOT target_table.column_x = value การทำเช่นนั้นอาจส่งคืนผลลัพธ์ที่ไม่คาดคิดและไม่ถูกต้อง แต่นี่คือสิ่งที่ฉันต้องทำเพื่อให้MERGEงานของฉันปรากฏ ข้อมูลที่ฉันมีคือตารางการเข้าร่วมหลายต่อหลายมาตรฐานสำหรับหมวดหมู่ (เช่นรายการที่รวมอยู่ในหมวดหมู่ใด) ดังนี้: CategoryId ItemId ========== ====== 1 1 1 2 1 3 2 1 2 3 3 5 3 6 4 5 สิ่งที่ฉันต้องทำคือการแทนที่แถวทั้งหมดในหมวดหมู่เฉพาะด้วยรายการใหม่ ความพยายามครั้งแรกของฉันในการทำเช่นนี้ดูเหมือนว่า: MERGE INTO CategoryItem AS TARGET USING ( SELECT ItemId FROM …

8
วิธีการแปลงตาราง utf8 เป็น utf8mb4 ใน MySQL 5.5 ได้อย่างง่ายดาย
ฉันมีฐานข้อมูลซึ่งตอนนี้ต้องรองรับอักขระ 4 ไบต์ (ภาษาจีน) โชคดีที่ฉันมี MySQL 5.5 ในการผลิตอยู่แล้ว ดังนั้นฉันอยากจะทำการเปรียบเทียบทั้งหมดซึ่งเป็น utf8_bin ถึง utf8mb4_bin ฉันเชื่อว่าไม่มีการสูญเสีย / กำไรจากการเปลี่ยนแปลงนี้นอกจากการใช้พื้นที่จัดเก็บเล็กน้อย
71 mysql 

6
ความแตกต่างระหว่าง NoSQL และ RDBMS ดั้งเดิมคืออะไร?
ความแตกต่างระหว่าง NoSQL และ RDBMS ดั้งเดิมคืออะไร? ในช่วงไม่กี่เดือนที่ผ่านมา NoSQL ถูกกล่าวถึงบ่อยครั้งในข่าวทางเทคนิค อะไรคือคุณสมบัติที่สำคัญที่สุดที่สัมพันธ์กับ RDBMS แบบดั้งเดิม? ความแตกต่างเกิดขึ้นในระดับใด (กายภาพ, ตรรกะ) สถานที่ที่ดีที่สุดในการใช้ NoSQL อยู่ที่ไหน ทำไม?

4
วิธีการใช้ psql โดยไม่แจ้งรหัสผ่าน?
ฉันเขียนสคริปต์เพื่อREINDEXจัดทำดัชนีในฐานข้อมูล นี่คือหนึ่งในนั้น: echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" &gt;&gt; ${LOG_FILE} psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;" if [[ ${?} -eq 0 ]]; then echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" &gt;&gt; ${LOG_FILE} else echo "reindex for unq_vbvdata_vehicle failed" &gt;&gt; …
70 postgresql  index  psql 

6
มีความเสี่ยงอะไรบ้างถ้าเราเปิดใช้งานสแนปชอตการอ่านใน sql-server
ฉันได้อ่านที่นี่ว่าข้อมูลพิเศษบางอย่างจะถูกจัดเก็บต่อแถวดังนั้นเราจึงอาจเห็นประสิทธิภาพลดลง แต่มีความเสี่ยงอื่นอีกหรือไม่ เช่น. สิ่งนี้จะส่งผลต่อการกู้คืนฐานข้อมูลหรือไม่? มีอะไรอีกบ้างที่เราต้องทำเพื่อใช้ประโยชน์จากสิ่งนี้? ฉันวางแผนที่จะดำเนินการคำสั่งเหล่านี้: ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON ฉันเชื่อว่าสิ่งนี้จะทำให้เรามีบางสิ่งที่ใกล้เคียงกับ oracle มากขึ้นหากว่ามีธุรกรรมหนึ่งธุรกรรมที่กำลังอัพเดทธุรกรรมอื่น ๆ ยังคงสามารถอ่านข้อมูลเก่าได้ ถูกต้องหรือไม่ ฉันกำลังมองหาสิ่งนี้เพราะฉันเบื่อปัญหาการล็อคใน SQL Server 2005 ฉันหวังว่าสิ่งนี้อาจลดการหยุดชะงักเป็นครั้งคราวที่ผู้ใช้ของเราเห็นช่วยให้ประสิทธิภาพโดยรวมของแอปพลิเคชันของเราและกระตุ้นให้นักพัฒนาของเรา กลัว.


5
วิธีการเปลี่ยนอาร์เรย์ json เป็นอาร์เรย์ postgres?
ฉันมีคอลัมน์dataที่ถือjsonเอกสารคร่าวๆเช่นนี้: { "name": "foo", "tags": ["foo", "bar"] } ฉันต้องการเปลี่ยนtagsอาร์เรย์ที่ซ้อนกันเป็นสตริงที่ต่อกัน ( foo, bar) ที่จะเป็นไปได้อย่างง่ายดายด้วยarray_to_string()ฟังก์ชั่นในทางทฤษฎี อย่างไรก็ตามฟังก์ชั่นนี้ไม่ได้ทำหน้าที่ในjsonอาร์เรย์ ดังนั้นฉันสงสัยว่าจะเปลี่ยนjsonอาร์เรย์นี้เป็น Postgres ได้arrayอย่างไร

10
ทำไมคนไม่แนะนำให้ใช้ชื่อ“ Id” สำหรับคอลัมน์ข้อมูลประจำตัว
ฉันถูกสอนไม่ให้ใช้ชื่อIdสำหรับคอลัมน์ข้อมูลประจำตัวของตารางของฉัน แต่เมื่อเร็ว ๆ นี้ฉันเพิ่งใช้มันอย่างไรก็ตามเพราะมันง่ายสั้นและอธิบายมากเกี่ยวกับข้อมูลจริง ๆ ฉันเคยเห็นคนแนะนำคำนำหน้าIdด้วยชื่อตาราง แต่ดูเหมือนว่าจะทำให้การทำงานมากขึ้นสำหรับผู้ที่เขียนคำสั่ง SQL (หรือโปรแกรมเมอร์ถ้าคุณใช้ ORM เช่น Entity Framework) โดยเฉพาะชื่อตารางที่ยาวขึ้นเช่นCustomerProductIdหรือAgencyGroupAssignementId หนึ่งในผู้จัดจำหน่ายของบุคคลที่สามที่เราได้รับการว่าจ้างในการสร้างบางสิ่งบางอย่างสำหรับเราจริงชื่อคอลัมน์ตัวตนของพวกเขาทั้งหมดเพียงเพื่อหลีกเลี่ยงการใช้Ident Idตอนแรกฉันคิดว่าพวกเขาทำอย่างนั้นเพราะIdเป็นคำหลัก แต่เมื่อฉันดูมันฉันพบว่าIdไม่ใช่คำหลักใน SQL Server 2005 ซึ่งเป็นสิ่งที่เราใช้ เหตุใดผู้คนจึงไม่แนะนำให้ใช้ชื่อIdสำหรับคอลัมน์ข้อมูลประจำตัว แก้ไข:เพื่อชี้แจงฉันไม่ได้ถามแบบแผนการตั้งชื่อที่จะใช้หรือหาข้อโต้แย้งที่จะใช้แบบแผนการตั้งชื่อแบบหนึ่งเหนืออีกแบบ ฉันแค่อยากรู้ว่าทำไมจึงไม่แนะนำให้ใช้Idสำหรับชื่อคอลัมน์ข้อมูลประจำตัว ฉันเป็นโปรแกรมเมอร์ตัวเดียวไม่ใช่ dba และสำหรับฉันแล้วฐานข้อมูลเป็นที่สำหรับเก็บข้อมูลของฉัน เนื่องจากฉันมักจะสร้างแอพขนาดเล็กและโดยทั่วไปจะใช้ ORM สำหรับการเข้าถึงข้อมูลชื่อฟิลด์ทั่วไปสำหรับฟิลด์ข้อมูลประจำตัวจึงทำงานได้ง่ายกว่ามาก ฉันต้องการที่จะรู้ว่าสิ่งที่ฉันพลาดในการทำเช่นนี้และถ้ามีเหตุผลที่ดีจริงๆสำหรับฉันที่จะไม่ทำเช่นนี้

2
จะเร็วกว่าอะไรแบบสอบถามขนาดใหญ่หรือแบบสอบถามขนาดเล็กจำนวนมาก
ฉันทำงานให้กับ บริษัท ที่แตกต่างกันและฉันสังเกตเห็นว่าบางคนชอบที่จะมีมุมมองที่จะเข้าร่วมโต๊ะกับ "ญาติ" ทั้งหมดของมัน แต่ในบางครั้งเราจำเป็นต้องใช้เพียง 1 คอลัมน์เท่านั้น ดังนั้นจะเร็วกว่าที่จะทำการเลือกแบบง่าย ๆ แล้ว "เข้าร่วม" ในรหัสระบบหรือไม่ ระบบอาจเป็น php, java, asp, ภาษาใด ๆ ที่เชื่อมต่อกับฐานข้อมูล ดังนั้นคำถามคือสิ่งที่เร็วไปจากฝั่งเซิร์ฟเวอร์ (php, java, asp, ruby, python ... ) ไปยังฐานข้อมูลรันหนึ่งแบบสอบถามที่ได้รับทุกสิ่งที่เราต้องการหรือไปจากฝั่งเซิร์ฟเวอร์ไปยังฐานข้อมูลและเรียกใช้ แบบสอบถามที่ได้รับคอลัมน์จากตารางเดียวเท่านั้นหรือไม่

5
มีชื่อสำหรับสกีมาฐานข้อมูลนี้ของค่าคีย์หรือไม่?
เราประมวลผลฟีดข้อมูลประจำจากลูกค้าที่เพิ่งปรับโครงสร้างฐานข้อมูลของพวกเขาจากรูปแบบที่ดูเหมือนคุ้นเคย (หนึ่งแถวต่อเอนทิตี้หนึ่งคอลัมน์ต่อแอตทริบิวต์) ไปยังอันที่ดูเหมือนฉันไม่คุ้นเคย (หนึ่งแถวต่อเอนทิตีต่อแอตทริบิวต์): ก่อนหน้า: หนึ่งคอลัมน์ต่อแอตทริบิวต์ ID Ht_cm wt_kg Age_yr ... 1 190 82 43 ... 2 170 60 22 ... 3 205 90 51 ... หลัง: หนึ่งคอลัมน์สำหรับแอตทริบิวต์ทั้งหมด ID Metric Value 1 Ht_cm 190 1 Wt_kg 82 1 Age_yr 43 1 ... 2 Ht_cm 170 2 Wt_kg 60 2 Age_yr …

1
วิธีการบังคับให้วางฐานข้อมูลใน SQL Server 2008
ฉันพยายามบังคับให้วางฐานข้อมูล แต่หลังจากวางฐานข้อมูลเมื่อฉันพยายามสร้างฐานข้อมูลขึ้นใหม่ฉันได้รับข้อผิดพลาด ไม่สามารถสร้างไฟล์ C: \ Program ไฟล์ ..... [databasename] .mdf เนื่องจากมีอยู่แล้ว นี่คือแบบสอบถามของฉันเพื่อบังคับให้วางฐานข้อมูล Use master; ALTER database [databasename] set offline with ROLLBACK IMMEDIATE; DROP database [databasename]; ฉันเข้าใจว่าข้อความค้นหาด้านบนกำลังวางฐานข้อมูล แต่ไม่ได้ลบ.ldfและ.mdfไฟล์ วิธีการลบฐานข้อมูลอย่างละเอียด? แบบสอบถามปกติ Drop database [databasename] ; //deletes the database completely, including the ldf and mdf's. จะบังคับให้วางฐานข้อมูลซึ่งลบ.mdfและ.ldfไฟล์ได้อย่างไร?

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