เป็นหน้าที่ของโปรแกรมเมอร์ในการออกแบบฐานข้อมูลหรือไม่?


16

ฉันเป็นโปรแกรมเมอร์มาหกปีแล้ว ตลอดอาชีพของฉันฉันได้ทำงานกับเว็บแอปพลิเคชันมากมาย

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

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

มันเป็นไปเพื่อผลประโยชน์ที่ดีที่สุดของแอพและ บริษัท ที่จะทำมันโดยผู้เชี่ยวชาญหรือไม่?

ฉันไม่ได้พยายามหนีจากการออกแบบฐานข้อมูล แต่เป็นสิ่งที่สำคัญอย่างยิ่งที่จะได้รับสิทธิ


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

9
"DB expert" และ "programmer" ไม่ได้เกิดขึ้นพร้อมกัน คุณต้องการให้ผู้เชี่ยวชาญออกแบบฐานข้อมูล ผู้เชี่ยวชาญคนนั้นอาจเป็นโปรแกรมเมอร์
ลอร์ด Tydus

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

@Job อาจไม่ได้บอกว่ามันดีกว่า :)
Songo

คำตอบ:


32

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

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

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

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


คุณช่วยบอกความแตกต่างระหว่าง DBA กับนักพัฒนาฐานข้อมูลได้ไหมเมื่อพูดถึงการออกแบบฐานข้อมูล
Songo

@Songo: IMO ไม่ควรมีความแตกต่าง
Michael Borgwardt

1
จริงๆ? ฉันคิดเสมอว่า DBA นั้นเกี่ยวกับการใช้ฐานข้อมูลและปรับแต่งในขณะที่นักพัฒนาฐานข้อมูลกังวลเกี่ยวกับการสร้างแบบจำลองฐานข้อมูลและการออกแบบมากขึ้น!
Songo

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

1
@CodeWorks: พวกเขาแตกต่างกันอย่างแน่นอน แต่ IMO มันเป็นปฏิปักษ์ต่อองค์กรเพื่อปกป้องความเชี่ยวชาญที่มากเกินไปของประเภทนั้นเพราะมันทำให้การทำงานร่วมกันระหว่างคนที่รู้จักเฉพาะความเชี่ยวชาญของพวกเขามีปัญหามาก
Michael Borgwardt

4

เป็นเรื่องปกติที่โปรแกรมเมอร์จะสร้างฐานข้อมูล พบบ่อยมาก น่าเสียดายที่โปรแกรมเมอร์หลายคนไม่มีประสบการณ์กับ DB พวกเขาไม่เข้าใจวิธีรายงานกับข้อมูลขนาดใหญ่แนวคิดของมาร์ทดาต้าสตาร์สตาร์ ฯลฯ บางคนไม่เข้าใจพื้นฐานของการทำให้เป็นมาตรฐาน

หากชายคนหนึ่งมีทักษะในการทำทุกอย่างในระดับผู้เชี่ยวชาญมันทำเพื่อผลิตภัณฑ์ที่ดีมาก กองทัพชายคนหนึ่งสามารถทำสิ่งที่ทีมชาย 10 คนทำได้ในเวลาไม่นานด้วยคุณภาพ 1,000 เท่า ไม่ได้พูดเกินจริง

มันเป็นเรื่องที่ดีที่สุดสำหรับโปรแกรมเมอร์ที่จะทำมัน (คนน้อย) สมมติว่าโปรแกรมเมอร์รู้ว่าเขากำลังทำอะไรอยู่ แน่นอนว่ายังมีจุดล้มเหลวหลายพันจุด


ฉันพบสิ่งนี้เกิดขึ้นมากมายในทีมเล็ก ๆ ของฉัน นักพัฒนาที่มีประสบการณ์ DB น้อยคาดว่าจะออกแบบ (ไม่ยากบนพื้นผิว) และปรับแต่ง (ยากขึ้น) ฐานข้อมูลภายใต้รหัสของพวกเขา หวังว่าฉันจะมี DBA ได้ตลอดเวลา
Rig

1
"ไม่ใช่เรื่องที่พูดเกินจริง" มันคือเว้นแต่คุณจะมีสิทธิ์ได้รับการเรียกร้องนี้อย่างใด
Burhan Ali

4

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

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

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

ปัญหาคือการออกแบบ schema ที่ดี (หรืออย่างน้อยก็เพียงพอ) ไม่ใช่เรื่องราวทั้งหมด - โดยเฉพาะถ้าฐานข้อมูลมีการขยาย สำหรับฉันแล้วดูเหมือนว่า "มูลค่าเพิ่ม" ที่ DBA นำมาในการรับสิ่งอื่นนอกเหนือจาก schema พื้นฐานที่ถูกต้อง - ดัชนีการกำหนดค่าการจัดเก็บการบำรุงรักษาฐานข้อมูล (การรักษาขนาดไฟล์ในการตรวจสอบการสร้างดัชนีใหม่ ฯลฯ ) กับผู้ใช้และบทบาทและอื่น ๆ เป็นต้น

โปรแกรมเมอร์ที่ดีควรนำผลงานที่มีความหลากหลายมาใช้ควรจะเป็นมากกว่า coder [insert langugage ของทางเลือก] และฉันจะรวมความเข้าใจของฐานข้อมูลในแฟ้มผลงานนั้นด้วย


4

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

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


1
ผู้ดูแลฐานข้อมูลไม่จำเป็นต้องเป็นนักวิเคราะห์ข้อมูล ต้องใช้ชุดทักษะที่แตกต่างเพื่อปรับฐานข้อมูลและทำให้ข้อมูลเชิงสัมพันธ์เป็นปกติตามลำดับ
Gilbert Le Blanc

1

ฉันเห็นคำถามสองข้อที่นี่:

  • นักพัฒนาฐานข้อมูลควรสร้างแบบจำลองตรรกะทางธุรกิจหรือไม่
  • ฉันควรรู้วิธีเก็บข้อมูลในฐานข้อมูลหรือไม่

ตรรกะทางธุรกิจ

  • ตรรกะทางธุรกิจไม่ได้อยู่ในฐานข้อมูล มันเป็นโมเดลเชิงแนวคิดที่จะต้องเป็นอิสระจากเลเยอร์อื่น ๆ ในระบบของคุณ

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

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

  • หลายคนคิดว่าฐานข้อมูลเป็นรากฐานของใบสมัครของคุณ สร้างรากฐานที่ไม่ดีและระบบจะล้มลง ฉันไม่เห็นด้วยกับสิ่งนี้ ฉันเห็นฐานข้อมูลเป็นสื่อกลางในการจัดเก็บที่สามารถเปลี่ยนได้เสมอ

ข้อมูลที่คงอยู่

  • คุณควรรู้วิธีเก็บข้อมูลไว้ในสื่อจัดเก็บข้อมูลต่าง ๆ รวมถึงโซลูชัน SQL และ NoSQL

  • ระดับความเชี่ยวชาญที่ต้องการจะแตกต่างกันไปตามขนาดของระบบที่คุณกำลังทำงาน

  • บริษัท ขนาดเล็กจะคาดหวังให้คุณมีความรู้นั้นเมื่อ บริษัท ขนาดใหญ่มักจ้างผู้เชี่ยวชาญเพื่อจัดการกับประสิทธิภาพความยืดหยุ่นและความปลอดภัยที่เกี่ยวข้อง

เพื่อสรุป:

  • รูปแบบโดเมนเป็นรากฐานของระบบของคุณไม่ใช่ฐานข้อมูล

  • หากคุณทำงานกับ บริษัท ขนาดเล็กในโครงการขนาดเล็กคุณควรออกแบบฐานข้อมูลด้วยตัวเอง

  • หากคุณทำงานให้กับ บริษัท ขนาดใหญ่ในระบบขององค์กรก็อาจทำให้รู้สึกถึงการส่งงานไปยังผู้เชี่ยวชาญโดเมน

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