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

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

2
การสร้างดัชนีแบบกลุ่มล้มเหลวในการสร้างตาราง
เราพบข้อผิดพลาดเมื่อเรียกใช้สคริปต์ต่อไปนี้ IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name') BEGIN CREATE TABLE Table_Name ( Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED , Field_Name_2 int NOT NULL , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED ) END โดยเฉพาะอย่างยิ่งมันคือการสร้างดัชนีคลัสเตอร์ที่แสดงข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 1018, ระดับ 15, สถานะ 1, บรรทัดที่ …

2
เครื่องมือเหล่านี้ยังคงใช้ได้หรือไม่?
ฉันกำลังดูการสัมมนาผ่านเว็บอายุ 7 ปีที่จัดทำโดย Brent Ozar ( https://youtu.be/U_Kle3gKaHc ) และได้ยินรายการแนะนำหลายรายการในเวลานั้น ยูทิลิตี้ SQLDiag SQLNexus เครื่องมือ PAL ที่ปรึกษาการปรับฐานข้อมูล / ตัวช่วยสร้าง BPA (ตัววิเคราะห์วิธีปฏิบัติที่ดีที่สุด) การจัดการตามนโยบายของเซิร์ฟเวอร์ SQL พวกเขาทั้งหมดยังคงใช้ / พิจารณาอยู่หรือมีสิ่งใหม่ที่แทนที่พวกเขาหรือไม่?
10 sql-server  tools 

3
SQL Server จัดการข้อมูลสำหรับการสืบค้นที่มีที่ว่างไม่เพียงพอในแคชบัฟเฟอร์อย่างไร
คำถามของฉันคือ SQL Server จะจัดการกับแบบสอบถามที่ต้องการดึงข้อมูลจำนวนมากลงในแคชบัฟเฟอร์ได้อย่างไร แบบสอบถามนี้จะมีการรวมหลายรายการดังนั้นชุดผลลัพธ์จึงไม่มีอยู่ในรูปแบบนี้บนดิสก์แล้วและจะต้องรวบรวมผลลัพธ์ แต่แม้หลังจากการรวบรวมก็ยังคงต้องการพื้นที่มากกว่าที่มีอยู่ในแคชบัฟเฟอร์ ฉันจะยกตัวอย่าง สมมติว่าคุณมีอินสแตนซ์ของ SQL Server ที่มีเนื้อที่แคชแคชรวม 6GB ฉันเรียกใช้คิวรีที่มีการรวมหลายตัวที่อ่านข้อมูล 7GB ได้ SQL Server สามารถตอบสนองต่อคำขอนี้ได้อย่างไร มันเก็บข้อมูลชั่วคราวใน tempdb หรือไม่? มันล้มเหลวหรือไม่ มันทำสิ่งที่เพิ่งอ่านข้อมูลจากดิสก์และรวบรวมส่วนในเวลาหรือไม่ นอกจากนี้จะเกิดอะไรขึ้นถ้าฉันพยายามคืนข้อมูลทั้งหมด 7GB นั่นจะเปลี่ยนวิธีจัดการกับ SQL Server หรือไม่ ฉันรู้อยู่แล้วว่าหลายวิธีในการแก้ไขปัญหานี้ฉันแค่อยากรู้ว่า SQL Server จัดการกับคำขอนี้เป็นการภายในเมื่อทำงานตามที่ระบุไว้ นอกจากนี้ฉันแน่ใจว่าข้อมูลนี้มีอยู่ที่ใดที่หนึ่ง แต่ฉันประสบความสำเร็จในการค้นหา

3
การสร้างดัชนีที่ไม่เป็นคลัสเตอร์บน SQL Server ที่คำนวณแบบไม่คอลัมน์
ฉันกำลังดิ้นรนเพื่อค้นหาเอกสารใด ๆ เกี่ยวกับวิธีที่ SQL Server จัดเก็บคอลัมน์ที่คำนวณได้แบบไม่ยืนยัน นำตัวอย่างต่อไปนี้: --SCHEMA CREATE TABLE dbo.Invoice ( InvoiceID INT IDENTITY(1, 1) PRIMARY KEY, CustomerID INT FOREIGN KEY REFERENCES dbo.Customer(CustomerID), InvoiceStatus NVARCHAR(50) NOT NULL, InvoiceStatusID AS CASE InvoiceStatus WHEN 'Sent' THEN 1 WHEN 'Complete' THEN 2 WHEN 'Received' THEN 3 END ) GO --INDEX CREATE NONCLUSTERED …

1
สิทธิ์ในทริกเกอร์เมื่อใช้ใบรับรองฐานข้อมูลข้าม
ฉันใช้ใบรับรองฐานข้อมูลข้าม ( ตามที่อธิบายโดย Erland Sommarskog ) เพื่อควบคุมการเข้าถึงฐานข้อมูลบางอย่างในสภาพแวดล้อมของฉัน (SQL Server 2008 R2) ฉันมีโพรซีเดอร์ที่เก็บไว้ในฐานข้อมูล A ซึ่งอัพเดตตารางในฐานข้อมูล B. มันใช้ได้กับโพรซีเดอร์ที่เก็บไว้ในฐานข้อมูล A และตารางในฐานข้อมูล B เสมอจนถึงตอนนี้ ฉันพยายามอัพเดทตารางใน db B แต่ตารางมีทริกเกอร์อยู่ ทริกเกอร์นี้กำลังแทรกข้อมูลเพิ่มเติมในตารางอื่นใน db B ฉันได้รับข้อผิดพลาด: ข่าวสารเกี่ยวกับ 916, ระดับ 14, สถานะ 1, กระบวนงาน table_trigger, บรรทัด 11 เซิร์ฟเวอร์หลัก "sql \ login" ไม่สามารถเข้าถึงฐานข้อมูล "B" ภายใต้บริบทความปลอดภัยปัจจุบัน ฉันพยายามให้สิทธิ์การแทรกสำหรับผู้ใช้ฐานข้อมูล B ที่เชื่อมโยงกับใบรับรองเพื่อแทรกลงในตารางอื่น แต่ไม่ได้แก้ไขข้อผิดพลาด ฉันมีตัวเลือกอื่นนอกเหนือจากการเปลี่ยนทริกเกอร์เพื่อใช้งานWITH …

3
สภาพแวดล้อมการจัดเตรียมฐานข้อมูลสำหรับบุคลากรที่ไม่ใช่ด้านไอที
ฉันกำลังเสนอสภาพแวดล้อมการจัดเตรียมฐานข้อมูลให้แผนกไอทีของฉัน แนวคิดก็คือบุคคลที่ไม่ใช่ด้านไอทีอย่างฉัน (นักวิเคราะห์ข้อมูลสาธารณะ) จะมีที่สำหรับทดสอบวิธีแก้ปัญหาแล้วนำไปใช้ในสภาพแวดล้อมจริงหรือขอให้ฝ่ายไอทีนำไปใช้หากจำเป็น มีเหตุผล / สถานการณ์สองสามข้อที่สภาพแวดล้อมนี้จะเป็นประโยชน์: ฉันมีสิทธิ์ฐานข้อมูลบางขั้นพื้นฐานในสภาพแวดล้อมฐานข้อมูลอยู่ของเรา ( create table, create viewฯลฯ ) ฉันจะทำให้การเปลี่ยนแปลงสคีมาประมาณสัปดาห์ละครั้ง แต่ดูเหมือนว่าบ้าสำหรับผมที่จะทดสอบและดำเนินการเปลี่ยนแปลงเหล่านี้ในสภาพแวดล้อมที่อยู่ มีการอ้างอิงที่นับไม่ถ้วนในฐานข้อมูลดังนั้นหากมีสิ่งใดผิดพลาดอาจเป็นหายนะ ฉันค่อนข้างจะทดสอบสิ่งต่าง ๆ ล่วงหน้าในสภาพแวดล้อมที่แยกต่างหาก ฉันไม่มีสิทธิ์พิเศษขั้นสูงบางอย่างเช่นcreate triggerหรือcreate functionในฐานข้อมูลสด นี่เป็นเรื่องปกติ แต่ฉันมีปัญหาเล็กน้อยที่สามารถแก้ไขได้โดยทริกเกอร์และ / หรือฟังก์ชั่น ฉันวางแผนที่จะเสนอว่าฉันจะได้รับอนุญาตเหล่านี้ในสภาพแวดล้อมการจัดเตรียมเพื่อให้ฉันสามารถพัฒนาและทดสอบความคิดบางอย่างและถ้าพวกเขาทำงานให้เสนอว่าไอทีจะนำไปใช้ในสภาพแวดล้อมจริง โดยทั่วไปแผนกไอทีของฉันไม่มีเวลาหรือทรัพยากรในการพัฒนาโซลูชันสำหรับฉัน มันง่ายจริงๆ ดังนั้นถ้าฉันสามารถทำงานได้ด้วยตัวเองปัญหาของฉันก็มีแนวโน้มที่จะได้รับการแก้ไข 'สภาพแวดล้อมการจัดเตรียมสำหรับบุคลากรที่ไม่ใช่ด้านไอที' ดูเหมือนจะเป็นวิธีที่ดีพอสำหรับฉัน แต่โดยความจริงแล้วฉันเพิ่งคิดขึ้นมา ฉันไม่มีความคิดว่ามันจะเกิดขึ้นได้อย่างไรในโลกไอที / ฐานข้อมูล มีการฝึกฝนด้านไอที / ฐานข้อมูลใด ๆ ที่เหมาะสมกับสถานการณ์นี้หรือไม่? (ฉันอยู่ในแนวทางที่ถูกต้องเมื่อเสนอสภาพแวดล้อมการจัดเตรียมฐานข้อมูลสำหรับบุคลากรที่ไม่ใช่ด้านไอทีหรือไม่)

4
รีเซ็ตผลรวมการรันตามคอลัมน์อื่น
กำลังพยายามคำนวณผลรวมสะสม แต่ควรรีเซ็ตเมื่อยอดรวมสะสมมากกว่าค่าคอลัมน์อื่น create table #reset_runn_total ( id int identity(1,1), val int, reset_val int, grp int ) insert into #reset_runn_total values (1,10,1), (8,12,1),(6,14,1),(5,10,1),(6,13,1),(3,11,1),(9,8,1),(10,12,1) SELECT Row_number()OVER(partition BY grp ORDER BY id)AS rn,* INTO #test FROM #reset_runn_total รายละเอียดดัชนี: CREATE UNIQUE CLUSTERED INDEX ix_load_reset_runn_total ON #test(rn, grp) ข้อมูลตัวอย่าง +----+-----+-----------+-----+ | id | val | …

3
ไม่สามารถกู้คืนฐานข้อมูลที่เปิดใช้งาน TDE เมื่อใช้ MAXTRANSFERSIZE และ CHECKSUM
Update : @AmitBanerjee - ผู้จัดการโปรแกรมอาวุโสสำหรับกลุ่มผลิตภัณฑ์ Microsoft SQL Server ยืนยันว่า MS จะตรวจสอบปัญหาเนื่องจากมีข้อบกพร่อง มีใครพบปัญหาในการกู้คืนข้อมูลสำรองใน SQL Server 2016 ที่เปิดใช้งาน TDE และใช้MAXTRANSFERSIZE> 65536 (ในกรณีของฉันฉันเลือก 65537 เพื่อให้สามารถบีบอัดฐานข้อมูล TDE ) และCHECKSUM? ด้านล่างนี้เป็นคำซ้ำ: --- create database create database test_restore go -- create table create table test_kin (fname char(10)) go -- Enable TDE use master GO CREATE CERTIFICATE …

1
เปลี่ยนคีย์หลักจาก IDENTITY เป็นคอลัมน์ที่คำนวณแล้วโดยใช้ COALESCE
ในความพยายามที่จะแยกแอปพลิเคชันออกจากฐานข้อมูลเสาหินของเราเราได้พยายามเปลี่ยนคอลัมน์ INT IDENTITY ของตารางต่างๆให้เป็นคอลัมน์ที่คำนวณแบบ PERSISTED ที่ใช้ COALESCE โดยพื้นฐานแล้วเราต้องการแอปพลิเคชั่นแยกสองตัวที่ยังคงสามารถอัปเดตฐานข้อมูลสำหรับข้อมูลทั่วไปที่แชร์ในแอปพลิเคชันจำนวนมากในขณะที่ยังคงอนุญาตให้แอปพลิเคชันที่มีอยู่สร้างข้อมูลในตารางเหล่านี้โดยไม่ต้องใช้ โดยพื้นฐานแล้วเราได้ย้ายจากคำจำกัดความคอลัมน์ของ; PkId INT IDENTITY(1,1) PRIMARY KEY ถึง; PkId AS AS COALESCE(old_id, external_id, new_id) PERSISTED NOT NULL, old_id INT NULL, -- Values here are from existing records of PkId before table change external_id INT NULL, new_id INT IDENTITY(2000000,1) NOT NULL ในทุกกรณี PkId ยังเป็นคีย์หลักและในทุกกรณียกเว้นเพียงกรณีเดียวก็คือ …

3
ชื่อเครือข่ายที่ระบุไม่สามารถใช้ได้อีกต่อไป
เรามีแอพพลิเคชั่นที่เข้าถึงฐานข้อมูล (SQL Server 2014 Enterprise Edition) แอปพลิเคชันเรียกขั้นตอนที่เก็บไว้เพื่อเข้าถึงฐานข้อมูล ทุกอย่างทำงานได้ดีจนกระทั่งเมื่อเร็ว ๆ นี้เริ่มส่งข้อผิดพลาดต่อไปนี้และหยุดแอปพลิเคชัน การเริ่มต้นแอพใหม่แก้ไขปัญหาชั่วคราว แต่กลับพบข้อผิดพลาดเดิมหลัง ข้อผิดพลาด: ข้อผิดพลาดระดับการขนส่งเกิดขึ้นเมื่อได้รับผลลัพธ์จากเซิร์ฟเวอร์ (ผู้ให้บริการ: ผู้ให้บริการ TCP ข้อผิดพลาด: 0 - ชื่อเครือข่ายที่ระบุไม่มีให้บริการอีกต่อไป) ฉันทำวิจัยจำนวนมากซึ่งส่วนใหญ่ชี้ให้เห็นว่าเป็นปัญหาเครือข่าย แต่ไม่สามารถหาสิ่งใดเพื่อแก้ไขปัญหาได้จริง มีใครรู้บ้างว่าการเปลี่ยนแปลงใดที่ฉันควรจะทำในด้านฐานข้อมูลเพื่อแก้ไขปัญหานี้ ฉันขอขอบคุณข้อเสนอแนะใด ๆ

1
SQL Server - ทำไมฟังก์ชั่นของหน้าต่างจึงไม่ได้รับอนุญาตให้อัพเดทได้?
เมื่อใช้คำสั่งอัปเดตเช่นข้อความด้านล่างฉันได้รับข้อผิดพลาดที่แจ้งให้ฉันทราบ ฟังก์ชั่นที่มีหน้าต่างสามารถปรากฏได้ในคำสั่ง SELECT หรือ ORDER BY UPDATE dbo.Dim_Chart_of_Account SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) ฉันรู้ว่านี่สามารถทำงานได้อย่างง่ายดายโดยใช้ cte ที่อัพเดตได้เช่นด้านล่าง WITH my_cte AS ( SELECT [Account_Order], LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) AS acc_order_lag FROM Dim_Chart_of_Account ) UPDATE my_cte SET [Account_Order] = acc_order_lag คำถามของฉันคือมีเหตุผลใดบ้างที่ทำให้สิ่งนี้ไม่ได้รับอนุญาตในคำแถลงการปรับปรุงฉันควรหลีกเลี่ยงการใช้ cte ที่อัพเดตได้เป็นวิธีแก้ปัญหาหรือไม่ ความกังวลของฉันคือว่ามีปัญหาเมื่อใช้ฟังก์ชั่นหน้าต่างที่มีคำสั่งปรับปรุงและดังนั้นฉันต้องการที่จะเข้าใจว่านี่เป็นวิธีที่ยอมรับได้หรือควรหลีกเลี่ยง

1
การเอาชนะข้อ จำกัด ของ SQL Server Express Edition
Microsoft SQL Server 2014 Express edition มีการ จำกัด ขนาดฐานข้อมูลไว้ที่ 10GB ตอนนี้เป็นเพียงอินสแตนซ์เดียวหรือขนาดโดยรวมที่รุ่นจะอนุญาตหรือไม่ หรือหมายความว่าฉันสามารถมีฐานข้อมูลได้มากเท่าที่ใช้รุ่นที่ให้แต่ละฐานข้อมูลน้อยกว่า 10GB

3
ข้อ จำกัด ด้านความซื่อสัตย์ในฐานข้อมูลเชิงสัมพันธ์ - เราควรมองข้ามหรือไม่?
ฉันกำลังสนทนาอย่างถาวรกับผู้พัฒนาของ บริษัท ที่ฉันทำงานอยู่เพราะพวกเขาบอกว่าเป็นการดีกว่าที่จะกำจัดการบังคับใช้ความสัมพันธ์ (ผ่านคำจำกัดความของคีย์ต่างประเทศ) ในฐานข้อมูลเชิงสัมพันธ์เพื่อเพิ่มความเร็วในการสืบค้นที่ใหญ่ขึ้น ประสิทธิภาพ. แพลตฟอร์มภายใต้การพิจารณาคือ MySQL 5.x และไม่มีการตั้งค่า KEY ต่างประเทศแม้ข้อ จำกัด หลักบางประการของตารางที่เกี่ยวข้องจะหายไปซึ่งอย่างน้อยสำหรับฉันก็ไม่สมเหตุสมผล อาจจะถูกและผิด แต่ฉันไม่มีข้อโต้แย้งเพียงพอที่จะพูดคุยเกี่ยวกับสถานการณ์นี้ นี่เป็นวิธีที่ได้รับความนิยมเป็นเวลาสามปีแล้ว ฉันใหม่ใน บริษัท นี้ (เพียงหนึ่งเดือน) แต่เป็นผลิตภัณฑ์ "งาน" มีลังเลที่จะปรับปรุงฐานข้อมูล ไม่เป็นไรสิ่งแรกที่ฉันสังเกตเห็นคือหน้าหนึ่งใช้เวลาโหลด 1 นาที (ใช่ 60 วินาที!) หนึ่งในข้อเรียกร้องที่อยู่เบื้องหลังสถานะของกิจการในปัจจุบันคือฐานข้อมูล“ denormalized” นั้นเร็วกว่าฐานข้อมูลปกติ แต่ฉันไม่เชื่อว่าเป็นเรื่องจริง ข้อความค้นหาที่เกี่ยวข้องส่วนใหญ่รวมการดำเนินการของ JOIN ซึ่งทำให้การทำงานช้ามากและช้ามากด้วยข้อมูลจำนวนมาก (ฐานข้อมูลมีจำนวนแถวนับล้าน) โดยทั่วไปการจัดการการดำเนินงาน "CRUD" ถูกนำไปใช้ในระดับรหัสโปรแกรมแอปพลิเคชัน ตัวอย่างเช่นในการลบข้อมูลบางส่วนจากสมมติว่าTableA: มีความจำเป็นต้องตรวจสอบครั้งแรกได้ทันทีหากมีความสัมพันธ์ระหว่างแถวของบางTableAและTableB, ในกรณีที่ความสัมพันธ์ดังกล่าว“ ตรวจพบ” แล้วรหัสโปรแกรมแอปจะไม่อนุญาตให้ลบแถวที่เกี่ยวข้องแต่ หากรหัสโปรแกรมแอปล้มเหลวด้วยเหตุผลบางอย่างการดำเนินการลบจะ“ สำเร็จ” ไม่ว่าจะมีความสัมพันธ์ใด ๆ …

3
เหตุใดจึงตั้งค่าสถิติการอัปเดตอัตโนมัติเป็นเท็จ
ฉันเพิ่งได้รับ SQL Server ประมาณ 20 อินสแตนซ์ซึ่งเป็นส่วนหนึ่งของโครงการการได้มาที่กว้างขึ้น ฉันอยู่ระหว่างการประเมินประสิทธิภาพและฉันไม่ชอบวิธีการบำรุงรักษาตามแผนการที่วางไว้ ฉันเห็นดัชนีแบบครอบคลุมรายวันสร้างใหม่ (ฉันสามารถจัดการกับสิ่งนี้ได้) และการอัปเดตสถิติรายวันด้วยตนเอง ประมาณครึ่งหนึ่งของฐานข้อมูลได้รับการตั้งค่าเป็นสถิติการอัพเดทอัตโนมัติ = เท็จด้วยเหตุผลที่ไม่ชัดเจนนอกเหนือจากที่ฉันบอกก็คือการลด 'ปัญหาประสิทธิภาพ' ... ฉันมักจะคิดและทำงานเพื่อตั้งค่านี้เป็น True และรู้สึกว่าการปรับปรุงด้วยตนเองไม่จำเป็นถ้าการตั้งค่านี้เป็นจริง ฉันผิดหรือเปล่า? ทุกคนสามารถอธิบายได้ว่าประโยชน์ที่จะได้รับในการตั้งค่านี้เป็นเท็จ แต่ทำการอัพเดทด้วยตนเองทุกวันแทนหรือไม่ ฉันควรพูดถึงว่าฐานข้อมูลบางส่วนนั้นมีการทำธุรกรรมสูง (มีการแทรกการลบการอัปเดตต่อวันเป็นจำนวนมาก) อื่น ๆ มีอัตราการทำธุรกรรมต่ำและบางรายการเป็นแบบอ่านอย่างเดียว ไม่มีการสัมผัสหรือเหตุผลว่าการตั้งค่าการอัปเดตอัตโนมัติเป็นเท็จ ดูเหมือนจะเป็นลอตเตอรี

3
อะไรคือผลของการไม่ระบุ NOT NULL ใน PostgreSQL สำหรับฟิลด์ที่ไม่สามารถเป็นโมฆะได้?
ฉันมีแอปพลิเคชัน (ข้อมูลถูกเก็บไว้ใน PostgreSQL) ซึ่งส่วนใหญ่ของเขตข้อมูลในตารางจะไม่ว่างเสมอ แต่สคีมาสำหรับตารางเหล่านี้ไม่ได้บังคับใช้สิ่งนี้ ตัวอย่างเช่นดูที่ตารางปลอมนี้: CREATE TABLE "tbl" ( "id" serial, "name" varchar(40), "num" int, "time" timestamp PRIMARY KEY ("id"), UNIQUE ("id") ); นอกจากนี้ยังname, num, timeไม่ได้ระบุไว้อย่างชัดเจนว่าNOT NULLในความเป็นจริงพวกเขาเป็นเพราะการบังคับใช้ที่เกิดขึ้นในด้านการประยุกต์ใช้ ความรู้สึกของฉันคือมันควรจะเปลี่ยน แต่ความแตกต่างคือระดับแอปพลิเคชันทำให้แน่ใจว่าค่า Null ไม่สามารถปรากฏที่นี่และไม่มีใครปรับเปลี่ยนตารางด้วยตนเอง คำถามของฉันคืออะไรประโยชน์ (ประสิทธิภาพการจัดเก็บความสอดคล้องอย่างอื่น) และข้อเสีย (สมมติว่าฉันได้ตรวจสอบแล้วว่าไม่มีโมฆะในปัจจุบันและจากตรรกะทางธุรกิจควรไม่มีโมฆะ) โดยการตั้งค่าNOT NULLข้อ จำกัด ที่ชัดเจน? เรามีขั้นตอนการตรวจสอบโค้ดที่ดีและมีเอกสารที่ดีพอสมควรดังนั้นความเป็นไปได้ที่คนใหม่บางคนจะส่งมอบสิ่งที่ทำลายข้อ จำกัด นี้ไม่เพียงพอที่จะพิสูจน์การเปลี่ยนแปลง นี่ไม่ใช่การตัดสินใจของฉันดังนั้นนี่คือเหตุผลที่ฉันกำลังมองหาเหตุผลอื่น ๆ ในความคิดของฉันถ้าสิ่งที่ไม่สามารถเป็นโมฆะและฐานข้อมูลช่วยให้คุณระบุว่าสิ่งที่ไม่เป็นโมฆะ - เพียงแค่ทำมัน โดยเฉพาะอย่างยิ่งถ้าการเปลี่ยนแปลงนั้นง่ายมาก

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