เหตุใดการออกแบบจำนวนมากจึงไม่สนใจการทำให้เป็นมาตรฐานใน RDBMS


23

ฉันได้เห็นการออกแบบมากมายที่การทำให้เป็นมาตรฐานไม่ใช่สิ่งแรกที่ต้องพิจารณาในขั้นตอนการตัดสินใจ

ในหลายกรณีการออกแบบเหล่านั้นมีคอลัมน์มากกว่า 30 คอลัมน์และแนวทางหลักคือ "วางทุกอย่างไว้ในที่เดียวกัน"

ตามสิ่งที่ฉันจำได้ว่าการทำให้เป็นมาตรฐานเป็นหนึ่งในสิ่งแรกที่สำคัญที่สุดดังนั้นทำไมบางครั้งมันถึงหลุดง่าย?

แก้ไข:

มันเป็นความจริงหรือไม่ที่สถาปนิกและผู้เชี่ยวชาญที่ดีเลือกการออกแบบที่ผิดปกติในขณะที่นักพัฒนาที่ไม่มีประสบการณ์เลือกตรงกันข้าม อะไรคือข้อโต้แย้งในการเริ่มต้นการออกแบบของคุณโดยคำนึงถึงการฟื้นฟูสภาพ


7
เพราะฐานข้อมูลปกติจำเป็นต้องมีจำนวนมากเข้าร่วมในแบบสอบถามที่น่ารำคาญที่สุดแม้กระทั่ง
วงล้อประหลาด

1
การเข้าร่วมเหล่านั้นจะยังคงต้องเกิดขึ้นแม้ถูกซ่อนไว้ด้วยมุมมอง
วงล้อประหลาด

29
โปรแกรมเมอร์จำนวนมากไม่รู้พื้นฐานของโมเดลเชิงสัมพันธ์
mike30

10
"ทำให้ปกติเป็นปกติจนกว่ามันจะเจ็บปวด codinghorror.com/blog/2008/07/…มีคำตอบที่ดี
Matthew Steeples

3
พวกเขาไม่สนใจเพราะไม่ต้องตอบ DBAs นักวิเคราะห์ BI หรือผู้ตรวจสอบความปลอดภัย
Aaronaught

คำตอบ:


19

สิ่งที่น่าสนใจเกี่ยวกับคำถามและคำตอบของกระทู้นี้คือมีคำถาม 3 ข้อ ทุกคนตอบคำถามแตกต่างกันและแทบจะไม่มีใครตอบคำถามแรกได้:

  1. ทำไมจะไม่ได้ฐานข้อมูลบางอย่างในป่าปกติ?
  2. ทำไม / เมื่อควรจะเป็นฐานข้อมูลที่ปกติจะdenormalized ?
  3. ในสถานการณ์ใดบ้างที่เป็นอันตรายหรือไม่จำเป็นที่จะต้องทำให้เป็นมาตรฐานในตอนแรก?

ผู้อ่านที่แจ้งเตือนจะทราบว่าคำถามเหล่านี้แตกต่างกันมากและฉันจะพยายามตอบคำถามแต่ละข้อแยกกันโดยหลีกเลี่ยงรายละเอียดมากเกินไป โดย "มากเกินไป" ฉันหมายความว่าฉันไม่คิดว่านี่เป็นบริบทที่เหมาะสมที่จะทำการอภิปรายเพิ่มเติมเกี่ยวกับข้อดีของข้อโต้แย้งต่าง ๆ เพื่อสนับสนุนหรือต่อต้านการทำให้เป็นมาตรฐาน ฉันแค่จะอธิบายว่าข้อโต้แย้งเหล่านั้นคืออะไรเขียนรายการคำเตือนสักสองสามข้อและบันทึกปรัชญาสำหรับคำถามที่เฉพาะเจาะจงมากขึ้นหากพวกเขาเคยเกิดขึ้น

นอกจากนี้ในคำตอบนี้ฉันสมมติว่า"การทำให้เป็นมาตรฐาน"หมายถึง"BCNF, 3NF หรืออย่างน้อย 2NF"เนื่องจากเป็นระดับของการทำให้เป็นมาตรฐานที่ผู้ออกแบบมักจะบรรลุ มันยากที่จะเห็นการออกแบบ 4NF หรือ 5NF; แม้ว่าพวกเขาจะไม่ใช่เป้าหมายที่เป็นไปไม่ได้อย่างแน่นอน แต่พวกเขาก็กังวลกับความหมายของความสัมพันธ์มากกว่าแค่การเป็นตัวแทนของพวกเขาซึ่งต้องการความรู้มากขึ้นเกี่ยวกับโดเมน

ดังนั้นเป็นต้นไปและขึ้นไป:

1. ทำไมฐานข้อมูลบางส่วนใน wild จึงไม่ได้มาตรฐาน

คำตอบสำหรับเรื่องนี้อาจเป็น "เพราะพวกเขาไม่ควรเป็น" แต่การทำให้สมมติฐานนั้นถูกต้องเป็นงานนักสืบที่น่าสงสาร เราจะไม่ก้าวหน้าอย่างมากในฐานะสังคมหากเราดำเนินการตามข้อสันนิษฐานเสมอว่าสิ่งใดก็ตามที่ควรจะเป็น

เหตุผลที่แท้จริงที่ฐานข้อมูลไม่ได้รับการทำให้เป็นมาตรฐานในตอนแรกมีความซับซ้อนมากขึ้น นี่คือ 5 อันดับแรกที่ฉันเจอ:

  • นักพัฒนาที่ออกแบบมันไม่รู้หรือไม่เข้าใจว่าจะทำให้เป็นมาตรฐานได้อย่างไร หลักฐานนี้มาในรูปแบบของอื่น ๆ อีกมากมายที่มาพร้อมกับตัวเลือกการออกแบบที่ไม่ดีเช่นใช้คอลัมน์ varchar สำหรับทุกอย่างหรือมีระเบียบปาเก็ตตี้ของความหมายของตารางและชื่อคอลัมน์ และฉันขอยืนยันกับคุณว่าฉันเห็นฐานข้อมูล "ของจริง" ที่เลวร้ายพอ ๆ กับในบทความ TDWTF

  • นักพัฒนาผู้ออกแบบก็ไม่ได้ดูแลหรือเป็นอย่างแข็งขันกับการฟื้นฟูบนหลักการ หมายเหตุที่นี่ฉันไม่ได้พูดถึงกรณีที่มีการตัดสินใจอย่างรอบคอบเพื่อไม่ให้เป็นมาตรฐานตามการวิเคราะห์เชิงบริบท แต่แทนที่จะเป็นทีมหรือ บริษัท ที่การทำให้บรรทัดฐานมีความเข้าใจที่มากขึ้นหรือน้อยลง แต่ไม่สนใจหรือหลีกเลี่ยงนิสัย อีกครั้งที่พบบ่อยที่น่าประหลาดใจ

  • ซอฟต์แวร์ทำ / เคยทำโครงการ Brownfieldแล้ว นักพิถีพิถันหลายคนมองข้ามธุรกิจที่ชอบด้วยกฎหมายนี้อย่างสมบูรณ์มากกว่าเหตุผลทางเทคนิค บางครั้งคุณไม่ได้รับการออกแบบฐานข้อมูลใหม่ตั้งแต่เริ่มต้นคุณต้องเข้าสู่ schema ดั้งเดิมที่มีอยู่และการพยายามทำให้เป็นปกติในจุดนั้นอาจทำให้เกิดความเจ็บปวดมากเกินไป 3NF ไม่ได้ถูกคิดค้นจนกระทั่งปี 1971 และบางระบบ - โดยเฉพาะระบบการเงิน / บัญชี - ทำให้รากของพวกเขากลับมายิ่งกว่านั้นอีก!

  • ฐานข้อมูลเดิมเป็นมาตรฐานแต่การสะสมของการเปลี่ยนแปลงเล็กน้อยในช่วงระยะเวลานานและ / หรือทีมงานที่มีการกระจายอย่างกว้างขวางได้แนะนำรูปแบบการทำซ้ำที่ละเอียดอ่อนและการละเมิดอื่น ๆ ของรูปแบบปกติใด ๆ กล่าวอีกนัยหนึ่งคือการสูญเสียการฟื้นฟูโดยไม่ได้ตั้งใจและใช้เวลาน้อยเกินไปในการปรับโครงสร้างใหม่

  • การตัดสินใจทางธุรกิจอย่างรอบคอบนั้นไม่ได้ใช้เวลาในการวิเคราะห์ธุรกิจหรือการออกแบบฐานข้อมูลและเพียงแค่ "ทำให้เสร็จ" นี่มักเป็นเศรษฐกิจที่ผิดพลาดและในที่สุดจะกลายเป็นรูปแบบของหนี้ทางเทคนิคแต่บางครั้งก็เป็นการตัดสินใจที่มีเหตุผลอย่างน้อยที่สุดก็ขึ้นอยู่กับข้อมูลที่เป็นที่รู้จักในเวลา - ตัวอย่างเช่นฐานข้อมูลอาจมีเจตนาเป็นต้นแบบ การส่งเสริมการใช้งานการผลิตเนื่องจากข้อ จำกัด ด้านเวลาหรือการเปลี่ยนแปลงในสภาพแวดล้อมทางธุรกิจ

2. ทำไม / เมื่อใดที่ฐานข้อมูลปกติควรถูกทำให้เป็นมาตรฐาน?

การสนทนานี้มักจะเกิดขึ้นเมื่อฐานข้อมูลเป็นปกติจะเริ่มต้นด้วย ไม่ว่าจะเป็นการแสดงที่ไม่ดีหรือมีการทำซ้ำจำนวนมากในการสอบถาม (เชื่อมต่อ) และทีมรู้สึกถูกหรือผิดที่พวกเขาไปไกลเท่าที่จะทำได้ด้วยการออกแบบในปัจจุบัน เป็นเรื่องสำคัญที่จะต้องทราบว่าการทำให้เป็นมาตรฐานนั้นช่วยปรับปรุงประสิทธิภาพได้เกือบตลอดเวลาและมีหลายทางเลือกในการกำจัดการเข้าร่วมที่มากเกินไปเมื่อการทำให้มาตรฐานกลับคืนสู่สภาพปกติจะทำงานกับคุณได้

  • สร้างมุมมองที่จัดทำดัชนีซึ่งสรุปพื้นที่ปัญหาที่พบบ่อยที่สุด DBMS ที่ทันสมัยมีความสามารถในการทำให้พวกเขาแทรกหรือปรับปรุงได้ (เช่นINSTEAD OFทริกเกอร์SQL Server ) สิ่งนี้มีค่าใช้จ่ายเล็กน้อยต่อคำสั่ง DML ในตาราง / ดัชนีพื้นฐาน แต่โดยทั่วไปเป็นตัวเลือกแรกที่คุณควรลองเพราะเกือบจะเป็นไปไม่ได้ที่จะพลาดและไม่มีค่าใช้จ่ายในการบำรุงรักษา แน่นอนไม่ใช่ทุกคำถามที่สามารถเปลี่ยนเป็นมุมมองที่จัดทำดัชนี - แบบสอบถามแบบรวมเป็นสิ่งที่ลำบากที่สุด ซึ่งนำเราไปสู่รายการถัดไป ...

  • สร้างตารางรวมที่มีความผิดปกติที่ทริกเกอร์อัพเดทโดยอัตโนมัติ ตารางเหล่านี้อยู่นอกเหนือไปตารางปกติและรูปแบบชนิดของCQRSรุ่น อีกรุ่นหนึ่งที่ได้รับความนิยมมากในปัจจุบันคือการใช้ pub / sub เพื่ออัปเดตโมเดลเคียวรีซึ่งให้ประโยชน์ของแบบอะซิงโครนัสแม้ว่าจะไม่เหมาะในกรณีที่หายากมากซึ่งข้อมูลไม่สามารถค้างได้

  • บางครั้งมุมมองที่จัดทำดัชนีเป็นไปไม่ได้อัตราการทำธุรกรรมและปริมาณข้อมูลสูงเกินไปที่จะยอมรับทริกเกอร์ที่มีประสิทธิภาพที่ยอมรับได้และแบบสอบถามจะต้องส่งคืนข้อมูลเรียลไทม์เสมอ สถานการณ์เหล่านี้เป็นของหายาก - ฉันคาดเดาได้ยากว่าพวกเขาอาจนำไปใช้กับสิ่งต่าง ๆ เช่นการซื้อขายความถี่สูงหรือฐานข้อมูลการบังคับใช้กฎหมาย / ข่าวกรอง - แต่พวกเขาสามารถมีอยู่ได้ ในกรณีเหล่านี้คุณไม่มีตัวเลือกจริงๆยกเว้นการทำให้ตารางต้นฉบับผิดปกติ

3. ในสถานการณ์ใดที่เป็นอันตรายหรือไม่จำเป็นที่จะต้องทำให้เป็นมาตรฐานในตอนแรก?

อันที่จริงมีตัวอย่างที่ดีหลายอย่างที่นี่:

  • ถ้าฐานข้อมูลจะถูกใช้เพียงสำหรับการรายงานการวิเคราะห์ / โดยทั่วไปแล้วนี่หมายความว่ามีฐานข้อมูลปกติเพิ่มเติมที่ใช้สำหรับ OLTP ซึ่งมีการซิงโครไนซ์กับฐานข้อมูลการวิเคราะห์เป็นระยะ ๆ ผ่าน ETL หรือการส่งข้อความ

  • เมื่อมีการบังคับใช้แบบจำลองที่เป็นมาตรฐานจะต้องมีการวิเคราะห์ที่ซับซ้อนโดยไม่จำเป็นของข้อมูลที่เข้ามา ตัวอย่างนี้อาจเป็นระบบที่ต้องการเก็บหมายเลขโทรศัพท์ที่รวบรวมจากระบบภายนอกหรือฐานข้อมูลต่าง ๆ คุณสามารถทำให้รหัสการโทรและรหัสพื้นที่ผิดปกติได้ แต่คุณต้องพิจารณารูปแบบที่เป็นไปได้ทั้งหมดหมายเลขโทรศัพท์ที่ไม่ถูกต้องหมายเลขโต๊ะเครื่องแป้ง (1-800-GET-STUFF) ทั้งหมดไม่ต้องพูดถึงตำแหน่งที่ตั้งอื่น มักจะมีปัญหามากกว่าค่าใช้จ่ายและหมายเลขโทรศัพท์มักจะถูกผลักลงในฟิลด์เดียวเว้นแต่ว่าคุณมีความต้องการทางธุรกิจเฉพาะสำหรับรหัสพื้นที่ด้วยตัวเอง

  • เมื่อฐานข้อมูลเชิงสัมพันธ์เป็นหลักเพื่อให้การสนับสนุนการทำธุรกรรมสำหรับฐานข้อมูลเพิ่มเติมที่ไม่ใช่เชิงสัมพันธ์ ตัวอย่างเช่นคุณอาจใช้ฐานข้อมูลเชิงสัมพันธ์เป็นคิวข้อความหรือเพื่อติดตามสถานะของธุรกรรมหรือ saga เมื่อข้อมูลหลักถูกเก็บไว้ใน Redis หรือ MongoDB หรืออะไรก็ตาม กล่าวอีกนัยหนึ่งข้อมูลคือ "ข้อมูลควบคุม" ปกติแล้วจะไม่มีจุดในการทำให้ข้อมูลเป็นปกติซึ่งไม่ใช่ข้อมูลธุรกิจจริงๆ

  • สถาปัตยกรรมที่มุ่งเน้นบริการที่ใช้ฐานข้อมูลร่วมกัน นี่เป็นบิตแปลก ๆ แต่ใน SOA จริงคุณจะต้องมีข้อมูลซ้ำซ้อนในบางครั้งเนื่องจากบริการไม่ได้รับอนุญาตให้สอบถามข้อมูลของกันและกันโดยตรง หากพวกเขาเกิดขึ้นจะได้รับการแบ่งปันฐานข้อมูลทางกายภาพเดียวกันข้อมูลจะปรากฏที่จะไม่ปกติ - แต่โดยทั่วไปแล้วข้อมูลที่เป็นเจ้าของโดยการบริการของแต่ละคนจะยังคงปกติยกเว้นในกรณีที่เป็นหนึ่งในปัจจัยบรรเทาอื่น ๆ ที่อยู่ในสถานที่ ตัวอย่างเช่นบริการการเรียกเก็บเงินอาจเป็นเจ้าของกิจการบิล แต่บริการบัญชีจำเป็นต้องได้รับและเก็บวันที่เรียกเก็บเงินและจำนวนเงินเพื่อรวมไว้ในรายได้สำหรับปีนั้น

ฉันแน่ใจว่ามีเหตุผลเพิ่มเติมที่ฉันไม่ได้ระบุไว้ สิ่งที่ฉันได้รับในสาระสำคัญคือพวกเขาค่อนข้างเฉพาะและจะค่อนข้างชัดเจนเมื่อพวกเขามาในทางปฏิบัติ ฐานข้อมูล OLAP ควรใช้แบบแผนของสตาร์ดังนั้นควรมีการทำสำเนาซ้ำเป็นต้นหากคุณกำลังทำงานกับแบบจำลองสถาปัตยกรรมที่รู้จักกันดีซึ่งไม่สามารถใช้งานกับการทำให้เป็นมาตรฐานได้ โดยทั่วไปแล้วตัวแบบสถาปัตยกรรมจะมีความสำคัญมากกว่าตัวแบบข้อมูล

และเพื่อตอบคำถามสุดท้าย:

มันเป็นความจริงหรือไม่ที่สถาปนิกและผู้เชี่ยวชาญที่ดีเลือกการออกแบบที่ผิดปกติในขณะที่นักพัฒนาที่ไม่มีประสบการณ์เลือกตรงกันข้าม อะไรคือข้อโต้แย้งในการเริ่มต้นการออกแบบของคุณโดยคำนึงถึงการฟื้นฟูสภาพ

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

ฐานข้อมูล 3NF หรือ BCNF มักจะเป็นจุดเริ่มต้นที่ดีสำหรับการวิเคราะห์เพราะมันได้รับการทดลองและพิสูจน์แล้วว่าประสบความสำเร็จในหลายหมื่นโครงการทั่วโลก แต่แล้วอีกครั้งดังนั้น C จึงไม่ได้หมายความว่าเราจะใช้ C ในทุก ๆ โครงการใหม่. สถานการณ์ในโลกแห่งความเป็นจริงอาจต้องมีการดัดแปลงโมเดลหรือการใช้โมเดลอื่นโดยสิ้นเชิง คุณไม่รู้จนกระทั่งคุณอยู่ในสถานการณ์นั้น


1
คุณควรคัดลอกแล้ววางลงในบทความบล็อก ... นี่คือทองคำ
Marcel Popescu

15

ข้อสันนิษฐานที่สร้างขึ้นในคำถามและในบางคำตอบก็คือการทำให้เป็นมาตรฐานมีความหมายเหมือนกันการออกแบบฐานข้อมูลที่ดี อันที่จริงแล้วไม่ใช่ในกรณีนี้ การทำให้เป็นมาตรฐานเป็นวิธีหนึ่งในการบรรลุเป้าหมายของชุดการออกแบบและข้อกำหนดหากคุณใช้ฐานข้อมูลอย่างหนักเพื่อบังคับใช้ "กฎเกณฑ์ทางธุรกิจ" เกี่ยวกับความสัมพันธ์ระหว่างองค์ประกอบข้อมูล

การทำให้เป็นมาตรฐานให้ประโยชน์ที่สำคัญบางประการกับคุณ:

  1. ลดจำนวนข้อมูลที่ซ้ำซ้อนให้น้อยที่สุด
  2. ขยายขอบเขตการสร้างกลไกความสมบูรณ์ของฐานข้อมูลให้มากที่สุด (ข้อ จำกัด กุญแจต่างประเทศ, ข้อ จำกัด ที่ไม่ซ้ำกัน) สามารถถูกยกระดับเพื่อให้มั่นใจในความสมบูรณ์ของข้อมูล
  3. ลดจำนวนคอลัมน์ต่อแถวเพิ่มประสิทธิภาพของ IO ในบางกรณี แถวที่กว้างใช้เวลาในการเรียกคืนนานกว่า

ที่กล่าวว่ามีเหตุผลที่ถูกต้องมากมายที่จะทำให้เป็นปกติ:

  1. ประสิทธิภาพโดยเฉพาะอย่างยิ่งสำหรับการวิเคราะห์สามารถพิการด้วยการทำให้เป็นมาตรฐาน สำหรับการวิเคราะห์กับฐานข้อมูลเชิงสัมพันธ์ตัวแบบมิติที่ผิดปกติเป็นวิธีมาตรฐาน
  2. ประโยชน์ของการบังคับใช้ความถูกต้องของข้อมูลภายในฐานข้อมูลกำลังเริ่มลดลง เมื่อมีการพัฒนามากขึ้นก็มุ่งเน้นไปที่วัตถุระดับกลางที่มักจะบังคับใช้กฎเกณฑ์ทางธุรกิจการพึ่งพาข้อ จำกัด เชิงสัมพันธ์ในฐานข้อมูลจึงมีความสำคัญน้อยกว่า
  3. ดังที่คนอื่น ๆ ได้กล่าวถึงการทำให้เป็นมาตรฐานจะทำให้การสืบค้นที่เกี่ยวข้องมีความซับซ้อนมากขึ้น

ไม่ชัดเจนว่าการทำให้เป็นมาตรฐานเป็นสัญญาณของการออกแบบที่ดี ในบางกรณีการทำให้เป็นมาตรฐานเป็นสิ่งประดิษฐ์ของเวลาที่พื้นที่เก็บข้อมูลอยู่ในระดับพรีเมี่ยมและเมื่อความรับผิดชอบส่วนใหญ่สำหรับการเข้ารหัสกฎธุรกิจอยู่ในฐานข้อมูล (คิดว่าแอพพลิเคชันเซิร์ฟเวอร์ไคลเอนต์แบบสองชั้นที่มีตรรกะส่วนใหญ่ ขั้นตอนการจัดเก็บ) อาจเป็นไปได้ว่าหลายโครงการเปลี่ยนไปจากการทำให้เป็นมาตรฐานโดยอาศัยการตัดสินใจทางสถาปัตยกรรมที่ดีแทนที่จะเข้าใจหลักการออกแบบฐานข้อมูลไม่ดี

บทความโดยเจฟฟ์แอดอ้างอิงในการแสดงความคิดเห็นดังกล่าวข้างต้นมีบางส่วนที่ดีมีรายละเอียดการอภิปราย - "บางที Normalizing ไม่ปกติ"


7
สวัสดี Yosi ฉันเข้าใจประเด็นของคุณ การทำให้เป็นมาตรฐานเป็นพื้นฐานในการทำความเข้าใจทฤษฎีของฐานข้อมูลเชิงสัมพันธ์และมีการนำไปใช้จริงในทางปฏิบัติดังนั้นจึงไม่น่าแปลกใจที่มันเป็นหัวข้อใหญ่ในหลักสูตร วิศวกรที่ดีควรเข้าใจและเข้าใจว่าควรนำไปใช้เมื่อใด สิ่งที่ดูเหมือนจะไม่ครอบคลุมในการทำงานของหลักสูตรคือการเลือกการปรับสภาพให้ต่ำลงนั้นสามารถให้ประโยชน์มากมายและปัญหาบางอย่างไม่ได้ทำให้ตัวเองเป็นแบบอย่างที่ทำให้เป็นมาตรฐาน
DemetriKots

1
แล้วความสอดคล้องของข้อมูลล่ะ ตัวอย่างเช่นหากคุณมีชื่อร้านค้าในรายละเอียดการขายทุกครั้งคุณอาจมีคำอธิบายที่ขัดแย้งกันต่างกันในขณะที่ถ้าข้อมูลเป็นมาตรฐานชื่อร้านค้าจะปรากฏเพียงหนึ่งเดียว (ในตารางร้านค้า) และไม่มีสถานที่ที่ไม่สอดคล้องกัน
Tulains Córdova

1
ฉันเห็นด้วย. ฉันคิดว่าการปรับสภาพมาตรฐานใช้บ่อยครั้งโดย DBA ที่สอนว่านี่คือการออกแบบที่ดีที่สุด ฉันแนะนำเสมอว่า DBAs สามารถทำให้มาตรฐานใน ETL เป็นปกติได้ แต่เมื่อพูดถึงการอ้างอิง UI ของตารางฉันต้องการตารางที่ง่ายต่อการสืบค้นโดยไม่ต้องเข้าร่วมมากเกินไป ฉันพบกับตารางที่มีการปรับให้เป็นมาตรฐานมากเกินไปดังนั้นจึงแทบจะไม่สามารถแก้ไขปัญหาของผู้ใช้ได้โดยไม่ต้องใช้การแก้ไขปัญหาชั่วโมง
L_7337

1
ในทางกลับกันการวิเคราะห์นั้นยากมากถ้าคุณไม่สามารถเริ่มต้นจากแบบจำลองปกติ ฉันแค่ต้องผ่านการออกกำลังกายนี้และมันก็เป็นนรก นักพัฒนาแอพพลิเคชั่นไม่ควรสรุปว่าสกีมาแบบปกติจะเหมาะกับความต้องการด้านการวิเคราะห์ และสำหรับประเด็นที่ 3 เกี่ยวกับการทำให้เป็นมาตรฐานมันเป็นปัญหาที่แก้ไขได้เล็กน้อยโดยมุมมองที่เป็นรูปธรรม / ดัชนี
Aaronaught

1
และ # 2 ฟังดูสมเหตุสมผล แต่ความเชื่อใจในสายพันธุ์ - ฉันจำไม่ได้ว่าเห็นตัวอย่างหนึ่ง ๆ ในช่วง 10 ปีที่ผ่านมาซึ่งมีการบังคับใช้ข้อ จำกัด จริง ๆ บ่อยครั้งที่นักพัฒนาไม่สามารถเปรียบเทียบกฎเกณฑ์ทางธุรกิจกับความถูกต้องของข้อมูลหรือใช้ข้อเท็จจริงที่ว่า ORMs ในทางทฤษฎีสามารถบังคับใช้ข้อ จำกัด เชิงสัมพันธ์ในฐานะข้ออ้างที่จะไม่ทำที่ใด ๆ เลย บางทีฉันแค่เหยียดหยาม แต่ประสบการณ์การทำงานทั้งหมดของฉันได้สอนฉันว่าข้อความเช่น "แอปพลิเคชันจะบังคับใช้ความถูกต้องของข้อมูล" เป็นธงสีแดงขนาดใหญ่
Aaronaught

11
  1. นักพัฒนาจำนวนมากไม่ทราบหรือสนใจเกี่ยวกับการทำให้เป็นมาตรฐานหรือเกี่ยวกับการสร้างแบบจำลองข้อมูลหรือฐานข้อมูล
  2. สำหรับงานบางอย่างมันไม่สำคัญ
  3. บางครั้งมีเหตุผลที่ดีจริง ๆ ที่จะยกเลิกการทำให้ปกติตัวอย่างเช่นการทำให้เวิร์กโหลดที่เฉพาะเจาะจงทำงานได้ดี
  4. แนวคิดเกี่ยวกับฐานข้อมูลเชิงสัมพันธ์มีความเป็นแฟชั่นน้อยกว่าเมื่อเร็ว ๆ นี้ในช่วงทศวรรษ 1990 และ 2000 นักพัฒนามักจะได้รับอิทธิพลจากแฟชั่นแม้ว่าพวกเขาอ้างว่ามีเหตุผลมาก ไม่มีประเด็นที่โต้แย้งเกี่ยวกับรสนิยม

การทำให้เป็นมาตรฐานในอดีตก็เป็นอาณาเขตของการโต้แย้งทางศาสนาดังนั้นฉันลังเลที่จะพูดมากกว่านี้


ฉันจะเพิ่มสิ่งนี้ว่าบางครั้งความสัมพันธ์นั้นไม่ใช่การออกแบบที่ถูกต้องสำหรับฐานข้อมูล ตัวอย่างเช่นไดเรกทอรี LDAP เป็นลำดับชั้นบางประเภทอื่น ๆ อาจให้บริการที่ดีขึ้นโดยการออกแบบแบน
Maximus Minimus

1
เท่าที่ชี้ไปที่ 4 ฉันจะบอกว่าฐานข้อมูลเชิงสัมพันธ์นั้นมีความทันสมัยน้อยกว่าและเริ่มมีการสลับสับเปลี่ยนสำหรับพันธุ์ nosql และนั่นเป็นเรื่องที่ยอดเยี่ยมมากในหลาย ๆ ครั้ง แต่ฉันไม่เห็นผู้ย้ายและผู้เขย่าจำนวนมากรวมตัวกันของแบบจำลองข้อมูลที่ไม่ใช่เชิงสัมพันธ์โดยใช้ RDBMS นั่นมันโง่มาก
Aaronaught

@joshp - ขอบคุณสรุปดี จุด # 3 เป็นสิ่งที่ฉันสนใจเป็นการส่วนตัวมากกว่าทำไมปัจจัยอื่น ๆ "เอาชนะ" ความต้องการของการทำให้เป็นมาตรฐาน
Yosi Dahari

@JimmyShelter ฉันเห็นด้วย แฟชั่นกันความสัมพันธ์ไม่ได้เป็นตัวเลือกที่ดีที่สุดเสมอไป
joshp

4
@Yosi - เหตุผลที่ปัจจัยบางอย่างสามารถทำให้ทรัมป์ได้มาตรฐานคือการทำให้เป็นมาตรฐานเพื่อหลีกเลี่ยงปัญหาความสอดคล้องของข้อมูลทั่วไปเมื่อข้อมูลถูกแทรกอัปเดตและลบ ถ้าข้อมูลถูกเขียนหนึ่งครั้งจากนั้นอ่านหลังจากนั้นเท่านั้น C, U และ D ของ CRUD จะไม่สำคัญอีกต่อไป ในกรณีเช่นนี้ประโยชน์ของการทำให้เป็นมาตรฐานนั้นไม่มีความหมายดังนั้นความกดดันในการแข่งขันอื่น ๆ จึงมีความสำคัญเช่นประสิทธิภาพการอ่านหรือความง่ายในการสืบค้น
Joel Brown

9

ในโครงการขนาดใหญ่และโดยเฉพาะในเมนเฟรมนั้นไม่เป็นเช่นนั้น ในความเป็นจริงถ้าคุณค้นหาไซต์งานคุณจะเห็นหลายตำแหน่งสำหรับตัวสร้างข้อมูล นอกจากนี้การมีคอลัมน์จำนวนมากในตารางเดียวไม่ได้ขัดกับการทำให้เป็นมาตรฐาน อย่างไรก็ตามการสังเกตของคุณถูกต้องสำหรับบางโครงการ

การออกแบบฐานข้อมูลเป็นหนึ่งในทักษะที่จำเป็นในการสร้างระบบคุณภาพ ต้องบอกว่านักพัฒนาบางคนไม่พอรู้เกี่ยวกับการออกแบบฐานข้อมูลและยังได้รับมอบหมายให้ทำงานของการสร้างแบบจำลองข้อมูลและการออกแบบฐานข้อมูล บางโครงการยังข้ามการสร้างแบบจำลองข้อมูล การให้ความสำคัญกับหลาย ๆ โครงการส่วนใหญ่เน้นไปที่การเข้ารหัสและการออกแบบส่วนหน้า

ปัจจัยอีกประการหนึ่งสำหรับการออกแบบฐานข้อมูลที่ไม่ดีคือความจริงที่ว่า Normalisation ไม่ใช่หัวข้อที่ไม่สำคัญเป็นพิเศษเมื่อมันมาถึง 4th NF, 5th NF ฯลฯ หนังสือส่วนใหญ่ที่ฉันเห็นไม่สามารถอธิบายรูปแบบเหล่านั้นได้อย่างชัดเจน มักมีตัวอย่างที่ไม่ดีและมีทฤษฎีมากเกินไป ทำให้หัวข้อนี้เป็นที่นิยมน้อยกว่าที่ควร

ข้อผิดพลาดในการออกแบบฐานข้อมูลนั้นเกิดขึ้นได้ยากเว้นแต่คุณจะมองหาพวกเขาหรือพบเจอในระหว่างการทดสอบ การไม่มีมาตรฐานคุณภาพการออกแบบฐานข้อมูลจะทำให้เกิดข้อผิดพลาดได้มากขึ้น

เพิ่มไปที่ความจริงที่ว่าบางโครงการไม่ปฏิบัติตามวิธีการพัฒนาที่เข้มงวด (โครงการที่ส่งเสริมการออกแบบฐานข้อมูล) ดังนั้นความรับผิดชอบที่หลากหลายและงานที่ได้รับหายไประหว่างนักวิเคราะห์ธุรกิจนักพัฒนาและ DBA นักพัฒนาพูดคุยใน OO และ UML ที่ DBA พูดคุยใน DD และบางอย่างใน ERD และหลายคนอาจไม่ได้รับ UML หรือ OO ในระยะสั้นการขาดความรู้ขาดทรัพยากรที่ดีชัดเจนขาดภาษาแบบครบวงจรเพื่ออธิบายข้อมูลและการขาดวิธีการล้วนเป็นความผิด


คุณสามารถแนะนำคุณภาพการออกแบบฐานข้อมูล (ไม่เพียง แต่คีมา แต่ยังขั้นตอน) เอกสาร / บทความได้หรือไม่?
Tilak

"การมีหลายคอลัมน์ในตารางเดียวไม่ขัดกับการทำให้เป็นมาตรฐาน" -Sure.My ความตั้งใจของฉันคือ #entailments ในคำถามที่ฉันพูดถึง #columns เพื่อความเรียบง่ายข้อสันนิษฐานของฉันคือผู้อ่านจะเข้าใจความสัมพันธ์และสิ่งที่ฉันหมายถึง
Yosi Dahari

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