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

ตอนนี้ในรายละเอียดเพิ่มเติม:

  1. ดาวน์โหลดไฟล์ดัมพ์และปรับใช้กับเครื่องของคุณ ในฐานะฐานข้อมูล เราจะใช้ฐานข้อมูลทดสอบซึ่งแจกจ่ายเป็นตัวอย่างพร้อมกับแพ็คเกจการติดตั้ง MySQL จำเป็นต้องมีการถ่ายโอนข้อมูลเพื่อแก้ไขสถานะของฐานข้อมูล เนื่องจากเราไม่สามารถรับประกันได้ว่าจะไม่เปลี่ยนแปลงในหนึ่งวัน เดือน ปี
  2. เราจะไม่มีเทมเพลตโครงการ ดังนั้นสร้างโครงการด้วยตัวคุณเอง ควรเป็นโครงการ maven ที่มีการพึ่งพาที่จำเป็นทั้งหมด ( hibernate-core-jakarta , mysql-connector-java , p6spy )
  3. เชื่อมต่อฐานข้อมูลที่ปรับใช้ในพื้นที่ของเราเป็นแหล่งข้อมูลใน Idea หลังจากนั้นในแท็บฐานข้อมูล ให้วางเคอร์เซอร์บนสคีมาภาพยนตร์แล้วกดคีย์ผสมAlt+Ctrl+Shift+U(ใช้ได้เฉพาะในเวอร์ชัน Ultimate) นี่จะแสดงโครงสร้างของสคีมาภาพยนตร์ทั้งหมด (พร้อมชื่อคอลัมน์ คีย์ ฯลฯ) มีลักษณะดังนี้:

    เห็นด้วยค่ะ ไม่ค่อยสบายตา ปิดการแสดงชื่อคอลัมน์และความคิดเห็นทั้งหมด:

    ดังนั้น คุณจะได้รับสคีมาฐานข้อมูลที่สามารถวิเคราะห์ได้แล้ว:

  4. วงจรดูซับซ้อน แต่ไม่ใช่ทุกอย่างจะเลวร้าย ในการวิเคราะห์โครงสร้างของฐานข้อมูล คุณต้องค้นหาตำแหน่งที่จะเริ่มต้น ไม่มีคำตอบที่ถูกต้องแต่ฉันขอแนะนำให้เริ่มต้นด้วยfilmตาราง ลองใช้ความสัมพันธ์สองสามตัวอย่าง:
    • ความสัมพันธ์ระหว่างตารางfilmและfilm_textเป็น ความสัมพันธ์ แบบ OneToOne ที่ชัดเจน เนื่องจากตารางfilm_textมีฟิลด์film_idที่ไม่อ้างถึงIDจากตารางfilm(ไม่มีคีย์ต่างประเทศ) แต่ตามชื่อและตรรกะ การเชื่อมต่อนี้ควรจะเป็น นอกจากนี้ ในตาราง ฟิลด์film_textยังfilm_idทำหน้าที่เป็นคีย์หลัก ซึ่งรับประกันว่า "ภาพยนตร์" หนึ่งเรื่องจะสอดคล้องกับ "ข้อความภาพยนตร์" ไม่เกินหนึ่งรายการ
    • ทีนี้มาดูตารางfilmและ categoryตามเหตุผลแล้ว ภาพยนตร์สามารถมีได้หลายประเภท และหมวดหมู่หนึ่งอาจเป็นภาพยนตร์ที่แตกต่างกัน film_categoryนอกจากนี้ ยังมีตารางเชื่อมโยงระหว่างสองตารางนี้ จากทั้งหมดข้างต้น นี่คือความ สัมพันธ์ ManyToMany ที่ชัดเจน
    • เราดูตารางfilmและ languageจากมุมมองของตรรกะ ภาพยนตร์อาจมีการแปลเป็นภาษาต่าง ๆ และภาพยนตร์ต่าง ๆ อาจอยู่ในภาษาเดียวกัน นั่นคือManyToMany แนะนำ ตัว เอง แต่ถ้าเราดูเนื้อหาของตารางfilmเราจะเห็นว่าแต่ละแถวของตารางเป็นภาพยนตร์ที่ไม่ซ้ำกัน และมี ฟิลด์ language_id เพียงฟิลด์เดียวในบรรทัด (มี original_language_id ด้วย แต่ในเร็กคอร์ดทั้งหมดจะเป็นค่าว่าง ดังนั้นเราไม่ต้องสนใจฟิลด์นี้) นั่นคือภาพยนตร์หนึ่งเรื่องสามารถมีได้เพียงภาษาเดียว และภาษาเดียว อาจจะเป็นหนังคนละเรื่องกัน การเชื่อมต่อคือManyToOne (การเชื่อมต่อนั้นกำกับจากภาพยนตร์เป็นภาษาหนึ่ง)
  5. ตอนนี้งานหลักคือการสร้างคลาสเอนทิตีที่จำเป็นทั้งหมดและแมปเข้ากับตารางสคีmovieมา
  6. เพิ่มวิธีการที่สามารถสร้างลูกค้าใหม่ (ตารางลูกค้า) พร้อมฟิลด์ที่ต้องพึ่งพาทั้งหมด อย่าลืมทำวิธีการทำธุรกรรม (เพื่อไม่ให้ตกอยู่ในสถานการณ์ที่มีการบันทึกที่อยู่ของผู้ซื้อในฐานข้อมูล แต่ผู้ซื้อเองไม่ได้)
  7. เพิ่มวิธีการทำธุรกรรมที่อธิบายเหตุการณ์ "ลูกค้าไปและส่งคืนภาพยนตร์ที่เช่าไปก่อนหน้านี้" เลือกผู้ซื้อและกิจกรรมการเช่าที่คุณต้องการ ไม่จำเป็นต้องคำนวณเรตของภาพยนตร์ใหม่
  8. เพิ่มวิธีการทำธุรกรรมที่อธิบายเหตุการณ์ “ผู้ซื้อไปที่ร้านค้า (ร้านค้า) และเช่า (เช่า) สินค้าคงคลัง (สินค้าคงคลัง) ที่นั่น ในขณะเดียวกันก็ชำระเงิน (ชำระเงิน) ให้กับผู้ขาย (พนักงาน) ภาพยนตร์ (ผ่านสินค้าคงคลัง) เลือกตามดุลยพินิจของคุณ ข้อจำกัดเดียวคือภาพยนตร์ต้องมีให้เช่า นั่นคือ ไม่ควรมีบันทึกสินค้าคงคลังในการเช่าเลย หรือ คอลัมน์ return_dateของตารางrentalสำหรับการเช่าครั้งล่าสุดของสินค้าคงคลังนี้ควรกรอก
  9. เพิ่มวิธีการทำธุรกรรมที่อธิบายเหตุการณ์ "มีการถ่ายทำภาพยนตร์เรื่องใหม่และพร้อมให้เช่า" ภาพยนตร์, ภาษา, นักแสดง, หมวดหมู่ ฯลฯ ให้เลือกตามดุลยพินิจของคุณ
  10. ไม่สามารถเปลี่ยนโครงสร้างตารางได้ แต่คุณต้องให้คำแนะนำเพื่อการปรับปรุง เราระบุสถานที่ที่มีปัญหาหนึ่งแห่งในย่อหน้าที่ 4 (ไม่มีคีย์ต่างประเทศในตารางfilm_textบน ฟิลด์ film_idตารางfilm) ดูว่ายังมี "ข้อผิดพลาด" ดังกล่าวในโครงสร้างฐานข้อมูลหรือไม่ ถ้าใช่ ให้เพิ่มไฟล์ readme ที่รูทของโปรเจ็กต์และอธิบายข้อผิดพลาดเหล่านี้

การวิเคราะห์โครงการ: