ื”ืืžืช ืชื—ื™ืœื”, ืื• ืžื“ื•ืข ืฆืจื™ืš ืœืขืฆื‘ ืืช ื”ืžืขืจื›ืช ืขืœ ื‘ืกื™ืก ื”ืชืงืŸ ืžืกื“ ื”ื ืชื•ื ื™ื

ื”ื™ื™ ื”ื‘ืจ!

ืื ื—ื ื• ืžืžืฉื™ื›ื™ื ืœื—ืงื•ืจ ืืช ื”ื ื•ืฉื Java ะธ ืื‘ื™ื‘ื›ื•ืœืœ ื‘ืจืžืช ืžืกื“ ื”ื ืชื•ื ื™ื. ื”ื™ื•ื ืื ื• ืžืฆื™ืขื™ื ืœืงืจื•ื ืžื“ื•ืข, ื›ืืฉืจ ืžืขืฆื‘ื™ื ืืคืœื™ืงืฆื™ื•ืช ื’ื“ื•ืœื•ืช, ื“ื•ื•ืงื ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื, ื•ืœื ืงื•ื“ ื”-Java, ืืžื•ืจ ืœื”ื™ื•ืช ื‘ืขืœ ื—ืฉื™ื‘ื•ืช ืžื›ืจืขืช, ื›ื™ืฆื“ ื–ื” ื ืขืฉื” ื•ืžื”ื ื”ื—ืจื™ื’ื™ื ืœื›ืœืœ ื–ื”.

ื‘ืžืืžืจ ื“ื™ ืžืื•ื—ืจ ื–ื”, ืืกื‘ื™ืจ ืžื“ื•ืข ืื ื™ ื—ื•ืฉื‘ ืฉื›ืžืขื˜ ื‘ื›ืœ ื”ืžืงืจื™ื, ืžื•ื“ืœ ื”ื ืชื•ื ื™ื ื‘ืืคืœื™ืงืฆื™ื” ืฆืจื™ืš ืœื”ื™ื•ืช ืžืชื•ื›ื ืŸ "ืžืžืกื“ ื”ื ืชื•ื ื™ื" ื•ืœื "ืžื”ื™ื›ื•ืœื•ืช ืฉืœ Java" (ืื• ื›ืœ ืฉืคืช ืœืงื•ื— ืฉืืชื” ืขื•ื‘ื“ ืขื). ืขืœ ื™ื“ื™ ื‘ื—ื™ืจื” ื‘ื’ื™ืฉื” ื”ืฉื ื™ื™ื”, ืืชื” ื ื›ื ืก ืœื“ืจืš ืืจื•ื›ื” ืฉืœ ื›ืื‘ ื•ืกื‘ืœ ื‘ืจื’ืข ืฉื”ืคืจื•ื™ืงื˜ ืฉืœืš ืžืชื—ื™ืœ ืœืฆืžื•ื—.

ื”ืžืืžืจ ื ื›ืชื‘ ืขืœ ืกืžืš ืฉืืœื” ืื—ืช, ื ื™ืชืŸ ื‘-Stack Overflow.

ื“ื™ื•ื ื™ื ืžืขื ื™ื™ื ื™ื ืขืœ reddit ื‘ืงื˜ืขื™ื /r/java ะธ / r / ืชื›ื ื•ืช.

ื™ืฆื™ืจืช ืงื•ื“

ื›ืžื” ืื ื™ ืžื•ืคืชืข ืฉื™ืฉ ืฉื›ื‘ื” ืงื˜ื ื” ื›ืœ ื›ืš ืฉืœ ืžืฉืชืžืฉื™ื, ืฉืœืื—ืจ ืฉื”ืชื•ื•ื“ืขื• ืœ-jOOQ, ืžืชืจืขืžื™ื ืขืœ ื›ืš ืฉ-jOOQ ืžืกืชืžืš ื‘ืจืฆื™ื ื•ืช ืขืœ ื™ืฆื™ืจืช ืงื•ื“ ืžืงื•ืจ ื›ื“ื™ ืœืคืขื•ืœ. ืืฃ ืื—ื“ ืœื ืžื•ื ืข ืžืžืš ืœื”ืฉืชืžืฉ ื‘-jOOQ ื›ืžื• ืฉืืชื” ืจื•ืื” ืœื ื›ื•ืŸ, ื•ืืฃ ืื—ื“ ืœื ืžื›ืจื™ื— ืื•ืชืš ืœื”ืฉืชืžืฉ ื‘ื™ืฆื™ืจืช ืงื•ื“. ืื‘ืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ (ื›ืžืชื•ืืจ ื‘ืžื“ืจื™ืš), jOOQ ืขื•ื‘ื“ ื›ืš: ืืชื” ืžืชื—ื™ืœ ืขื ืกื›ื™ืžืช ืžืกื“ ื ืชื•ื ื™ื (ืžื“ื•ืจ ืงื•ื“ื), ืžื”ื ื“ืก ืื•ืชื” ืœืื—ื•ืจ ืขื ืžื—ื•ืœืœ ื”ืงื•ื“ jOOQ ื›ื“ื™ ืœืงื‘ืœ ืงื‘ื•ืฆื” ืฉืœ ืžื—ืœืงื•ืช ืฉืžื™ื™ืฆื’ื•ืช ืืช ื”ื˜ื‘ืœืื•ืช ืฉืœืš, ื•ืื– ื›ื•ืชื‘ื™ื ืกื•ื’- ืฉืื™ืœืชื•ืช ื‘ื˜ื•ื—ื•ืช ืžื•ืœ ื”ื˜ื‘ืœืื•ืช ื”ืืœื”:

	for (Record2<String, String> record : DSL.using(configuration)
//   ^^^^^^^^^^^^^^^^^^^^^^^ ะ˜ะฝั„ะพั€ะผะฐั†ะธั ะพ ั‚ะธะฟะฐั… ะฒั‹ะฒะตะดะตะฝะฐ ะฝะฐ 
//   ะพัะฝะพะฒะฐะฝะธะธ ัะณะตะฝะตั€ะธั€ะพะฒะฐะฝะฝะพะณะพ ะบะพะดะฐ, ะฝะฐ ะบะพั‚ะพั€ั‹ะน ััั‹ะปะฐะตั‚ัั ะฟั€ะธะฒะตะดะตะฝะฝะพะต
// ะฝะธะถะต ัƒัะปะพะฒะธะต SELECT 
 
       .select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
//           vvvvv ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^ ัะณะตะฝะตั€ะธั€ะพะฒะฐะฝะฝั‹ะต ะธะผะตะฝะฐ
       .from(ACTOR)
       .orderBy(1, 2)) {
    // ...
}

ื”ืงื•ื“ ื ื•ืฆืจ ื‘ืื•ืคืŸ ื™ื“ื ื™ ืžื—ื•ืฅ ืœ-build, ืื• ื™ื“ื ื™ ื‘ื›ืœ build. ืœื“ื•ื’ืžื”, ื”ืชื—ื“ืฉื•ืช ื›ื–ื• ืขืฉื•ื™ื” ืœื‘ื•ื ืžื™ื“ ืœืื—ืจ ืžื›ืŸ ื”ืขื‘ืจืช ืžืกื“ื™ ื ืชื•ื ื™ื ืฉืœ Flyway, ืฉื ื™ืชืŸ ืœื‘ืฆืข ื’ื ื‘ืื•ืคืŸ ื™ื“ื ื™ ืื• ืื•ื˜ื•ืžื˜ื™.

ื™ืฆื™ืจืช ืงื•ื“ ืžืงื•ืจ

ื™ืฉื ืŸ ืคื™ืœื•ืกื•ืคื™ื•ืช ืฉื•ื ื•ืช, ื™ืชืจื•ื ื•ืช ื•ื—ืกืจื•ื ื•ืช ื”ืงืฉื•ืจื™ื ืœื’ื™ืฉื•ืช ืืœื• ืœื™ืฆื™ืจืช ืงื•ื“ - ื™ื“ื ื™ ื•ืื•ื˜ื•ืžื˜ื™ - ืืฉืจ ืœื ืื“ื•ืŸ ื‘ื”ื ื‘ืคื™ืจื•ื˜ ื‘ืžืืžืจ ื–ื”. ืื‘ืœ, ื‘ืื•ืคืŸ ื›ืœืœื™, ื›ืœ ื”ืคื•ืื ื˜ื” ืฉืœ โ€‹โ€‹ื”ืงื•ื“ ืฉื ื•ืฆืจ ื”ื•ื ืฉื”ื•ื ืžืืคืฉืจ ืœืš ืœืฉื—ื–ืจ ื‘ื’'ืื•ื•ื” ืืช ื”"ืืžืช" ืฉืื ื• ืจื•ืื™ื ื›ืžื•ื‘ื ืช ืžืืœื™ื”, ื‘ืชื•ืš ื”ืžืขืจื›ืช ืฉืœื ื• ืื• ืžื—ื•ืฆื” ืœื”. ื‘ืžื•ื‘ืŸ ืžืกื•ื™ื, ืžื”ื“ืจื™ื ืฉืžื™ื™ืฆืจื™ื ืงื•ื“ ื‘ื™ื™ื˜, ืงื•ื“ ืžื›ื•ื ื” ืื• ืกื•ื’ ืื—ืจ ืฉืœ ืงื•ื“ ืžืงื•ื“ ืžืงื•ืจ ืขื•ืฉื™ื ืืช ืื•ืชื• ื”ื“ื‘ืจ - ืื ื• ืžืงื‘ืœื™ื ื™ื™ืฆื•ื’ ืฉืœ ื”"ืืžืช" ืฉืœื ื• ื‘ืฉืคื” ืื—ืจืช, ืœืœื ืงืฉืจ ืœืกื™ื‘ื•ืช ืกืคืฆื™ืคื™ื•ืช.

ื™ืฉ ื”ืจื‘ื” ืžื—ื•ืœืœื™ ืงื•ื“ ื›ืืœื”. ืœื“ื•ื’ืžื”, XJC ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืงื•ื“ Java ืžื‘ื•ืกืก ืขืœ ืงื‘ืฆื™ XSD ืื• WSDL. ื”ืขื™ืงืจื•ืŸ ืชืžื™ื“ ื–ื”ื”:

  • ื™ืฉ ืืžืช ืžืกื•ื™ืžืช (ืคื ื™ืžื™ืช ืื• ื—ื™ืฆื•ื ื™ืช) - ืœืžืฉืœ ืžืคืจื˜, ืžื•ื“ืœ ื ืชื•ื ื™ื ื•ื›ื•'.
  • ืื ื—ื ื• ืฆืจื™ื›ื™ื ื™ื™ืฆื•ื’ ืžืงื•ืžื™ ืฉืœ ื”ืืžืช ื”ื–ื• ื‘ืฉืคืช ื”ืชื›ื ื•ืช ืฉืœื ื•.

ื™ืชืจื” ืžื›ืš, ื›ืžืขื˜ ืชืžื™ื“ ื›ื“ืื™ ืœื™ื™ืฆืจ ื™ื™ืฆื•ื’ ื›ื–ื” โ€“ ื›ื“ื™ ืœืžื ื•ืข ื™ืชื™ืจื•ืช.

ืกืคืงื™ ืกื•ื’ื™ื ื•ืขื™ื‘ื•ื“ ื”ืขืจื•ืช

ื”ืขืจื”: ื’ื™ืฉื” ื ื•ืกืคืช, ืžื•ื“ืจื ื™ืช ื•ืกืคืฆื™ืคื™ืช ื™ื•ืชืจ ืœื™ืฆื™ืจืช ืงื•ื“ ืขื‘ื•ืจ jOOQ ื›ื•ืœืœืช ืฉื™ืžื•ืฉ ื‘ืกืคืงื™ ืกื•ื’ื™ื, ื›ืคื™ ืฉื”ื ืžื™ื•ืฉืžื™ื ื‘-F#. ื‘ืžืงืจื” ื–ื”, ื”ืงื•ื“ ื ื•ืฆืจ ืขืœ ื™ื“ื™ ื”ืžื”ื“ืจ, ืœืžืขืฉื” ื‘ืฉืœื‘ ื”ืงื•ืžืคื™ืœืฆื™ื”. ื‘ืื•ืคืŸ ืขืงืจื•ื ื™, ืงื•ื“ ื›ื–ื” ืื™ื ื• ืงื™ื™ื ื‘ืฆื•ืจื” ืฉืœ ืงื•ื“ื™ ืžืงื•ืจ. ื‘ื’'ืื•ื•ื” ื™ืฉ ื›ืœื™ื ื“ื•ืžื™ื, ืื ื›ื™ ืœื ืืœื’ื ื˜ื™ื™ื - ืืœื” ื”ื ืžืขื‘ื“ื™ ื”ืขืจื•ืช, ืœืžืฉืœ, Lombok.

ื‘ืžื•ื‘ืŸ ืžืกื•ื™ื, ืงื•ืจื™ื ื›ืืŸ ืื•ืชื ื“ื‘ืจื™ื ื›ืžื• ื‘ืžืงืจื” ื”ืจืืฉื•ืŸ, ืžืœื‘ื“:

  • ืืชื” ืœื ืจื•ืื” ืืช ื”ืงื•ื“ ืฉื ื•ืฆืจ (ืื•ืœื™ ื”ืžืฆื‘ ื”ื–ื” ืœื ื ืจืื” ื›ืœ ื›ืš ื“ื•ื—ื” ืœืžื™ืฉื”ื•?)
  • ืขืœื™ืš ืœื•ื•ื“ื ืฉื ื™ืชืŸ ืœืกืคืง ืกื•ื’ื™ื, ื›ืœื•ืžืจ, "ื ื›ื•ืŸ" ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืชืžื™ื“ ื–ืžื™ืŸ. ื–ื” ืงืœ ื‘ืžืงืจื” ืฉืœ ืœื•ืžื‘ื•ืง, ืฉืžื‘ื™ืื” ืืช "ื”ืืžืช". ื–ื” ืงืฆืช ื™ื•ืชืจ ืงืฉื” ืขื ื“ื’ืžื™ ืžืกื“ ื ืชื•ื ื™ื ื”ืชืœื•ื™ื™ื ื‘ื—ื™ื‘ื•ืจ ื—ื™ ืฉืชืžื™ื“ ื–ืžื™ืŸ.

ืžื” ื”ื‘ืขื™ื” ื‘ื™ืฆื™ืจืช ืงื•ื“?

ื‘ื ื•ืกืฃ ืœืฉืืœื” ื”ืžืกื•ื‘ื›ืช ืื™ืš ืขื“ื™ืฃ ืœื”ืชื—ื™ืœ ื™ืฆื™ืจืช ืงื•ื“ โ€“ ื™ื“ื ื™ืช ืื• ืื•ื˜ื•ืžื˜ื™ืช, ืื ื™ ื—ื™ื™ื‘ ืœืฆื™ื™ืŸ ืฉื™ืฉ ืื ืฉื™ื ืฉืžืืžื™ื ื™ื ืฉืื™ืŸ ืฆื•ืจืš ื‘ื™ืฆื™ืจืช ืงื•ื“ ื›ืœืœ. ื”ื”ืฆื“ืงื” ืœื ืงื•ื“ืช ื”ืžื‘ื˜ ื”ื–ื•, ืฉื‘ื” ื ืชืงืœืชื™ ืœืจื•ื‘, ื”ื™ื ืฉืงืฉื” ืื– ืœื”ืงื™ื ืืช ืฆื™ื ื•ืจ ื”ื‘ื ื™ื™ื”. ื›ืŸ, ื–ื” ืžืžืฉ ืงืฉื”. ื™ืฉื ืŸ ืขืœื•ื™ื•ืช ืชืฉืชื™ืช ื ื•ืกืคื•ืช. ืื ืืชื” ืจืง ื”ืชื—ืœืช ืขื ืžื•ืฆืจ ืžืกื•ื™ื (ื‘ื™ืŸ ืื ื–ื” jOOQ, ืื• JAXB, ืื• Hibernate ื•ื›ื•'), ืœื•ืงื— ื–ืžืŸ ืœื”ื’ื“ื™ืจ ืฉื•ืœื—ืŸ ืขื‘ื•ื“ื” ืฉืืชื” ืจื•ืฆื” ืœื”ืฉืงื™ืข ื‘ืœื™ืžื•ื“ ื”-API ืขืฆืžื• ื›ื“ื™ ืœื”ืคื™ืง ืžืžื ื• ืขืจืš .

ืื ื”ืขืœื•ื™ื•ืช ื”ื›ืจื•ื›ื•ืช ื‘ื”ื‘ื ืช ื”ืชืงืŸ ืฉืœ ื”ืžื—ื•ืœืœ ื’ื‘ื•ื”ื•ืช ืžื“ื™, ืื–, ืื›ืŸ, ื”-API ืขืฉื” ืขื‘ื•ื“ื” ื’ืจื•ืขื” ื‘ืฉื™ืžื•ืฉื™ื•ืช ืžื—ื•ืœืœ ื”ืงื•ื“ (ื•ื‘ืขืชื™ื“ ืžืชื‘ืจืจ ืฉื’ื ื”ื”ืชืืžื” ื”ืื™ืฉื™ืช ื‘ื• ืงืฉื”). ื”ืฉื™ืžื•ืฉื™ื•ืช ืฆืจื™ื›ื” ืœื”ื™ื•ืช ื‘ืขื“ื™ืคื•ืช ื”ื’ื‘ื•ื”ื” ื‘ื™ื•ืชืจ ืขื‘ื•ืจ ื›ืœ API ื›ื–ื”. ืื‘ืœ ื–ื” ืจืง ื˜ื™ืขื•ืŸ ืื—ื“ ื ื’ื“ ื™ืฆื™ืจืช ืงื•ื“. ืื—ืจืช, ื›ืชื•ื‘ ื‘ื™ื“ ืืช ื”ื™ื™ืฆื•ื’ ื”ืžืงื•ืžื™ ืฉืœ ื”ืืžืช ื”ืคื ื™ืžื™ืช ืื• ื”ื—ื™ืฆื•ื ื™ืช.

ืจื‘ื™ื ื™ื’ื™ื“ื• ืฉืื™ืŸ ืœื”ื ื–ืžืŸ ืœืขืฉื•ืช ืืช ื›ืœ ื–ื”. ื”ื ื ืžืฆืื™ื ื‘ื“ื“ืœื™ื™ืŸ ืขื‘ื•ืจ ืžื•ืฆืจ ื”ืกื•ืคืจ ืฉืœื”ื. ืžืชื™ืฉื”ื• ืื—ืจ ื›ืš ื ืกืจืง ืืช ืžืกื•ืขื™ ื”ื”ืจื›ื‘ื”, ื™ื”ื™ื” ืœื ื• ื–ืžืŸ. ืื ื™ ืืขื ื” ืœื”ื:

ื”ืืžืช ืชื—ื™ืœื”, ืื• ืžื“ื•ืข ืฆืจื™ืš ืœืขืฆื‘ ืืช ื”ืžืขืจื›ืช ืขืœ ื‘ืกื™ืก ื”ืชืงืŸ ืžืกื“ ื”ื ืชื•ื ื™ื
ืžืงื•ืจื™, ืืœืŸ ืื•'ืจื•ืจืง, ืขืจื™ืžืช ืงื”ืœ

ืื‘ืœ ื‘ืžืฆื‘ Hibernate / JPA, ื–ื” ื›ืœ ื›ืš ืงืœ ืœื›ืชื•ื‘ ืงื•ื“ Java.

ื‘ึผึถืึฑืžึถืช. ืขื‘ื•ืจ Hibernate ื•ื”ืžืฉืชืžืฉื™ื ืฉืœื”, ื–ื• ื’ื ื‘ืจื›ื” ื•ื’ื ืงืœืœื”. ื‘ืžืฆื‘ Hibernate, ืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื›ืชื•ื‘ ื›ืžื” ื™ืฉื•ื™ื•ืช, ื›ืžื• ื–ื”:

	@Entity
class Book {
  @Id
  int id;
  String title;
}

ื•ื›ืžืขื˜ ื”ื›ืœ ืžื•ื›ืŸ. ืขื›ืฉื™ื• ื”ื—ืœืง ืฉืœ Hibernate ื”ื•ื ืœื™ื™ืฆืจ "ืคืจื˜ื™ื" ืžื•ืจื›ื‘ื™ื ืฉืœ ืื™ืš ื‘ื“ื™ื•ืง ื”ื™ืฉื•ืช ื”ื–ื• ืชื•ื’ื“ืจ ื‘-DDL ืฉืœ ื”"ื“ื™ืืœืงื˜" ืฉืœืš ืฉืœ SQL:

	CREATE TABLE book (
  id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
  title VARCHAR(50),
 
  CONSTRAINT pk_book PRIMARY KEY (id)
);
 
CREATE INDEX i_book_title ON book (title);

... ื•ื”ืชื—ืœ ืœื”ืคืขื™ืœ ืืช ื”ื™ื™ืฉื•ื. ืชื›ื•ื ื” ืžืžืฉ ืžื’ื ื™ื‘ื” ืœื”ืชื—ื™ืœ ืœืขื‘ื•ื“ ื‘ืžื”ื™ืจื•ืช ื•ืœื ืกื•ืช ื“ื‘ืจื™ื ืฉื•ื ื™ื.

ืขื ื–ืืช, ืชืŸ ืœื™. ืฉื™ืงืจืชื™.

  • ื”ืื Hibernate ืื›ืŸ ื™ืื›ื•ืฃ ืืช ื”ื”ื’ื“ืจื” ืฉืœ ืžืคืชื— ืจืืฉื™ ื‘ืฉื ื–ื”?
  • ื”ืื Hibernate ื™ืฆื•ืจ ืื™ื ื“ืงืก ื‘-TITLE? ืื ื™ ื™ื•ื“ืข ื‘ื•ื•ื“ืื•ืช ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื–ื”.
  • ื”ืื Hibernate ื™ื”ืคื•ืš ืžืคืชื— ื–ื” ืœืžืคืชื— ื–ื”ื•ืช ื‘ืžืคืจื˜ ื”ื–ื”ื•ืช?

ื›ื ืจืื” ืฉืœื. ืื ืืชื” ืžืคืชื— ืืช ื”ืคืจื•ื™ืงื˜ ืฉืœืš ืžืืคืก, ื–ื” ืชืžื™ื“ ื ื•ื— ืคืฉื•ื˜ ืœื–ืจื•ืง ืืช ืžืกื“ ื”ื ืชื•ื ื™ื ื”ื™ืฉืŸ ื•ืœื™ืฆื•ืจ ืื—ื“ ื—ื“ืฉ ื‘ืจื’ืข ืฉืืชื” ืžื•ืกื™ืฃ ืืช ื”ื”ืขืจื•ืช ื”ื ื“ืจืฉื•ืช. ืื–, ื™ืฉื•ืช ื”ืกืคืจ ืชืœื‘ืฉ ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืืช ื”ืฆื•ืจื”:

	@Entity
@Table(name = "book", indexes = {
  @Index(name = "i_book_title", columnList = "title")
})
class Book {
  @Id
  @GeneratedValue(strategy = IDENTITY)
  int id;
  String title;
}

ืžื’ื ื™ื‘. ืœึฐื”ึดืชึฐื—ึทื“ึตืฉื. ืฉื•ื‘, ื‘ืžืงืจื” ื–ื”, ื–ื” ื™ื”ื™ื” ืงืœ ืžืื•ื“ ื‘ื”ืชื—ืœื”.

ืื‘ืœ ืชืฆื˜ืจืš ืœืฉืœื ืขืœ ื–ื” ืžืื•ื—ืจ ื™ื•ืชืจ.

ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ืชืฆื˜ืจืš ืœื”ื™ื›ื ืก ืœื™ื™ืฆื•ืจ. ืื– ื”ื“ื’ื ืžืคืกื™ืง ืœืขื‘ื•ื“. ื›ื™:

ื‘ื™ื™ืฆื•ืจ, ืœื ื ื™ืชืŸ ื™ื”ื™ื” ื™ื•ืชืจ, ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ืœื–ืจื•ืง ืืช ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื”ื™ืฉืŸ ื•ืœื”ืชื—ื™ืœ ื”ื›ืœ ืžืืคืก. ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš ื™ื”ืคื•ืš ืœืžื“ื•ืจ ืžื“ื•ืจ ืงื•ื“ื.

ืžืขื›ืฉื™ื• ื•ืœืชืžื™ื“ ืชืฆื˜ืจื›ื• ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ืœื”ืขื‘ืจืช DDL, ืœืžืฉืœ ื‘ืืžืฆืขื•ืช Flyway. ื•ืžื” ื™ืงืจื” ืœื’ื•ืคื™ื ืฉืœืš ื‘ืžืงืจื” ื”ื–ื”? ืืชื” ื™ื›ื•ืœ ืœื”ืชืื™ื ืื•ืชื ื‘ืื•ืคืŸ ื™ื“ื ื™ (ื•ืœื”ื›ืคื™ืœ ืืช ืขื•ืžืก ื”ืขื‘ื•ื“ื” ืฉืœืš) ืื• ืœืืคืฉืจ ืœ-Hibernate ืœื™ืฆื•ืจ ืื•ืชื ืžื—ื“ืฉ ืขื‘ื•ืจืš (ืžื” ื”ืกื™ื›ื•ื™ ืฉื”ืื—ื“ ืฉื ื•ืฆืจ ื‘ื“ืจืš ื–ื• ื™ืขื ื” ืขืœ ื”ืฆื™ืคื™ื•ืช ืฉืœืš?) ืืชื” ืžืคืกื™ื“ ื‘ื›ืœ ืžืงืจื”.

ืœืคื™ื›ืš, ื‘ืจื’ืข ืฉืชืขื‘ืจื• ืœื™ื™ืฆื•ืจ, ืชื–ื“ืงืงื• ืœื˜ืœืื™ื ื—ืžื™ื. ื•ืฆืจื™ืš ืœื”ื‘ื™ื ืื•ืชื ืœื™ื™ืฆื•ืจ ืžื”ืจ ืžืื•ื“. ืžื›ื™ื•ื•ืŸ ืฉืœื ื”ื›ื ืช ื•ืœื ืืจื’ื ืช ืฆื ืจืช ื—ืœืงื” ืฉืœ ื”ื”ื’ื™ืจื•ืช ืฉืœืš ืœื™ื™ืฆื•ืจ, ืืชื” ืžืชืงืŸ ื‘ืคืจืื•ืช. ื•ืื– ืื™ืŸ ืœืš ื–ืžืŸ ืœืขืฉื•ืช ื”ื›ืœ ื ื›ื•ืŸ. ื•ืืชื” ื ื•ื–ืฃ ื‘-Hibernate, ื›ื™ ื–ื• ืชืžื™ื“ ืืฉืžืชื• ืฉืœ ืžื™ืฉื”ื•, ืื‘ืœ ืœื ืืชื”...

ื‘ืžืงื•ื ื–ืืช, ื›ื‘ืจ ืžื”ื”ืชื—ืœื”, ื”ื›ืœ ื”ื™ื” ื™ื›ื•ืœ ืœื”ื™ืขืฉื•ืช ืื—ืจืช ืœื’ืžืจื™. ืœืžืฉืœ, ืœืฉื™ื ื’ืœื’ืœื™ื ืขื’ื•ืœื™ื ืขืœ ืื•ืคื ื™ื™ื.

ืงื•ื“ื ื›ืœ ืžืกื“ ื ืชื•ื ื™ื

ื”"ืืžืช" ื”ืืžื™ืชื™ืช ื‘ืกื›ื™ืžืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš ื•"ื”ืจื™ื‘ื•ื ื•ืช" ืขืœื™ื” ื ืžืฆืืช ื‘ืชื•ืš ืžืกื“ ื”ื ืชื•ื ื™ื. ื”ืกื›ื™ืžื” ืžื•ื’ื“ืจืช ืจืง ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืขืฆืžื• ื•ืœื ื‘ืฉื•ื ืžืงื•ื ืื—ืจ, ื•ืœื›ืœ ืื—ื“ ืžื”ืœืงื•ื—ื•ืช ื™ืฉ ืขื•ืชืง ืฉืœ ื”ืกื›ื™ืžื” ื”ื–ื•, ื•ืœื›ืŸ ื”ื’ื™ื•ื ื™ ืœื—ืœื•ื˜ื™ืŸ ืœืื›ื•ืฃ ืืช ื”ื”ืงืคื“ื” ืขืœ ื”ืกื›ื™ืžื” ื•ืฉืœืžื•ืชื”, ืœืขืฉื•ืช ื–ืืช ื ื›ื•ืŸ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื - ืฉื ื”ืžื™ื“ืข ื ืฉืžืจ.
ื–ื• ื—ื•ื›ืžื” ื™ืฉื ื” ืืคื™ืœื• ืžืจื•ืคื˜ืช. ืžืคืชื—ื•ืช ืจืืฉื™ื™ื ื•ื™ื™ื—ื•ื“ื™ื™ื ื˜ื•ื‘ื™ื. ืžืคืชื—ื•ืช ื–ืจื™ื ื”ื ื‘ืกื“ืจ. ื‘ื“ื™ืงืช ืื™ืœื•ืฆื™ื ื–ื” ื˜ื•ื‘. ื”ืฆื”ืจื•ืช - ื‘ืกื“ืจ ื’ืžื•ืจ.

ื•ื–ื” ืœื ื”ื›ืœ. ืœื“ื•ื’ืžื”, ื‘ืืžืฆืขื•ืช Oracle, ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืชืจืฆื” ืœืฆื™ื™ืŸ:

  • ื‘ืื™ื–ื” ื—ืœืœ ืฉื•ืœื—ื ื™ ื ืžืฆื ื”ืฉื•ืœื—ืŸ ืฉืœืš
  • ืžื” ื”ืขืจืš ืฉืœื” PCTFREE
  • ืžื” ื’ื•ื“ืœ ื”ืžื˜ืžื•ืŸ ื‘ืจืฆืฃ ืฉืœืš (ืžืื—ื•ืจื™ ื”ืžื–ื”ื”)

ื›ืœ ื–ื” ืื•ืœื™ ืœื ืžืฉื ื” ื‘ืžืขืจื›ื•ืช ืงื˜ื ื•ืช, ืื‘ืœ ืื™ืŸ ืฆื•ืจืš ืœื”ืžืชื™ืŸ ืขื“ ืœืžืขื‘ืจ ืœืชื—ื•ื ื”"ื‘ื™ื’ ื“ืื˜ื”" - ืืชื” ื™ื›ื•ืœ ืœื”ืชื—ื™ืœ ืœื™ื”ื ื•ืช ืžืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืื—ืกื•ืŸ ืฉืกื•ืคืงื• ืขืœ ื™ื“ื™ ื”ืกืคืง, ื›ืžื• ืืœื• ืฉื”ื•ื–ื›ืจื• ืœืขื™ืœ, ื”ืจื‘ื” ืงื•ื“ื ืœื›ืŸ. ืืฃ ืื—ื“ ืžื”-ORMs ืฉืจืื™ืชื™ (ื›ื•ืœืœ jOOQ) ืœื ืžืกืคืง ื’ื™ืฉื” ืœืกื˜ ื”ืžืœื ืฉืœ ืืคืฉืจื•ื™ื•ืช DDL ืฉืื•ืœื™ ืชืจืฆื” ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš. ORMs ืžืฆื™ืขื™ื ื›ืžื” ื›ืœื™ื ืฉื™ืขื–ืจื• ืœืš ืœื›ืชื•ื‘ DDL.

ืื‘ืœ ื‘ืกื•ืคื• ืฉืœ ื™ื•ื, ืกื›ื™ืžื” ืžืขื•ืฆื‘ืช ื”ื™ื˜ื‘ ื ื›ืชื‘ืช ื‘ื›ืชื‘ ื™ื“ ื‘-DDL. ื›ืœ DDL ืฉื ื•ืฆืจ ื”ื•ื ืจืง ืงื™ืจื•ื‘ ืฉืœื•.

ืžื” ืœื’ื‘ื™ ืžื•ื“ืœ ื”ืœืงื•ื—?

ื›ืคื™ ืฉื”ื•ื–ื›ืจ ืœืขื™ืœ, ื‘ืœืงื•ื— ืชืฆื˜ืจืš ืขื•ืชืง ืฉืœ ืกื›ื™ืžืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš, ืชืฆื•ื’ืช ื”ืœืงื•ื—. ืžื™ื•ืชืจ ืœืฆื™ื™ืŸ ืฉืชืฆื•ื’ืช ืœืงื•ื— ื–ื• ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืžืกื•ื ื›ืจื ืช ืขื ื”ืžื•ื“ืœ ื”ืืžื™ืชื™. ืžื”ื™ ื”ื“ืจืš ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ืœื”ืฉื™ื’ ื–ืืช? ืขื ืžื—ื•ืœืœ ืงื•ื“.

ื›ืœ ืžืกื“ื™ ื”ื ืชื•ื ื™ื ืžืกืคืงื™ื ืืช ื”ืžื˜ื-ืžื™ื“ืข ืฉืœื”ื ื‘ืืžืฆืขื•ืช SQL. ื”ื ื” ืื™ืš ืœืงื‘ืœ ืืช ื›ืœ ื”ื˜ื‘ืœืื•ืช ื‘ื ื™ื‘ื™ SQL ืฉื•ื ื™ื ืžืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš:

	-- H2, HSQLDB, MySQL, PostgreSQL, SQL Server
SELECT table_schema, table_name
FROM information_schema.tables
 
-- DB2
SELECT tabschema, tabname
FROM syscat.tables
 
-- Oracle
SELECT owner, table_name
FROM all_tables
 
-- SQLite
SELECT name
FROM sqlite_master
 
-- Teradata
SELECT databasename, tablename
FROM dbc.tables

ืฉืื™ืœืชื•ืช ืืœื” (ืื• ื“ื•ืžื•ืช, ืชืœื•ื™ ืื ืืชื” ืฆืจื™ืš ืœืฉืงื•ืœ ื’ื ืชืฆื•ื’ื•ืช, ืชืฆื•ื’ื•ืช ืžืžื•ืžืฉื•ืช, ืคื•ื ืงืฆื™ื•ืช ื‘ืขืœื•ืช ืขืจืš ื˜ื‘ืœื”) ืžื‘ื•ืฆืขื•ืช ื’ื ืขืœ ื™ื“ื™ ืงืจื™ืื” DatabaseMetaData.getTables() ืž-JDBC, ืื• ื‘ืืžืฆืขื•ืช ืžื˜ื ืžื•ื“ื•ืœ jOOQ.

ืžื”ืชื•ืฆืื•ืช ืฉืœ ืฉืื™ืœืชื•ืช ื›ืืœื”, ืงืœ ื™ื—ืกื™ืช ืœื™ืฆื•ืจ ื›ืœ ื™ื™ืฆื•ื’ ื‘ืฆื“ ื”ืœืงื•ื— ืฉืœ ืžื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš, ืœื ืžืฉื ื” ื‘ืื™ื–ื• ื˜ื›ื ื•ืœื•ื’ื™ื” ืืชื” ืžืฉืชืžืฉ ื‘ืœืงื•ื—.

  • ืื ืืชื” ืžืฉืชืžืฉ ื‘-JDBC ืื• ื‘-Spring, ืชื•ื›ืœ ืœื™ืฆื•ืจ ืงื‘ื•ืฆื” ืฉืœ ืงื‘ื•ืขื™ ืžื—ืจื•ื–ืช
  • ืื ืืชื” ืžืฉืชืžืฉ ื‘-JPA, ืื– ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืืช ื”ื™ืฉื•ื™ื•ืช ืขืฆืžืŸ
  • ืื ืืชื” ืžืฉืชืžืฉ ื‘-jOOQ ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžื˜ื ืžื•ื“ืœ jOOQ

ื‘ื”ืชืื ืœืžื™ื“ืช ื”ื™ื›ื•ืœืช ืฉื”-API ืฉืœ ื”ืœืงื•ื— ืฉืœืš ืžืฆื™ืข (ืœืžืฉืœ jOOQ ืื• JPA), ืžื•ื“ืœ ื”ืžื˜ื ืฉื ื•ืฆืจ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืขืฉื™ืจ ื•ืžืœื ื‘ืืžืช. ืงื—, ืœืžืฉืœ, ืืช ื”ืืคืฉืจื•ืช ืฉืœ ื”ืฆื˜ืจืคื•ืช ืžืจื•ืžื–ื•ืช, ื”ื•ืฆื’ ื‘-jOOQ 3.11, ื”ืžืกืชืžืš ืขืœ ืžื˜ื-ืžื™ื“ืข ืฉื ื•ืฆืจ ืขืœ ืงืฉืจื™ ืžืคืชื— ื–ืจ ื‘ื™ืŸ ื”ื˜ื‘ืœืื•ืช ืฉืœืš.

ื›ืขืช ื›ืœ ืชื•ืกืคืช ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ืชืขื“ื›ืŸ ืื•ื˜ื•ืžื˜ื™ืช ืืช ืงื•ื“ ื”ืœืงื•ื—. ื“ืžื™ื™ื ื• ืœืžืฉืœ:

ALTER TABLE book RENAME COLUMN title TO book_title;

ื”ืื ืืชื” ื‘ืืžืช ืจื•ืฆื” ืœืขืฉื•ืช ืืช ื”ืขื‘ื•ื“ื” ื”ื–ื• ืคืขืžื™ื™ื? ื‘ืฉื•ื ืžืงืจื”. ืื ื—ื ื• ืคืฉื•ื˜ ืžื‘ืฆืขื™ื ืืช ื”-DDL, ืžืคืขื™ืœื™ื ืื•ืชื• ื“ืจืš ืฆื™ื ื•ืจ ื”ื‘ื ื™ื™ื” ืฉืœืš ื•ืžืงื‘ืœื™ื ืืช ื”ื™ืฉื•ืช ื”ืžืขื•ื“ื›ื ืช:

@Entity
@Table(name = "book", indexes = {
 
  // ะ’ั‹ ะพะฑ ัั‚ะพะผ ะทะฐะดัƒะผั‹ะฒะฐะปะธััŒ?
  @Index(name = "i_book_title", columnList = "book_title")
})
class Book {
  @Id
  @GeneratedValue(strategy = IDENTITY)
  int id;
 
  @Column("book_title")
  String bookTitle;
}

ืื• ืžื—ืœืงืช jOOQ ื”ืžืขื•ื“ื›ื ืช. ืจื•ื‘ ื”ืฉื™ื ื•ื™ื™ื ื‘-DDL ืžืฉืคื™ืขื™ื ื’ื ืขืœ ื”ืกืžื ื˜ื™ืงื”, ืœื ืจืง ืขืœ ื”ืชื—ื‘ื™ืจ. ืœื›ืŸ, ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื ื•ื— ืœืจืื•ืช ื‘ืงื•ื“ ื”ืงื•ืžืคื™ืœืฆื™ื” ืื™ื–ื” ืงื•ื“ ื™ื•ืฉืคืข (ืื• ื™ื›ื•ืœ ืœื”ื™ื•ืช) ืžื”ื’ื“ืœืช ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš.

ื”ืืžืช ื”ื™ื—ื™ื“ื”

ืœื ืžืฉื ื” ื‘ืื™ื–ื• ื˜ื›ื ื•ืœื•ื’ื™ื” ืืชื” ืžืฉืชืžืฉ, ืชืžื™ื“ ื™ืฉ ืžื•ื“ืœ ืื—ื“ ืฉื”ื•ื ืžืงื•ืจ ื”ืืžืช ื”ื™ื—ื™ื“ ืขื‘ื•ืจ ืชืช-ืžืขืจื›ืช ื›ืœืฉื”ื™ - ืื• ืœืคื—ื•ืช ืขืœื™ื ื• ืœืฉืื•ืฃ ืœื›ืš ื•ืœื”ื™ืžื ืข ืžื‘ืœื‘ื•ืœ ืืจื’ื•ื ื™ ืฉื‘ื• "ื”ืืžืช" ื ืžืฆืืช ื‘ื›ืœ ืžืงื•ื ื•ื‘ืฉื•ื ืžืงื•ื ื‘ื‘ืช ืื—ืช. ื”ื›ืœ ื™ื›ื•ืœ ืœื”ื™ื•ืช ื”ืจื‘ื” ื™ื•ืชืจ ืงืœ. ืื ืืชื” ืจืง ืžื—ืœื™ืฃ ืงื‘ืฆื™ XML ืขื ืžืขืจื›ืช ืื—ืจืช, ืคืฉื•ื˜ ื”ืฉืชืžืฉ ื‘-XSD. ืชืกืชื›ืœ ืขืœ ืžื˜ื-ืžื•ื“ืœ INFORMATION_SCHEMA ืฉืœ jOOQ ื‘ืฆื•ืจืช XML:
https://www.jooq.org/xsd/jooq-meta-3.10.0.xsd

  • XSD ืžื•ื‘ืŸ ื”ื™ื˜ื‘
  • XSD ืžืกืžืŸ ื”ื™ื˜ื‘ ืชื•ื›ืŸ XML ื•ืžืืคืฉืจ ืื™ืžื•ืช ื‘ื›ืœ ืฉืคื•ืช ื”ืœืงื•ื—
  • XSD ื”ื•ื ื‘ืขืœ ื’ืจืกื” ื˜ื•ื‘ื” ื•ืชื•ืื ืžืื•ื“ ืœืื—ื•ืจ
  • ื ื™ืชืŸ ืœืชืจื’ื XSD ืœืงื•ื“ Java ื‘ืืžืฆืขื•ืช XJC

ื”ื ืงื•ื“ื” ื”ืื—ืจื•ื ื” ื—ืฉื•ื‘ื”. ื‘ืขืช ืชืงืฉื•ืจืช ืขื ืžืขืจื›ืช ื—ื™ืฆื•ื ื™ืช ื‘ืืžืฆืขื•ืช ื”ื•ื“ืขื•ืช XML, ืื ื• ืจื•ืฆื™ื ืœื”ื™ื•ืช ื‘ื˜ื•ื—ื™ื ืฉื”ื”ื•ื“ืขื•ืช ืฉืœื ื• ืชืงืคื•ืช. ืงืœ ืžืื•ื“ ืœื”ืฉื™ื’ ื–ืืช ืขื JAXB, XJC ื•-XSD. ื–ื” ื™ื”ื™ื” ื˜ื™ืจื•ืฃ ื’ืžื•ืจ ืœื—ืฉื•ื‘ ืฉื‘ื’ื™ืฉืช ืขื™ืฆื•ื‘ ืฉืœ Java, ืฉื‘ื” ืื ื• ื™ื•ืฆืจื™ื ืืช ื”ืžืกืจื™ื ืฉืœื ื• ื›ืื•ื‘ื™ื™ืงื˜ื™ Java, ื”ื ื™ื›ื•ืœื™ื ืื™ื›ืฉื”ื• ืœื”ื™ื•ืช ืžื•ื‘ื ื™ื ืœ-XML ื•ืœืฉืœื•ื— ืื•ืชื ืœืฆืจื™ื›ื” ืœืžืขืจื›ืช ืื—ืจืช. ื”-XML ืฉื ื•ืฆืจ ื‘ื“ืจืš ื–ื• ื™ื”ื™ื” ื‘ืื™ื›ื•ืช ื™ืจื•ื“ื” ืžืื•ื“, ืœื ืžืชื•ืขื“ ื•ืงืฉื” ืœืคื™ืชื•ื—. ืื ื”ื™ื™ืชื” ื”ืกื›ืžื” ืขืœ ืจืžืช ืื™ื›ื•ืช ื”ืฉื™ืจื•ืช (SLA) ืขืœ ืžืžืฉืง ื›ื–ื”, ืžื™ื“ ื”ื™ื™ื ื• ืžืคืฉืœื™ื.

ืœืžืขืŸ ื”ืืžืช, ื–ื” ื‘ื“ื™ื•ืง ืžื” ืฉืงื•ืจื” ื›ืœ ื”ื–ืžืŸ ืขื ื”-API ืฉืœ JSON, ืื‘ืœ ื–ื” ื›ื‘ืจ ืกื™ืคื•ืจ ืื—ืจ, ืื ื™ ืืชื•ื•ื›ื— ื‘ืคืขื ื”ื‘ืื”...

ืžืื’ืจื™ ืžื™ื“ืข: ื”ื ื–ื”ื™ื

ื‘ืขื‘ื•ื“ื” ืขื ืžืกื“ื™ ื ืชื•ื ื™ื, ืืชื” ืžื‘ื™ืŸ ืฉื›ื•ืœื ื–ื”ื™ื ื‘ืขืฆื. ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ื”ื•ื ื”ื‘ืขืœื™ื ืฉืœ ื”ื ืชื•ื ื™ื ืฉืœื• ื•ืขืœื™ื• ืœื ื”ืœ ืืช ื”ืกื›ื™ืžื”. ื›ืœ ืฉื™ื ื•ื™ ืฉื ืขืฉื” ื‘ืกื›ื™ืžื” ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžื™ื•ืฉื ื™ืฉื™ืจื•ืช ื‘-DDL ื›ืš ืฉืžืงื•ืจ ื”ืืžืช ื”ื™ื—ื™ื“ ื™ืชืขื“ื›ืŸ.

ื›ืืฉืจ ืขื“ื›ื•ืŸ ื”ืžืงื•ืจ ื”ืชืจื—ืฉ, ื›ืœ ื”ืœืงื•ื—ื•ืช ื—ื™ื™ื‘ื™ื ื’ื ืœืขื“ื›ืŸ ืืช ื”ืขื•ืชืงื™ื ืฉืœื”ื ืฉืœ ื”ืžื•ื“ืœ. ื™ื™ืชื›ืŸ ืฉื—ืœืง ืžื”ืœืงื•ื—ื•ืช ื™ื™ื›ืชื‘ื• ื‘-Java ื‘ืืžืฆืขื•ืช jOOQ ื•-Hibernate ืื• JDBC (ืื• ืฉื ื™ื”ื). ืœืงื•ื—ื•ืช ืื—ืจื™ื ืขืฉื•ื™ื™ื ืœื”ื™ื›ืชื‘ ื‘-Perl (ื‘ื•ืื• ื ืื—ืœ ืœื”ื ื‘ื”ืฆืœื—ื”), ืื—ืจื™ื ื‘-C#. ื–ื” ืœื ืžืฉื ื”. ื”ืžื•ื“ืœ ื”ืขื™ืงืจื™ ื ืžืฆื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื. ืžื•ื“ืœื™ื ืฉื ื•ืฆืจื• ืขืœ ื™ื“ื™ ORM ื”ื ื‘ื“ืจืš ื›ืœืœ ื‘ืื™ื›ื•ืช ื™ืจื•ื“ื”, ืžืชื•ืขื“ื™ื ื‘ืฆื•ืจื” ื’ืจื•ืขื” ื•ืงืฉื™ื ืœืคื™ืชื•ื—.

ืื– ืืœ ืชืขืฉื” ื˜ืขื•ื™ื•ืช. ืืœ ืชืขืฉื” ื˜ืขื•ื™ื•ืช ืžื”ื”ืชื—ืœื”. ืขื‘ื•ื“ื” ืžืชื•ืš ืžืกื“ ื ืชื•ื ื™ื. ื‘ื ื™ื™ืช ืฆื™ื ื•ืจ ืคืจื™ืกื” ืฉื ื™ืชืŸ ืœื‘ืฆืข ืื•ื˜ื•ืžื˜ื™ืช. ืืคืฉืจ ืœืžื—ื•ืœืœื™ ืงื•ื“ ืœื”ืขืชื™ืง ื‘ื ื•ื—ื•ืช ืืช ืžื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš ื•ืœื”ืฉืœื™ืš ืื•ืชื• ืขืœ ืœืงื•ื—ื•ืช. ื•ืชืคืกื™ืง ืœื“ืื•ื’ ืœืžื—ื•ืœืœื™ ืงื•ื“. ื”ื ื˜ื•ื‘ื™ื. ืื™ืชื ืชื”ืคื•ืš ืœื™ื•ืชืจ ืคืจื•ื“ื•ืงื˜ื™ื‘ื™. ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ืฉืงื™ืข ืžืขื˜ ื–ืžืŸ ื‘ื”ื’ื“ืจืชื ื›ื‘ืจ ืžื”ื”ืชื—ืœื”, ื•ื™ื”ื™ื• ืœืš ืฉื ื™ื ืฉืœ ื‘ื™ืฆื•ืขื™ื ืžืฉื•ืคืจื™ื ื›ื“ื™ ืœื‘ื ื•ืช ืืช ื”ืกื™ืคื•ืจ ืฉืœ ื”ืคืจื•ื™ืงื˜ ืฉืœืš.

ืืœ ืชื•ื“ื• ืœื™ ืขื“ื™ื™ืŸ, ืžืื•ื—ืจ ื™ื•ืชืจ.

ื”ื‘ื”ืจื”

ืฉื™ื”ื™ื” ื‘ืจื•ืจ: ืžืืžืจ ื–ื” ืื™ื ื• ืชื•ืžืš ื‘ืฉื•ื ืฆื•ืจื” ื‘ื›ืš ืฉืฆืจื™ืš ืœื”ื’ืžื™ืฉ ืืช ื”ืžืขืจื›ืช ื›ื•ืœื” (ื›ืœื•ืžืจ, ืชื—ื•ื, ืœื•ื’ื™ืงื” ืขืกืงื™ืช ื•ื›ื•' ื•ื›ื•') ื›ืš ืฉืชืชืื™ื ืœืžื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœืš. ืžื” ืฉืื ื™ ืžื“ื‘ืจ ืขืœื™ื• ื‘ืžืืžืจ ื–ื” ื”ื•ื ืฉืงื•ื“ ืœืงื•ื— ืฉืžืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžืกื“ ื ืชื•ื ื™ื ืฆืจื™ืš ืœืคืขื•ืœ ืขืœ ื‘ืกื™ืก ืžื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื›ืš ืฉื”ื•ื ืœื ื™ืฉื—ื–ืจ ืืช ืžื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื‘ืกื˜ื˜ื•ืก "ืžื—ืœืงื” ืจืืฉื•ื ื”". ืœื•ื’ื™ืงื” ื›ื–ื• ืžืžื•ืงืžืช ื‘ื“ืจืš ื›ืœืœ ื‘ืฉื›ื‘ืช ื”ื’ื™ืฉื” ืœื ืชื•ื ื™ื ื‘ืœืงื•ื— ืฉืœืš.

ื‘ืืจื›ื™ื˜ืงื˜ื•ืจื•ืช ื“ื•-ืžืคืœืกื™ื•ืช, ืฉืขื“ื™ื™ืŸ ื ืฉืžืจื•ืช ื‘ืžืงื•ืžื•ืช ืžืกื•ื™ืžื™ื, ืžื•ื“ืœ ืžืขืจื›ืช ื›ื–ื” ืขืฉื•ื™ ืœื”ื™ื•ืช ื”ื™ื—ื™ื“ ื”ืืคืฉืจื™. ืขื ื–ืืช, ื‘ืจื•ื‘ ื”ืžืขืจื›ื•ืช, ืฉื›ื‘ืช ื”ื’ื™ืฉื” ืœื ืชื•ื ื™ื ื ืจืื™ืช ืœื™ ื›"ืชืช-ืžืขืจื›ืช" ื”ืžืงื•ืคืœืช ืืช ืžื•ื“ืœ ืžืกื“ ื”ื ืชื•ื ื™ื.

ื—ืจื™ื’ื™ื

ืœื›ืœ ื›ืœืœ ื™ืฉ ื™ื•ืฆืื™ื ืžืŸ ื”ื›ืœืœ, ื•ืืžืจืชื™ ื‘ืขื‘ืจ ืฉื”ื’ื™ืฉื” ื”ืจืืฉื•ื ื” ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื ื•ื™ืฆื™ืจืช ืงื•ื“ ื”ืžืงื•ืจ ื™ื›ื•ืœื” ืœืคืขืžื™ื ืœื”ื™ื•ืช ื‘ืœืชื™ ื”ื•ืœืžืช. ื”ื ื” ื›ืžื” ื—ืจื™ื’ื™ื ื›ืืœื” (ื›ื ืจืื” ื™ืฉ ืื—ืจื™ื):

  • ื›ืืฉืจ ื”ืกื›ื™ืžื” ืื™ื ื” ื™ื“ื•ืขื” ื•ื™ืฉ ืœืคืชื•ื— ืื•ืชื”. ืœื“ื•ื’ืžื”, ืืชื” ืžืกืคืง ื›ืœื™ ืฉื™ืขื–ื•ืจ ืœืžืฉืชืžืฉื™ื ืœื ื•ื•ื˜ ื‘ื›ืœ ื“ื™ืื’ืจืžื”. ืคื™ื•. ืื™ืŸ ื›ืืŸ ื™ืฆื™ืจืช ืงื•ื“. ืื‘ืœ ื‘ื›ืœ ื–ืืช - ืžืกื“ ื”ื ืชื•ื ื™ื ืงื•ื“ื ื›ืœ.
  • ื›ืืฉืจ ืฆืจื™ืš ืœื™ืฆื•ืจ ืžืขื’ืœ ืชื•ืš ื›ื“ื™ ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื›ืœืฉื”ื™. ื ืจืื” ืฉื”ื“ื•ื’ืžื” ื”ื–ื• ื”ื™ื ื’ืจืกื” ืžืขื˜ ืžืฆื•ืžืฆืžืช ืฉืœ ื”ืชื‘ื ื™ืช ืขืจืš ืชื›ื•ื ืช ื™ืฉื•ืช, ื›ืœื•ืžืจ, ืื™ืŸ ืœืš ื‘ืืžืช ืกื›ืžื” ืžื•ื’ื“ืจืช ื”ื™ื˜ื‘. ื‘ืžืงืจื” ื–ื”, ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืืชื” ืืคื™ืœื• ืœื ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ื˜ื•ื— ื‘ื›ืœืœ ืฉ-RDBMS ื™ืชืื™ื ืœืš.

ื—ืจื™ื’ื™ื ื”ื ืžื˜ื‘ืขื ื—ืจื™ื’ื™ื. ื‘ืจื•ื‘ ื”ืžืงืจื™ื ื”ื›ื•ืœืœื™ื ืฉื™ืžื•ืฉ ื‘-RDBMS, ื”ืกื›ื™ืžื” ื™ื“ื•ืขื” ืžืจืืฉ, ื”ื™ื ื ืžืฆืืช ื‘ืชื•ืš ื”-RDBMS ื•ื”ื™ื ื”ืžืงื•ืจ ื”ื™ื—ื™ื“ ืœ"ืืžืช", ื•ื›ืœ ื”ืœืงื•ื—ื•ืช ืฆืจื™ื›ื™ื ืœืจื›ื•ืฉ ืขื•ืชืงื™ื ื”ื ื’ื–ืจื™ื ืžืžื ื”. ื‘ืื•ืคืŸ ืื™ื“ื™ืืœื™, ื–ื” ืฆืจื™ืš ืœื›ืœื•ืœ ืžื—ื•ืœืœ ืงื•ื“.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”