คุณเข้าใกล้การออกแบบฐานข้อมูลได้อย่างไร [ปิด]


14

ฉันเป็นนักพัฒนาเว็บเป็นหลักและฉันมีโครงการส่วนตัวที่ฉันอยากเริ่ม

สิ่งหนึ่งที่ดักฟังฉันคือการออกแบบฐานข้อมูล ฉันได้ผ่านการปรับสภาพฐานข้อมูลของโรงเรียนและสิ่งต่างๆเช่นนั้น แต่เมื่อสองสามปีก่อนและฉันไม่เคยมีประสบการณ์กับการออกแบบฐานข้อมูลเชิงสัมพันธ์ยกเว้นโรงเรียน

ดังนั้นคุณจะเข้าถึงฐานข้อมูลจากมุมมองของแอปพลิเคชันเว็บได้อย่างไร คุณจะเริ่มอย่างไรและระวังอะไรบ้าง? ข้อควรระวังคืออะไร


8
การออกแบบฐานข้อมูลที่ดีสำหรับเว็บแอพเหมือนกับการออกแบบฐานข้อมูลที่ดีสำหรับแอพใด ๆ มีหนังสือแนะนำเบื้องต้นมากมายที่ใช้งานได้ดีในการครอบคลุมพื้นฐาน
Robert Harvey

1
@harvey หนังสือใด ๆ ที่คุณอาจต้องการแนะนำ?
bron

คำตอบ:


14

หนังสือที่ดีที่สุดที่ฉันเคยซื้อเกี่ยวกับการออกแบบฐานข้อมูลคือการออกแบบฐานข้อมูลสำหรับ Mere Mortalsโดย Michael Hernandez ISBN: 0-201-69471-9 รายชื่อ Amazonฉันสังเกตเห็นว่าเขามีรุ่นที่สาม

ลิงก์ไปยังรุ่นที่สาม

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

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

ในการเขียนโปรแกรมคุณมี:

  • ถ้าสร้าง
  • ถ้าอื่นสร้าง
  • ทำในขณะที่ลูป
  • ทำจนกระทั่งลูป
  • โครงสร้างเคส

ด้วยฐานข้อมูลคุณมี:

  • ตารางข้อมูล
  • ตารางการค้นหา
  • ความสัมพันธ์แบบหนึ่งต่อหนึ่ง
  • หนึ่งต่อหลายความสัมพันธ์
  • หลายต่อหลายความสัมพันธ์
  • คีย์หลัก
  • กุญแจต่างประเทศ

ง่ายกว่าที่คุณทำในสิ่งที่ดีกว่า ฐานข้อมูลไม่มีอะไรมากไปกว่าสถานที่ที่คุณใส่ข้อมูลลงในหลุม cubbie เริ่มต้นด้วยการระบุรูบ์ cubie เหล่านี้และสิ่งที่คุณต้องการในประเภทไหน

คุณจะไม่สร้างการออกแบบฐานข้อมูลที่สมบูรณ์แบบในครั้งแรกที่คุณลอง นี่คือความจริง. การออกแบบของคุณจะผ่านการปรับแต่งหลายครั้งในระหว่างกระบวนการ บางครั้งสิ่งที่ดูเหมือนจะไม่ชัดเจนจนกว่าคุณจะเริ่มป้อนข้อมูลและจากนั้นคุณมีช่วงเวลาah ha

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


11

ฉันทำทั้งการเขียนโปรแกรมเชิงวัตถุและการออกแบบฐานข้อมูล (ส่วนใหญ่เป็นธุรกรรม แต่บาง OLAP) และสำหรับสถานการณ์ของฉันมีชุดรูปแบบที่เกิดขึ้นมากมาย (อย่างน้อยกับ OLTP)

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

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

นอกจากนี้ฉันใช้คีย์ตัวแทนในตารางทั้งหมด (โดยทั่วไปคือคอลัมน์ประจำตัวที่เพิ่มขึ้นอัตโนมัติ แต่บางที Guids - การแลกเปลี่ยนกับ guids ในรหัสคือพวกเขาใช้พื้นที่หน่วยความจำมากกว่าจำนวนเต็มธรรมดา) และฉันหลีกเลี่ยงการใช้คีย์ธรรมชาติสำหรับฉัน การค้นหา (ยกเว้นกับ Bridge / Link Tables) โดยค่าเริ่มต้นฉันยังสร้างดัชนีในคอลัมน์คีย์ต่างประเทศทั่วไปและตรวจสอบขั้นตอนการจัดเก็บ / แบบสอบถามระบบจากเวลาเพื่อเพิ่มประสิทธิภาพกลยุทธ์การจัดทำดัชนี กลยุทธ์การจัดทำดัชนีอื่นที่ฉันใช้คือการค้นหาสถานที่ในรหัสของฉันที่ฉันสร้างคอลเลกชันตามคอลัมน์การค้นหาและเพิ่มดัชนีที่เหมาะสมในคอลัมน์การค้นหา


10

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


1
ORM ไม่ได้ประดิษฐ์สคีมาของคุณ มันสร้างมันขึ้นอยู่กับสิ่งที่คุณทำในวัตถุของคุณ หากคุณสร้างวัตถุจากสคีมาของคุณคุณกำลังมอบหมายงานสำคัญให้กับ ORM โง่ ๆ ของคุณ

1
@ Pierre303 สคีมาถูกสร้างขึ้นจากกฎการเขียนโปรแกรมภายใน ORM นั้นซึ่งอาจไม่สอดคล้องกับสถานการณ์ / การออกแบบของคุณอย่างสมบูรณ์ มันอาจสร้างฐานข้อมูลย่อย ฉันเคยเห็นบางสิ่งที่น่ากลัวออกมาจาก ORM แม้ในระดับการสืบค้น
m4tt1mus

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

@HLGEM: คุณไม่สามารถทำงานร่วมกับ ORM ขั้นสูงเช่น Hibernate และเขียนความคิดเห็นนั้น

OH, orm จัดการกับการตรวจสอบและฟิลด์ที่ต้องการโดยสิ่งอื่นนอกเหนือจากใบสมัครของคุณอย่างไร
HLGEM

5

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

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

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

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


5

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

  • เขียนประโยคสั้น ๆ ที่จับความสัมพันธ์ระหว่างเอนทิตี้
  • วาดแผนภาพความสัมพันธ์เอนทิตีที่แสดงถึงประโยค
  • สร้างแบบจำลองข้อมูลเชิงตรรกะปกติจากแผนภาพ ER
  • ทำเมทริกซ์ CRUD สำหรับแอปพลิเคชันและเอนทิตี
  • ใช้เมทริกซ์เพื่อตรวจสอบความครอบคลุมของวงจรชีวิตของแต่ละเอนทิตี
  • แยก subschemas สำหรับแต่ละแอปพลิเคชัน
  • ตรวจสอบเส้นทางการนำทางผ่านส่วนย่อยสำหรับการดำเนินการหลัก / CRUD แต่ละรายการ
  • พิจารณารายงานที่ต้องการ
  • ออกแบบแบบจำลองข้อมูลทางกายภาพตามทั้งหมดข้างต้น denormalize พาร์ติชันและใช้ schemas ดาวตามความเหมาะสม

คุณควรแน่ใจว่าคุณได้รับรายงานที่ถูกต้องถ้าคุณวางแผนที่จะทำให้คนที่เขียนเช็คพอใจ
JeffO

3

ในการออกแบบฐานข้อมูลให้สำเร็จคุณต้องพิจารณาหลาย ๆ อย่างก่อน:

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

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

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

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

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

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


2

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

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

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

ตรวจสอบให้แน่ใจว่าคุณมีสคริปต์หรือ ddl ในรหัสเพื่อให้คุณสร้าง schema ตั้งแต่เริ่มต้นและอัปเดตเมื่อคุณทำการเปลี่ยนแปลง (ddl ในรหัสเป็นวิธีที่ฉันต้องการ - ฉันมีระบบและทำงานได้)


2

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

ในที่สุดถ้าแบบจำลองมีขนาดใหญ่เกินไปฉันจะย้ายไปยัง Visio และทำงานเป็นชิ้น ๆ บนกระดานไวท์บอร์ด

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

สำหรับ "SQL แล้ว ORM" หรือในทางกลับกันก็ขึ้นอยู่กับคุณ เพียงให้แน่ใจว่าแบบจำลองของคุณสร้างรากฐานที่ดีก่อน


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

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

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

1

ฉันออกแบบวัตถุก่อนจากนั้นฉันใช้ ORM (เช่น nHibernate) เพื่อสร้างสคีมา มันทำให้ฉันมีความยืดหยุ่นมากกว่าการทำผกผัน

ขั้นตอนต่อไปคือการเพิ่มประสิทธิภาพของสคีมาที่สร้างขึ้น

เป็นเวลานานแล้วที่ฉันได้เห็นโครงการที่ตารางฐานข้อมูลที่ออกแบบมาก่อน


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

1
@ElGringoGrande ยกเว้นว่าคุณเป็น dbguru คุณไม่มีธุรกิจที่ออกแบบฐานข้อมูลสำหรับแอพพลิเคชั่นที่สำคัญที่สุด หากต้องการมากกว่า 10 ตารางและจะเก็บระเบียนไม่เกิน 100,000 รายการและคุณไม่มีผู้ออกแบบฐานข้อมูลระดับมืออาชีพแสดงว่าคุณทำผิด
HLGEM

อึอึ ฉันออกแบบฐานข้อมูลที่มีมากกว่า 160 ตารางและมีแถวนับล้านแถว (ตารางที่ใหญ่ที่สุดมีระเบียนกว่าล้านรายการสำหรับลูกค้าขนาดกลางลูกค้ารายใหญ่ที่สุดมีมากกว่า 5 ล้านคน) ลูกค้าส่วนใหญ่มีผู้ใช้พร้อมกันหลายร้อยคนและผู้ใช้ที่ใหญ่ที่สุดกว่า 2 พันคน และฉันไม่ใช่ DB Guru และเราไม่ได้จ้างใคร ฉันได้ออกแบบฐานข้อมูลเหล่านี้หลายชุดสำหรับแอปพลิเคชันที่แตกต่าง ฉันทำผิดพลาดบอย
ElGringoGrande

1
ElGringoGrande: หากคุณได้ออกแบบฐานข้อมูลดังกล่าวโดยมีผู้ใช้พร้อมกันหลายร้อยคนและหลายล้านแถวในตารางและผู้ใช้มีความสุขคุณก็คือ db-guru บางทีคุณอาจไม่ได้ตระหนักถึงมัน
ypercubeᵀᴹ

1

มีบางสิ่งที่ไม่ได้ระบุอย่างชัดเจนโดยบุคคลอื่น:

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

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

  • รู้รหัสที่ต้องทำในโปรแกรมและรหัสที่ให้ DB ดูแล สิ่งนี้จำเป็นเพื่อให้คุณตั้งค่าคอลัมน์ข้อมูลเป็นโมฆะไม่ถูกต้อง ฯลฯ สิ่งนี้จำเป็นเช่นกันเพื่อให้คุณระบุ RI ของคุณอย่างถูกต้อง

  • กำหนดคีย์หลักของคุณให้ดี ไปหากุญแจง่ายๆเมื่อคุณสามารถ

  • พิจารณาความต้องการในการรวมเข้ากับแอพพลิเคชั่นอื่น ๆ

  • พิจารณาใช้โมเดลข้อมูลสากลและปฏิบัติตามมาตรฐานอุตสาหกรรมในการตั้งชื่อและขนาดคอลัมน์ข้อมูล

  • คิดถึงความต้องการในอนาคต (เมื่อทราบและเมื่อมี)

  • ให้คนอื่นตรวจสอบโหมดของคุณ

  • ใช้เครื่องมือสำหรับการสร้างแบบจำลอง - อาจเป็นเครื่องมือ ERD หรือเครื่องมือ UML

  • ตรวจสอบและทำความเข้าใจรหัส DDL ที่สร้างขึ้น อย่าทำเพื่อสิทธิ์

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