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

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

5
ฐานข้อมูลที่จัดเก็บคีย์ / ค่าคืออะไร
ฉันได้ดูหน้าวิกิพีเดียสำหรับ NoSQL แล้วและมีการเปลี่ยนแปลงหลายรายการในฐานข้อมูลที่เก็บคีย์ / ค่า แต่ฉันไม่พบรายละเอียดเกี่ยวกับความหมายของที่เก็บคีย์ / ค่าในบริบทนี้ ใครช่วยอธิบายหรือเชื่อมโยงคำอธิบายกับฉัน นอกจากนี้เมื่อใดที่ฉันจะใช้ฐานข้อมูลดังกล่าว
56 nosql 

6
ผลรวมสะสมช่วงวันที่โดยใช้ฟังก์ชั่นหน้าต่าง
ฉันต้องคำนวณผลรวมสะสมในช่วงวันที่ เพื่อแสดงให้เห็นถึงการใช้ฐานข้อมูลตัวอย่าง AdventureWorksไวยากรณ์สมมุติฐานต่อไปนี้จะทำสิ่งที่ฉันต้องการ: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = SUM(TH.ActualCost) OVER ( PARTITION BY TH.ProductID ORDER BY TH.TransactionDate RANGE BETWEEN INTERVAL 45 DAY PRECEDING AND CURRENT ROW) FROM Production.TransactionHistory AS TH ORDER BY TH.ProductID, TH.TransactionDate, TH.ReferenceOrderID; น่าเศร้าที่RANGEขนาดของกรอบหน้าต่างไม่อนุญาตให้มีช่วงเวลาใน SQL Server ฉันรู้ว่าฉันสามารถเขียนวิธีการใช้แบบสอบถามย่อยและการรวมปกติ (ไม่ใช่หน้าต่าง): SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = ( SELECT SUM(TH2.ActualCost) …

7
หากชื่อของบุคคลนั้นเป็นโมฆะมันจะทำลายฐานข้อมูลได้อย่างไร?
ผมอ่านนี้บทความเกี่ยวกับบีบีซี มันบอกเล่าเรื่องราวของบุคคลที่ชื่อ Jenifer Null และวิธีที่เธอเผชิญกับปัญหาแบบวันต่อวันในขณะที่ใช้ฐานข้อมูลออนไลน์เช่นการจองตั๋วเครื่องบินธนาคารทางอินเทอร์เน็ตเป็นต้น ฉันไม่ชำนาญในฐานข้อมูลและฉันไม่ได้ใช้บ่อยนัก เมื่อฉันสร้างเว็บไซต์เพื่อการเรียนรู้การตรวจสอบความถูกต้องของฟอร์มเซิร์ฟเวอร์ใช้นิพจน์ทั่วไป จากสิ่งที่ฉันจำได้มันจะยอมรับชื่อ "Null" อย่างมีความสุข ฉันยังไม่ได้ลองเลย มีใครช่วยอธิบายด้านเทคนิคเมื่อสถานการณ์นี้จะเกิดขึ้น? การตรวจสอบความถูกต้องของฟอร์มกำลังทำstring == NULLสิ่งใดสิ่งหนึ่งหรือไม่ NULL is same as "NULL"ดังนั้นแม้ผมไม่คิดว่า

6
อะไรคือสาเหตุหลักของการหยุดชะงักและสามารถป้องกันได้?
เมื่อเร็ว ๆ นี้หนึ่งในแอปพลิเคชัน ASP.NET ของเราแสดงข้อผิดพลาดการหยุดชะงักของฐานข้อมูลและฉันถูกขอให้ตรวจสอบและแก้ไขข้อผิดพลาด ฉันจัดการเพื่อค้นหาสาเหตุของการหยุดชะงักเป็นขั้นตอนการจัดเก็บที่ปรับปรุงตารางภายในเคอร์เซอร์อย่างจริงจัง นี่เป็นครั้งแรกที่ฉันเห็นข้อผิดพลาดนี้และไม่รู้วิธีการติดตามและแก้ไขอย่างมีประสิทธิภาพ ฉันลองทุกวิธีที่เป็นไปได้ที่ฉันรู้และในที่สุดก็พบว่าตารางที่กำลังอัปเดตไม่มีคีย์หลัก! โชคดีที่มันเป็นคอลัมน์ตัวตน ฉันภายหลังพบนักพัฒนาที่เขียนสคริปต์ฐานข้อมูลสำหรับการปรับใช้ที่สับสน ฉันเพิ่มคีย์หลักและปัญหาได้รับการแก้ไข ฉันรู้สึกมีความสุขและกลับมาที่โครงการของฉันและทำการวิจัยเพื่อค้นหาสาเหตุของการหยุดชะงัก ... เห็นได้ชัดว่ามันเป็นเงื่อนไขการรอแบบวงกลมที่ทำให้เกิดการหยุดชะงัก การอัพเดตใช้เวลานานกว่าโดยไม่มีคีย์หลักมากกว่ากับคีย์หลัก ฉันรู้ว่ามันไม่ใช่ข้อสรุปที่ชัดเจนนั่นคือเหตุผลที่ฉันโพสต์ที่นี่ ... คีย์หลักที่หายไปเป็นปัญหาหรือไม่ มีเงื่อนไขอื่นใดที่ทำให้เกิดการหยุดชะงักอื่นนอกเหนือจาก (การกีดกันซึ่งกันและกันถือและรอไม่มีการจองล่วงหน้าและการรอแบบวงกลม)? ฉันจะป้องกันและติดตามการหยุดชะงักได้อย่างไร

6
อะไรคือวิธีที่แตกต่างในการแทนที่ ISNULL () ในส่วนคำสั่ง WHERE ที่ใช้เฉพาะค่าตัวอักษร?
สิ่งนี้ไม่เกี่ยวกับ: นี่ไม่ใช่คำถามเกี่ยวกับการสืบค้นทั้งหมดที่ยอมรับอินพุตของผู้ใช้หรือใช้ตัวแปร นี่เป็นเรื่องเกี่ยวกับเคียวรีที่ISNULL()ใช้ในส่วนWHEREคำสั่งเพื่อแทนที่NULLค่าด้วยค่า canary เพื่อเปรียบเทียบกับเพรดิเคตและวิธีต่างๆในการเขียนเคียวรีเหล่านั้นใหม่เพื่อให้SARGableใน SQL Server ทำไมคุณไม่มีที่นั่งตรงนั้นล่ะ? แบบสอบถามตัวอย่างของเราขัดต่อสำเนาโลคัลของฐานข้อมูล Stack Overflow บน SQL Server 2016 และค้นหาผู้ใช้ที่NULLมีอายุหรืออายุ <18 SELECT COUNT(*) FROM dbo.Users AS u WHERE ISNULL(u.Age, 17) < 18; แผนคิวรีแสดงการสแกนของดัชนีที่ไม่ได้จัดกลุ่มอย่างรอบคอบ ตัวดำเนินการสแกนแสดง (ขอบคุณส่วนเพิ่มเติมของ XML แผนการดำเนินการจริงใน SQL Server รุ่นล่าสุด) ที่เราอ่านทุกแถวของ stinkin โดยรวมแล้วเราอ่าน 9157 ครั้งและใช้เวลา CPU ประมาณครึ่งวินาที: Table 'Users'. Scan count 1, logical reads …
55 sql-server 

12
PostgreSQL ไม่ทำงานบน Mac
ข้อผิดพลาดในการอ่านทั้งหมด: psql: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว เซิร์ฟเวอร์ทำงานอยู่ภายในเครื่องและยอมรับการเชื่อมต่อบนซ็อกเก็ตโดเมน Unix "/tmp/.s.PGSQL.5432" หรือไม่ นี่เป็นครั้งที่สองที่ฉันตั้งค่า Postgresql ผ่าน Homebrew บน Mac ของฉันและฉันก็ไม่รู้ว่าเกิดอะไรขึ้น ก่อนหน้านี้มันได้ทำงาน เมื่อถึงจุดหนึ่งฉันต้องป้อนคำสั่งที่ทำให้เกิดความสับสน ฉันไม่แน่ใจ. ตอนนี้เมื่อใดก็ตามที่ฉันป้อนคำสั่ง SQL จากบรรทัดคำสั่งฉันได้รับข้อความด้านบน ฉันใช้คำสั่งเพื่อตรวจสอบว่าเซิร์ฟเวอร์ทำงานอยู่หรือไม่และเห็นได้ชัดว่าไม่ใช่ หากฉันพยายามเริ่มต้นเซิร์ฟเวอร์โดยใช้ $ postgres -D / usr / local / pgsql / data ฉันได้รับข้อผิดพลาดต่อไปนี้: postgres ไม่สามารถเข้าถึงไฟล์การกำหนดค่าเซิร์ฟเวอร์ "/usr/local/pgsql/data/postgresql.conf": ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ฉันถอนการติดตั้งและติดตั้ง Postgresql ใหม่ผ่าน Homebrew แล้ว แต่ปัญหายังคงอยู่ ฉันตกอยู่ในความสูญเสียอย่างสิ้นเชิงกับวิธีการทำงานนี้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม
55 postgresql 


4
InnoDB หรือ MyISAM ไหนเร็วกว่ากัน
MyISAM จะ "เร็วขึ้น" ได้อย่างไรกว่า InnoDB ถ้า MyISAM จำเป็นต้องอ่านข้อมูลในดิสก์หรือไม่ InnoDB ใช้บัฟเฟอร์พูลสำหรับดัชนีและข้อมูลและ MyISAM สำหรับดัชนีเท่านั้น

3
จะใช้มุมมองใน MySQL เมื่อใด
เมื่อสร้างตารางจากหลายการรวมเพื่อใช้ในการวิเคราะห์เมื่อใดที่จะใช้มุมมองกับการสร้างตารางใหม่ เหตุผลหนึ่งที่ฉันต้องการใช้มุมมองก็คือสคีมาฐานข้อมูลได้รับการพัฒนาโดยผู้ดูแลระบบของเราจากภายใน Ruby และฉันไม่คุ้นเคยกับ Ruby ฉันสามารถขอให้สร้างตาราง แต่ต้องการขั้นตอนเพิ่มเติมและฉันต้องการความยืดหยุ่นมากขึ้นเมื่อทำการพัฒนา / ทดสอบการรวมใหม่ ฉันเริ่มใช้มุมมองตามคำตอบของคำถามที่เกี่ยวข้องใน SO ( เมื่อใดที่จะใช้ R, เมื่อใดควรใช้ SQL ) คำตอบที่ได้รับการโหวตสูงสุดจะเริ่มต้น "ทำการเปลี่ยนแปลงข้อมูลใน SQL จนกว่าข้อมูลจะอยู่ในตารางเดียวแล้วทำส่วนที่เหลือใน R" ฉันเริ่มใช้มุมมอง แต่ฉันมีปัญหาเล็กน้อยเกี่ยวกับมุมมอง: ข้อความค้นหาช้าลงมาก มุมมองไม่ได้รับการเททิ้งจากการผลิตไปยังฐานข้อมูลสำรองที่ฉันใช้สำหรับการวิเคราะห์ มุมมองที่เหมาะสมสำหรับการใช้งานนี้? ถ้าเป็นเช่นนั้นฉันควรคาดหวังว่าจะได้รับการลงโทษหรือไม่ มีวิธีเพิ่มความเร็วคิวรีในการดูหรือไม่?

4
วิธีการเรียกใช้ psql บน Mac OS X
ฉันติดตั้ง PostgreSQL บนคอมพิวเตอร์ที่มี Mac OS X โดยใช้ตัวติดตั้งแบบคลิกเดียว จากนั้นฉันพยายามเข้าถึง PostgreSQL โดยใช้psqlคำสั่ง แต่ดูเหมือนจะไม่พร้อมใช้งาน ฉันได้รับข้อความนี้: psql -bash: psql: command not found ฉันต้องติดตั้งอะไรเพิ่มเติมหรือไม่ หรือฉันจะกำหนดค่า PostgreSQL เพื่อให้สามารถใช้กับคอมพิวเตอร์ได้อย่างไร

3
ฉันจะแทรกแถวซึ่งมีรหัสต่างประเทศได้อย่างไร
ใช้ PostgreSQL v9.1 ฉันมีตารางต่อไปนี้: CREATE TABLE foo ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, type VARCHAR(60) NOT NULL UNIQUE ); CREATE TABLE bar ( id BIGSERIAL NOT NULL UNIQUE PRIMARY KEY, description VARCHAR(40) NOT NULL UNIQUE, foo_id BIGINT NOT NULL REFERENCES foo ON DELETE RESTRICT ); สมมติว่าตารางแรกfooมีข้อมูลประชากรเช่นนี้: INSERT INTO …

2
วิธีสร้างพารามิเตอร์ Unicode และชื่อตัวแปร
งานทั้งหมดนี้: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCHAR(20)); GO CREATE UNIQUE CLUSTERED INDEX [¯\_(ツ)_/¯] ON [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]); GO INSERT INTO [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]) VALUES (N'[¯\_(ツ)_/¯]'); GO CREATE VIEW [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]; GO CREATE PROC [¯\_(ツ)_/¯].[sp_¯\_(ツ)_/¯] @Shrug NVARCHAR(20) AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] …

11
ผ่านพารามิเตอร์อาร์เรย์ไปยังกระบวนงานที่เก็บไว้
ฉันมีกระบวนการที่คว้าบันทึกจำนวนมาก (1,000 รายการ) และดำเนินการกับพวกเขาและเมื่อฉันทำเสร็จแล้วฉันต้องทำเครื่องหมายเป็นจำนวนมากว่าผ่านการประมวลผล ฉันสามารถระบุสิ่งนี้กับรายการรหัสขนาดใหญ่ ฉันกำลังพยายามหลีกเลี่ยงรูปแบบ "การอัพเดทในวง" ดังนั้นฉันจึงต้องการหาวิธีที่มีประสิทธิภาพมากขึ้นในการส่งถุง ID นี้ไปยัง MS SQL Server 2008 ที่เก็บไว้ proc ข้อเสนอ # 1 - พารามิเตอร์ที่มีมูลค่าของตาราง ฉันสามารถกำหนดประเภทตารางที่มีเพียง ID ฟิลด์และส่งตารางที่เต็มไปด้วย ID เพื่ออัปเดต ข้อเสนอ # 2 - พารามิเตอร์ XML (varchar) พร้อม OPENXML () ในเนื้อหาของ proc ข้อเสนอ # 3 - การแยกวิเคราะห์รายการ ฉันควรหลีกเลี่ยงสิ่งนี้ถ้าเป็นไปได้เพราะดูเหมือนว่าจะเทอะทะและผิดพลาดได้ง่าย การตั้งค่าใด ๆ ในหมู่เหล่านี้หรือความคิดใด ๆ ที่ฉันพลาดไป?

2
วิธีการเข้าร่วมตารางที่มีฟังก์ชั่นมูลค่าตาราง?
ฉันมีฟังก์ชั่นที่ผู้ใช้กำหนด: create function ut_FooFunc(@fooID bigint, @anotherParam tinyint) returns @tbl Table (Field1 int, Field2 varchar(100)) as begin -- blah blah end ตอนนี้ฉันต้องการเข้าร่วมในตารางอื่นเช่น: select f.ID, f.Desc, u.Field1, u.Field2 from Foo f join ut_FooFunc(f.ID, 1) u -- doesn't work where f.SomeCriterion = 1 ในคำอื่น ๆ สำหรับทุกFooระเบียนที่SomeCriterion1 ผมต้องการที่จะเห็นFoo IDและDescควบคู่ไปกับค่าของField1และField2ที่กลับมาจากการสำหรับการป้อนข้อมูลของut_FooFuncFoo.ID ไวยากรณ์ที่จะทำคืออะไร?

7
ทำไมไม่ใช้ตารางแทนมุมมองที่ปรากฏขึ้น
ฉันใหม่สำหรับฐานข้อมูล Oracle ถ้าฉันเข้าใจถูกต้องแล้ว materialized view คือมุมมองที่ชุดผลลัพธ์ถูกบันทึกเป็นตารางฟิสิคัลในฐานข้อมูลและมุมมอง / ตารางนี้จะรีเฟรชเบสในพารามิเตอร์บางตัว หากมุมมองถูกบันทึกเป็นตารางจริงทำไมไม่เก็บข้อมูลไว้ในตารางตั้งแต่แรก? ดังนั้นประโยชน์ของการใช้มุมมองที่เป็นรูปธรรมแทนที่จะเป็นตารางคืออะไร

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