JavaRush /Курстар /All lectures for KK purposes /Жоба тақырыбы: Hibernate (2)

Жоба тақырыбы: Hibernate (2)

All lectures for KK purposes
Деңгей , Сабақ
Қол жетімді

Бүгінгі мақсатымыз — Hibernate тақырыбы бойынша екінші жобаны орындау. Мәнісі — ДБ құрылымын түсініп, энтитилерді бар кестелерге маппинг жасап, маппингтің дұрыс орындалғанын тексеру үшін минималды функционал қосу.

Енді толығырақ:

  1. Дамп-файлды жүктеп ал және оны өзіңнің локалдық машинаңа жазыңыз. ДБ ретінде MySQL орнату пакетінің құрамында мысал ретінде таратылатын тесттік ДБ-ны қолданамыз. Дамп ДБ-ның күйін бекіту үшін керек, себебі оның бір күн-ай-жыл ішінде өзгермейтінін кепілдендіре алмаймыз.
  2. Жобаның темплиты болмайды, сондықтан жобаны өзің жасауың керек. Бұл барлық қажетті тәуелдіктері бар maven жоба болуы тиіс (hibernate-core-jakarta, mysql-connector-java, p6spy).
  3. Идеяда біздің локалдық орныққан ДБ-ны datasource ретінде қос. Одан кейін, Database қойындысында курсорды movie схемасына қойып, Alt+Ctrl+Shift+U комбинациясын бас (тек Ultimate нұсқасында жұмыс істейді). Бұл movie схемасының құрылымын көрсетеді (баған аттарымен, кілттермен және т.б.). Мынадай түрде көрінеді:

    Келісесің бе, қарау онша ыңғайлы емес. Барлық баған аттары мен түсініктемелерін көрсетуді өшір:

    Нәтижесінде талдау жасауға болатын ДБ схемасын аласың:

  4. Схема күрделі көрінеді, бірақ бәрі соншалықты қорқынышты емес. ДБ құрылымын талдау үшін неден бастау керектігін табу керек. Бір дұрыс жауап жоқ, бірақ мен film кестесінен бастауды ұсынар едім. Бірнеше байланыстарды мысал ретінде қарайық:
    • film және film_text кестелері арасындағы байланыс - бұл айқын OneToOne байланысы, себебі film_text кестесінде film_id өрісі бар, ол БАЯНДА film кестесінің ID сілтемесіз (foreign key жоқ). Бірақ атауы мен логикасы бойынша, бұл байланыс болуы керек. Сонымен қатар, film_text кестесінде film_id өрісі бастапқы кілт ретінде қызмет етеді, бұл бір «фильмге» бір «фильм мәтіні» сәйкес келетінін кепілдендіреді.
    • Енді film және category кестелеріне қараймыз. Логика тұрғысынан, фильмде бірнеше категориялар болуы мүмкін. Әрі бір категория әр түрлі фильмдерде болуы мүмкін. Бұдан басқа, бұл екі кесте арасында film_category байланыс кестесі бар. Жоғарыда айтылғандардың барлығын ескере отырып - бұл айқын ManyToMany байланысы.
    • film және language кестелеріне қараймыз. Логика тұрғысынан, фильм әр түрлі тілдерге аударылуы мүмкін және әртүрлі фильмдер бір тілде болуы мүмкін. Яғни, ManyToMany сұранысы туындайды. Бірақ егер film кестесінің мазмұнына қарасақ, әрбір жол жеке фильм екенін байқаймыз. Және жолда тек бір language_id өрісі бар (Тағы original_language_id бар, бірақ барлық жазбаларда ол null, сондықтан оны елемеуге болады). Яғни, бір фильмде тек бір тіл болуы мүмкін. Және бір тіл әр түрлі фильмдерде болуы мүмкін. Байланыс - ManyToOne (байланыс фильмнен тілге қарай бағытталған).
  5. Енді басты тапсырма - барлық қажетті энтити кластары мен кестелерді movie схемасына маппинг жасау керек.
  6. Жаңа тұтынушыны (customer кестесінде) барлық тәуелді өрістерімен құра алатын әдіс қос. Әдісті транзакциялық жасауды ұмытпа (осылайша тұтынушының мекен-жайы ДБ-ға жазылмағанда, бірақ тұтынушының өзі жоқ болған жағдайда түсіп қалмау үшін).
  7. Транзакциялық әдіс қос, ол бұрын жалға алынған фильмді қайтарған тұтынушы оқиғасын сипаттайды. Тұтынушы мен жалға алу оқиғасын өз қалауыңыз бойынша таңдаңыз. Фильм рейтингін қайта есептеудің қажеті жоқ.
  8. Транзакциялық әдіс қос, ол тұтынушы дүкенге (store) барып, (inventory) жалға алып, сатушыға (staff) төлем жасаған оқиғаны сипаттайды. Фильмді (inventory арқылы) өз қалауыңыз бойынша таңдаңыз. Жалғыз шектеу - фильмді жалға алуға қолжетімді болуы керек. Яғни, rental-де инвентарь бойынша ешқандай жазбалар мүлдем болмауы керек немесе бұл инвентарьдың соңғы жалға алу уақытының return_date бағаны rental кестесінде толы болуы керек.
  9. Транзакциялық әдіс қос, ол жаңа фильм жалға алынуға қолжетімді болғанын сипаттайды. Фильм, тіл, актерлер, категориялар және т.б. өз қалауыңыз бойынша таңдаңыз.
  10. Кесте құрылымын өзгертуге болмайды. Бірақ жақсарту бойынша ұсыныстар беру - қажет. Бір мәселелі орынды біз 4-тармақта анықтадық (film_text кестесінде film кестесінің film_id өрісіне foreign key жоқ). Егер ДБ құрылымында тағы осындай «қателер» бар болса - жоба тамырына readme файлын қосып, сол қателерді сипаттаңыз.

Жобаны талдау:

Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION