พื้นหลัง
ฉันเป็นนักเรียน CS ปีแรกและฉันทำงานนอกเวลาเพื่อธุรกิจขนาดเล็กของพ่อ ฉันไม่มีประสบการณ์ในการพัฒนาแอปพลิเคชันโลกแห่งความจริง ฉันได้เขียนสคริปต์ใน Python บางหลักสูตรใน C แต่ไม่มีอะไรเช่นนี้
พ่อของฉันมีธุรกิจการฝึกอบรมขนาดเล็กและทุกชั้นเรียนมีกำหนดบันทึกและติดตามผ่านทางเว็บแอปพลิเคชันภายนอก มีคุณสมบัติการส่งออก / "รายงาน" แต่มันเป็นเรื่องทั่วไปมากและเราต้องการรายงานที่เฉพาะเจาะจง เราไม่สามารถเข้าถึงฐานข้อมูลจริงเพื่อเรียกใช้แบบสอบถาม ฉันถูกขอให้ตั้งค่าระบบการรายงานที่กำหนดเอง
ความคิดของฉันคือการสร้างการส่งออกและนำเข้า CSV ทั่วไป (อาจเป็น Python) ลงในฐานข้อมูล MySQL ที่โฮสต์ในสำนักงานทุกคืนจากที่ที่ฉันสามารถเรียกใช้แบบสอบถามเฉพาะที่จำเป็น ฉันไม่มีประสบการณ์ในฐานข้อมูล แต่เข้าใจพื้นฐานมาก ฉันอ่านเกี่ยวกับการสร้างฐานข้อมูลและรูปแบบปกติเล็กน้อย
เราอาจเริ่มมีลูกค้าต่างประเทศเร็ว ๆ นี้ดังนั้นฉันต้องการให้ฐานข้อมูลไม่เกิดการระเบิดหาก / เมื่อเกิดขึ้น ขณะนี้เรายังมี บริษัท ใหญ่สองสามแห่งที่เป็นลูกค้าด้วยแผนกที่แตกต่างกัน (เช่น บริษัท แม่ ACME, แผนกดูแลสุขภาพ ACME, แผนกดูแลร่างกาย ACME)
สคีมาที่ฉันเกิดขึ้นมีดังต่อไปนี้:
- จากมุมมองของลูกค้า:
- ลูกค้าคือตารางหลัก
- ลูกค้าเชื่อมโยงกับแผนกที่พวกเขาทำงาน
- แผนกสามารถกระจายไปทั่วประเทศ: ฝ่ายทรัพยากรบุคคลในลอนดอนการตลาดในสวอนซี ฯลฯ
- แผนกมีการเชื่อมโยงกับแผนกของ บริษัท
- หน่วยงานเชื่อมโยงกับ บริษัท แม่
- จากมุมมองของชั้นเรียน:
- เซสชั่นเป็นตารางหลัก
- ครูจะเชื่อมโยงกับแต่ละเซสชั่น
- แต่ละสถานะจะได้รับสถานะ เช่น 0 - เสร็จสมบูรณ์ 1 - ถูกยกเลิก
- เซสชั่นจะถูกจัดกลุ่มเป็น "แพ็ค" ที่มีขนาดตามอำเภอใจ
- แต่ละชุดถูกกำหนดให้กับลูกค้า
- เซสชั่นเป็นตารางหลัก
ฉัน "ออกแบบ" (เหมือนเขียนหวัด) สคีมาบนกระดาษพยายามทำให้มันเป็นมาตรฐานในรูปแบบที่ 3 จากนั้นฉันก็เสียบเข้ากับ MySQL Workbench และทำให้มันสวยสำหรับฉัน:
( คลิกที่นี่สำหรับกราฟิกขนาดเต็ม )
(ที่มา: maian.org )
แบบสอบถามตัวอย่างฉันจะทำงาน
- ลูกค้ารายใดที่ยังมีเครดิตเหลืออยู่จะไม่ทำงาน (ลูกค้าที่ไม่มีคลาสที่กำหนดไว้ในอนาคต)
- อัตราการเข้างานต่อลูกค้า / แผนก / แผนก (วัดจากรหัสสถานะในแต่ละเซสชัน) คืออะไร
- มีกี่ชั้นเรียนในหนึ่งเดือน
- ตั้งค่าสถานะลูกค้าที่มีอัตราการเข้างานต่ำ
- รายงานที่กำหนดเองสำหรับแผนกทรัพยากรบุคคลที่มีอัตราการเข้าร่วมของผู้คนในแผนกของตน
คำถาม (s)
- นี่เป็นสิ่งที่ overengineered หรือฉันมุ่งหน้าไปทางที่ถูก?
- ความต้องการในการเข้าร่วมหลายตารางสำหรับการค้นหาส่วนใหญ่จะส่งผลให้เกิดการทำงานที่ยอดเยี่ยมหรือไม่
- ฉันได้เพิ่มคอลัมน์ 'lastsession' ให้กับลูกค้าเนื่องจากอาจเป็นข้อความค้นหาทั่วไป นี่เป็นความคิดที่ดีหรือฉันควรทำให้ฐานข้อมูลเป็นมาตรฐานอย่างเคร่งครัดหรือไม่
ขอบคุณที่สละเวลา
divisions
divisionid
คุณไม่พบสิ่งที่ซ้ำซ้อนหรือไม่ id
เพียงแค่ชื่อมัน นอกจากนี้ยังมีชื่อตารางของคุณรวมถึง_has_
: cities_departments
ฉันจะลบที่และเพียงแค่ชื่อมันตัวอย่างเช่น DATETIME
คอลัมน์ของคุณควรเป็นประเภทTIMESTAMP
ยกเว้นว่าเป็นค่าที่ผู้ใช้ป้อน ฉันคิดว่ามันเป็นความคิดที่ดีที่จะมีcities
และcountries
ตาราง คุณอาจทำงานในตาราง จำกัด status
ปัญหาที่เดียว พิจารณาใช้INT
และดำเนินการเปรียบเทียบค่าที่เหมาะสมในทีเพื่อให้คุณสามารถถือมากขึ้นมีความหมาย