áá±áž áá¬á!
áá»áœááºá¯ááºááá¯á·ááẠáá±á«ááºážá
ááºááᯠáááºáááºá
á°ážá
ááºážáááºá
á€á¡á
á¬ážáá±á¬ááºáá»áá±á¬áá±á¬ááºážáá«ážááœááºá ááá
á¹á
ááá¯ááºážáá®ážáá«ážááœááºá á¡ááºááá®áá±ážááŸááºážáá
áºáá¯ááá±áá¬áá±á¬áºáááºááẠJava áá
áœááºážáááºáá»á¬ážááŸááá¯ááºáá² "áá±áá¬áá±á·á
áºááŸ" áá®ááá¯ááºážáá¯ááºááá·áºáááºáᯠáá»áœááºá¯ááºáááºááŒááºáááŒááºážá¡ááŒá±á¬ááºážááŸááºážááŒáá«áááºá ááŸáá·áºá¡áá¯ááºáá¯ááºáááº)á áá¯ááááá»ááºážáááºáááºážááᯠááœá±ážáá»ááºááŒááºážááŒáá·áº áááºááẠáááºáááá±á¬áá»ááºá
áááºááŒá®ážááœá¬ážáá¬áááºááŸáá·áºá¡áá»áŸ ááŸááºáá»á¬ážáá±á¬áá±ááá¬ááŸáá·áº áá±ááá¬ááááºážááŒá±á¬ááºážááᯠáááºáááºáá±á¬ááºáá«á
áá±á¬ááºážáá«ážááᯠá¡ááŒá±áá¶á áá±ážáá¬ážáá²á·ááŒááºáž ááŒá
áºáááºá
ááá¹ááá»á¬ážááœáẠreddit ááŸáá·áº áááºáááºá á
áááºáááºá
á¬ážááœáẠááœá±ážááœá±ážááŸá¯áá»á¬áž
áá¯ááºáá»áá¯ážáááº
jOOQ ááŸáá·áº áááá»áœááºážáá¬ááŒá®áž jOOQ áááºáááºáááºá¡ááœáẠá¡áááºážá¡ááŒá áºáá¯ááºáá¯ááºáá¯ááºááŒááºážá¡áá±á«áº á¡áá±ážá¡áááºáá¬ážááŸá®ááá¯áá±áááá·áº á¡áá¯á¶ážááŒá¯áá°á¡ááœáŸá¬áááºáá±ážááŸáááá·áºá¡ááœáẠáá»áœááºá¯áẠá¡á¶á·ááŒáááá«áááºá áááºá¡á¶áááºááœááºáá»ááŒá áºáááºáá°áá±á¬ jOOQ ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá០ááá·áºá¡á¬áž áááºáá°áá»áŸ áá¬ážááŒá áºááŒááºážáááŸáááá·áºá¡ááŒáẠááá·áºá¡á¬áž áá¯ááºáá¯ááºáá¯ááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááẠáááºáá°áá»áŸá¡áááºážá¡áá»ááºááá¯ááºáá«á ááá¯á·áá±á¬áº áá¯á¶áá±á¡á¬ážááŒáá·áº (áááºá áœá²á á¬á¡á¯ááºááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž) jOOQ ááẠá€áá²á·ááá¯á·á¡áá¯ááºáá¯ááºáááº- áááºááẠ(á¡ááœá±á¡ááŸá áº) áá±áá¬áá±á·á áºá áá áºáá áºáá¯ááŒáá·áºá áááºáááºá áááºáááá¬ážáá»á¬ážááá¯ááá¯ááºá á¬ážááŒá¯ááá·áºá¡áááºážáá áºá¡á¯ááºááá¯áááẠjOOQ áá¯ááºáá®ážá ááºááŒáá·áºááŒá±á¬ááºážááŒááºá¡ááºáá»ááºáá®áá¬áá¯ááºáá«á ááá¯á·áá±á¬áẠtype- ááá¯áá±ážáá«á á€ááá¬ážáá»á¬ážááŸáá·áº áááºáááºá áá¯á¶ááŒá¯á¶áá±á¬áá±ážááœááºážáá»á¬áž
for (Record2<String, String> record : DSL.using(configuration)
// ^^^^^^^^^^^^^^^^^^^^^^^ ÐÐœÑПÑЌаÑÐžÑ ÐŸ ÑОпаÑ
вÑвеЎеМа Ма
// ПÑМПваМОО ÑгеМеÑОÑПваММПгП кПЎа, Ма кПÑПÑÑй ÑÑÑлаеÑÑÑ Ð¿ÑОвеЎеММПе
// МОже ÑÑлПвОе SELECT
.select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
// vvvvv ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ÑгеМеÑОÑПваММÑе ОЌеМа
.from(ACTOR)
.orderBy(1, 2)) {
// ...
}
áá¯ááºááᯠáááºáá±á¬ááºááŸá¯ááŒááºáááœáẠááá¯ááºááá¯ááºááŒá
áºá
á±á áááºáá±á¬ááºááŸá¯ááá¯ááºážááœáẠááá¯ááºááá¯ááºááŒá
áºá
á± áá¯ááºáá±ážáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááá¯ááá¯á·áá±á¬áá»áá¯ážááœá¬ážááŸá¯ááẠááŒá®ážááŒá®ážáá»ááºáž ááŒá
áºáá±á«áºáá¬ááá¯ááºáááºá
á¡áááºážá¡ááŒá áºáá¯ááºáá»áá¯ážáááº
áá¯ááºáá¯ááºáá¯ááºááŒááºážá¡ááœáẠá€áá»ááºážáááºáááºážáá»á¬ážááŸáá·áº áááºá ááºáá±áá±á¬ á¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡ááœá±ážá¡áá±á«áºáá»á¬ážá á¡á¬ážáá¬áá»ááºáá»á¬ážááŸáá·áº á¡á¬ážáááºážáá»ááºáá»á¬áž - manual ááŸáá·áº á¡ááá¯á¡áá»á±á¬ááºááŒá áºááẠ- á€áá±á¬ááºážáá«ážááœáẠá¡áá±ážá áááºáááœá±ážááœá±ážáá±á¬á·áá«á ááá¯á·áá±á¬áº áá±áá°áá»á¡á¬ážááŒáá·áºá áá¯ááºáá¯ááºááá¯ááºáá±á¬áá¯ááºá á¡áá¯á¶ážá á¯á¶áá±á¬á¡áá»ááºááŸá¬ áá»áœááºá¯ááºááá¯á·áá áá áºá¡ááœááºážáááŒá áºá á± áá»áœááºá¯ááºááá¯á·áá áá áºá¡ááŒááºáááŒá áºá á± áá»áœááºá¯ááºááá¯á·áááºáá¶áá¬ážáá±á¬ âá¡ááŸááºááá¬ážâ ááᯠJava ááœáẠááŒááºáááºáá¯ááºáá¯ááºááá¯ááºá á±ááŒááºážáááºááŒá áºáááºá áá áºáááºážá¡á¬ážááŒáá·áº ááá¯ááºáá¯ááºá á ááºáá¯áẠááá¯á·ááá¯áẠá¡áááºážá¡ááŒá áºáá¯ááºá០á¡ááŒá¬ážáá¯ááºáá áºáá»áá¯ážáá»áá¯ážááᯠáá¯ááºáá¯ááºááá·áº ááœááºááŒá°áá¬áá»á¬ážááẠá¡áá°áá°áááºááŒá áºááẠ- áá»áœááºá¯ááºááá¯á·ááẠáá®ážááŒá¬ážá¡ááŒá±á¬ááºážáááºážáá»á¬áž áááºááá¯á·áááºááŸáá á±áá¬áá° á¡ááŒá¬ážáá¬áá¬á áá¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·á "á¡ááŸááºááá¬áž" ááᯠááá¯ááºá á¬ážááŒá¯ááŸá¯ááᯠáááŸááá«áááºá
áá®ááᯠcode generator ááœá± á¡áá»á¬ážááŒá®ážááŸááá«áááºá á¥ááá¬á¡á¬ážááŒááºá·,
- á¡áá»áá¯á·áá±á¬á¡ááŸááºááá¬ážáá»á¬áž (á¡ááœááºážááá¯ááºáž ááá¯á·ááá¯áẠááŒááºá) - á¥ááá¬á áááºááŸááºáá»ááºáá áºáá¯á áá±áá¬áá±á¬áºáááºá á áááºááŒáá·áºá
- áá»áœááºá¯ááºááá¯á·á áááá¯ááááºážáááºážáá¬áá¬á áá¬ážááŒáá·áº á€á¡ááŸááºááá¬ážááᯠáá±áááá¯ááºáᬠááá¯ááºá á¬ážááŒá¯ááŸá¯áá áºáᯠááá¯á¡ááºáá«áááºá
ááá¯á·á¡ááŒááºá áááºáá±ááŸá¯áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážáááºá¡ááœáẠááá¯ááá¯á·áá±á¬ ááá¯ááºá á¬ážááŒá¯ááŸá¯áá áºáá¯ááᯠáááºáá®ážááẠá¡ááŒá²ááá¯ááᯠá¡ááŒá¶ááŒá¯ááá¯áá«áááºá
áááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážááŸáá·áº ááŸááºáá»ááºáá±ážááŒááºáž áá¯ááºáá±á¬ááºááŒááºážááá¯á·ááᯠááá¯ááºááá·áºáá«á
ááŸááºáá»ááº- jOOQ á¡ááœáẠáá¯ááºáá¯ááºáá¯ááºááŒááºážá¡ááœáẠáá±á¬ááºáááºá ááá¯ááá¯áá±ááºáá®ááŒá®áž áááá»áá±á¬áá»ááºážáááºáááºážááŸá¬ á¡áá»áá¯ážá¡á
á¬ážáá¶á·ááá¯ážáá±ážáá°áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá
áá áºáááºážá¡á¬ážááŒáá·áºá áááááá á¹á ááŸááœá²á á€áá±áá¬ááœáẠá¡áá¬ážáá°á¡áá¬áá»á¬áž ááŒá áºáá»ááºáááº-
- áá¯ááºáá±ážáá¬ážáá±á¬áá¯ááºááᯠáááºáááœá±á·áá« (á€á¡ááŒá±á¡áá±ááẠáá áºá á¯á¶áá áºáŠážá¡ááœáẠá¡ááœááºááœá¶ááŸá¬ááœááºáá±á¬ááºážáá¯á¶ááá±á«áºáá«á)
- á¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠáá¶á·ááá¯ážáá±ážááá¯ááºááŒá±á¬ááºáž áá±áá»á¬á á±ááááºááŒá áºááŒá®ážá ááá¯ááá¯áááºááŸá¬ "ááŸááº" ááẠá¡ááŒá²ááŸáááá«áááºá "á¡ááŸááºááá¬áž" ááᯠá¡ááŸááºá¡áá¬ážááŒá¯áá±á¬ Lombok áááŒá áºáááºááœáẠáááºážááẠááœááºáá°áááºá á¡ááŒá²áááºážáááŸáááá¯ááºáá±á¬ ááá¯ááºááá¯ááºáá»áááºáááºááŸá¯á¡áá±á«áº áá°áááºáá±á¬ áá±áá¬áá±á·á áºáá±á¬áºáááºáá»á¬ážááŸáá·áº á¡áááºážáááºááá¯ááááºáá²áá«áááºá
áá¯ááºáááºáá®ážááŸá¯ ááŒá¿áá¬á áá¬áá²á
Code Generation ááᯠáááºááá¯á áááá²ááá¯áᬠáááºáá²áá²á·áá±ážááœááºážá¡ááŒáẠ- ááá¯ááºááá¯áẠáá«ááŸááá¯áẠá¡ááá¯á¡áá»á±á¬áẠCode Generation áá¯ááºááá¯á· áááá¯á¡ááºáá°ážááá¯á· áá¯á¶ááŒááºáá²á·áá°ááœá± á¡áá»á¬ážááŒá®ážááŸááá«áááºá á€á¡ááŒááºá¡ááœáẠáá»áŸááá±á¬á¡áá»ááºááŸá¬ ááá¯ááºááá¯ááºážáááºáá±á¬ááºááẠáááºáá²áá±á¬ááŒá±á¬áá·áºááŒá áºáááºá áá¯ááºáááºá ááááºáááºáááºá á¡ááá¯áááºáá±á¬ááºážá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá¯ááºáá»á ááááºáá»á¬ážááŸááá«áááºá á¡áááºá áááºááẠáá®ážááŒá¬ážáá¯ááºáá¯ááºáá áºáᯠ(jOOQ ááá¯á·ááá¯áẠJAXB ááá¯á·ááá¯áẠHibernate á áááº) ááŒáá·áº á áááºáá±áá«áá áááºážá០áááºááá¯ážáááŸáááẠAPI ááá¯ááºááá¯ááºáá±á·áá¬áááºáá°ááá¯áá±á¬ workbench áá áºáá¯áááºáá±á¬ááºááẠá¡áá»áááºáá°ááááºááŒá áºáá«áááºá .
áá»ááºááá±áá¬á á ááºáá á¹á ááºážááᯠáá¬ážáááºááŒááºážááŸáá·áº áááºá ááºáá±á¬ áá¯ááºáá»á ááááºáá»á¬áž ááŒáá·áºáá¬ážáá«áá á¡ááŸááºááŸá¬á API ááẠcode generator á á¡áá¯á¶ážááŒá¯ááá¯ááºá áœááºážá¡áá±á«áº áá¶á·áá»ááºážá áœá¬ áá¯ááºáá±á¬ááºáá²á·ááẠ(áá±á¬ááºááœáẠáááºážááœáẠá áááºááŒáá¯ááºááŒá¯áá¯ááºááẠáááºáá²áááº)á áá¯á¶ážá áœá²ááá¯ááºááŸá¯ááẠáááºááá·áº API á¡ááœááºáááᯠá¡ááŒáá·áºáá¯á¶ážáŠážá á¬ážáá±áž ááŒá áºááá·áºáááºá áá«áá±ááá·áº á¡á²áá«á Code Generation ááᯠááá·áºáá»ááºáá²á· á¡ááŒááºážá¡áá¯á¶áá áºáá¯áá«áá²á ááá¯ááºáá«áá ááŒááºááœááºáž ááá¯á·ááá¯áẠááŒááºáá¡ááŸááºááá¬ážá áá±áááá¯ááºáᬠááá¯ááºá á¬ážááŒá¯ááŸá¯áá áºáá¯ááᯠáá±ážáá¬ážááẠáááºááŒáá·áº áá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž áá¯á¶ážáá¯á¶ážáá»á¬ážáá»á¬áž ááŒá áºáá±áááºá
áá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážá áá«ááá¯áá¯ááºááá¯á· á¡áá»áááºáááŸááá°ážááá¯á· ááŒá±á¬áááá·áºáááºá áááºážááá¯á·ááẠáááºážááá¯á·á Super Product á¡ááœáẠáá±á¬ááºáá¯á¶ážáááºááŒá áºáááºá áá áºáá±á·áá±á· ááŸá±á¬ááºážááá¯ááºážááŸá¬ ááááá±á¬áááœá±ááᯠááŒá®ážáá±á¬á·áááºááá¯ááẠá¡áá»áááºááááá·áºáááºá áá«áá°ááá¯á·ááá¯ááŒá±áááºá
ááá¯á·áá±á¬áº Hibernate / JPA ááœááºáááºážááẠJava ááœááºáá¯ááºáá±ážáááºá¡ááœááºááœááºáá°áááºá
ááááºáá«á Hibernate ááŸáá·áº áááºážáá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡ááœááºá áááºážááẠá¡áá»áá¯ážáá»á±ážáá°ážááŸáá·áº áá»áááºá á¬áá áºáá¯ááŒá áºáááºá Hibernate ááœááºá áááºááẠá€áá²á·ááá¯á·áá±á¬ á¡áá¬ááŸá áºáá¯ááᯠááá¯ážááá¯ážááŸááºážááŸááºážáá±ážááá¯ááºáááº-
@Entity
class Book {
@Id
int id;
String title;
}
á¡á¬ážáá¯á¶ážáá®ážáá«ážá¡áááºááá·áºááŒá áºáá±áá«ááŒá®á ááᯠHibernate á¡áá»á¬ážá¡ááŒá¬ážááẠáááºá SQL á "áá±áááá áá¬áž" á DDL ááœáẠá€á¡áá¬á¡á¬áž á¡ááá¡áá»áááºááŸááºáá¬ážááá·áº ááŸá¯ááºááœá±ážáá±á¬á¡áá±ážá áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá¯ááºáááºááŒá áºáááº-
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 ááẠá€áá®ážááᯠIdentity Specification ááœáẠá¡áá±á¬ááºá¡áá¬ážáá±á¬á·á¡ááŒá ẠááŒá¯áá¯ááºáááºáá¬ážá
áááŒá áºááá¯ááºáá°ážá á¡áááºá áááºááẠááá·áºááá±á¬áá»ááºááᯠá¡á ááŸá¡áá¯á¶áž áááºáá®ážáá±áá«áá ááá¯á¡ááºáá±á¬ ááŸááºáá»ááºáá»á¬ážááᯠááá·áºááœááºážááŒá®ážáááºááŸáá·áº áá±áá¬áá±á·á áºá¡áá±á¬ááºážááᯠá áœáá·áºáá áºááŒá®áž á¡áá áºáá áºáá¯ááᯠáááºáá®ážááẠá¡ááŒá²áááºáž á¡áááºááŒá±áá«áááºá ááá¯á·ááŒá±á¬áá·áºá á á¬á¡á¯ááºá¡ááœá²á·á¡á ááºážááẠáá±á¬ááºáá¯á¶ážááœáẠáá¯á¶á á¶ááᯠáá°áááá·áºáááº-
@Entity
@Table(name = "book", indexes = {
@Index(name = "i_book_title", columnList = "title")
})
class Book {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
String title;
}
á¡á±ážáááºá ááŒááºáá¯ááºáá«á ááááºá€ááá á¹á ááœááºá á¡á ááá¯ááºážááœááºá¡ááœááºááœááºáá°áááá·áºáááºá
áá«áá±ááá·áº áá±á¬ááºá០áá±ážáá»á±ááááá·áºáááºá
áááŒá¬áá® ááá¯á·ááá¯áẠáá±á¬ááºááá¯ááºážááœáẠáááºááẠáá¯ááºáá¯ááºáá±ážááá¯á· áá±á¬ááºááœá¬ážááááá·áºáááºá ááá¯á¡áá»áááºááœáẠáá±á¬áºááẠá¡áá¯ááºááá¯ááºáá±á¬á·áá«á áá¬ááŒá áºááá¯á·áá²ááá¯áá±á¬á·:
áá¯ááºáá¯ááºááŸá¯ááœááºá ááá¯á¡ááºáá«áá áá±áá¬áá±á·á áºá¡áá±á¬ááºážááᯠá áœáá·áºáá áºááŒá®áž á¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡á ááŸá áááºááẠáááŒá áºááá¯ááºáá±á¬á·áá«á ááá·áºáá±áá¬áá±á·á áºááẠá¡ááœá±á¡ááŸá áºáá áºáá¯á¡ááŒá ẠááŒá±á¬ááºážáá²ááœá¬ážáááºááŒá áºáááºá
ááá¯ááŸá
á áá¬áá áá±ážááááºááŒá
áºáá«áááºá
ááá¯á·ááŒá±á¬áá·áº áááºááẠáá¯ááºáá¯ááºáá±ážááá¯á· ááŒá±á¬ááºážááœáŸá±á·áááºááŸáá·áº áááŒáá¯ááºáááºá áááºááẠáá°ááŒááºážáá±á¬ ááŒááºáááºááŸá¯áá»á¬áž ááá¯á¡ááºáááºááŒá áºáááºá ááŒá®ážáá±á¬á· áá°ááá¯á·á áá¯ááºáá¯ááºááŸá¯ááᯠá¡áááºážááŒááºááá¯á· ááá¯áááºá áá¯ááºáá¯ááºááŸá¯á¡ááœáẠááŒá±á¬ááºážááœáŸá±á·ááŸá¯áá»á¬ážááᯠáá»á±á¬ááœá±á·á áœá¬ ááá¯ááºááá¯ááºážááŒááºáááºááŒá®áž á áá áºááá» áááŒááºáááºááá±ážáá±á¬ááŒá±á¬áá·áºá áááºááẠááá¯ááºážá áá¯ááºážá áœá¬ áá¬áá±ážáá±áá«áááºá ááŒá®ážáá±á¬á· á¡áá¬á¡á¬ážáá¯á¶ážááᯠááŸááºá¡á±á¬ááºáá¯ááºááá¯á· á¡áá»áááºáááŸááá°ážá áááºážá Hibernate ááᯠááŒáááºáááºáá»á¬ážá áœá¬ ááŒáááºážáá±á¬ááºážááẠá áá«á á¡ááŒá²áááºáž áááºáá°á·á¡ááŒá áºáá² á áá«áá±ááá·áº áááºážááá¯ááºáá°áž...
áááºážá¡á á¬áž á¡á ááááºážá á¡áá¬áá¬ááá¯ááºážááᯠáá¯á¶ážáááœá²ááŒá¬ážá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáá²á·áááºá á¥ááá¬á¡á¬ážááŒáá·áºá á ááºáá®ážáá±á«áºááœáẠáá®ážá¡ááá¯ááºážááᯠáááºáá«á
áá±áá¬áá±á·á áºááᯠá¡áááºáá¯ááºáá«á
áááºááá±áá¬áá±á·á
áºá
áá±ážá
áá
áºááŸá á
á
áºááŸááºáá±á¬ "á¡ááŸááºááá¬áž" ááŸáá·áº áááºážá¡áá±á«áº "á¡áá»á¯ááºá¡ááŒá¬á¡á¬áá¬" ááẠáá±áá¬áá±á·á
áºá¡ááœááºážá áááºááŸááááºá schema ááẠáá±áá¬áá±á·á
áºááá¯ááºááá¯ááºáá¬áá á¡ááŒá¬ážáá±áá¬áá»á¬ážááœááºáᬠá¡áááá¹áá«ááºááœáá·áºááá¯áá¬ážááŒá®áž áá±á¬ááºáááºáá
áºáŠážá
á®ááœáẠá€á¡á
á®á¡á
ááºááááá¹áá°áá«ááŸááááºá ááá¯á·ááŒá±á¬áá·áº schema ááŸáá·áº áááºážáááá¬ááááᯠááá¯ááºáá¬áá»áá·áºáá¯á¶ážááẠááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ á¡áááá¹áá¬ááºááŸáááŒá®áž áá±áá¬áá±á·á
áºááœáẠáááºážááá¯ááŸááºáááºá
áœá¬áá¯ááºáá±á¬ááºááẠ- áá±áá¬ááœááºá á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážáá¬ážáááºá
áá«á áá±á¬ááºááœááºážáá¶áááá·áº áá¬ááºááá¬ááẠáá±á¬ááºážáá±ááŒá®á á¡áááááŸáá·áº áá°ážááŒá¬ážáá±á¬áá±á¬á·áá»á¬ážááẠáá±á¬ááºážááœááºáá«áááºá ááá¯ááºáá¶ááŒá¬ážáá±á¬á·ááœá±á áá±á¬ááºážáááºá ááá·áºáááºá
á
áºáá±ážááŒááºážááẠáá±á¬ááºážáá«áááºá
áá«ááœá±á¡á¬ážáá¯á¶ážáá±á¬á· ááá¯ááºáá«áá°ážá á¥ááá¬á¡á¬ážááŒáá·áºá Oracle ááá¯á¡áá¯á¶ážááŒá¯á áááºáááºááŸááºááá¯áááºááŸá¬-
- áááºážáá²á·á á¬ážááœá²á áááºá á¬ážááœá²áá±áá¬áá²á
- áá°áá PCTFREE áááºááá¯ážááá¬áá²
- ááá·áºá¡á á®á¡á á¥áºááŸá áááºááŸáºá¡ááœááºá¡á á¬áž áááºáá»áŸááŸáááẠ(id áá±á¬ááºááœááºááœááº)
á€á¡áá¬á¡á¬ážáá¯á¶ážááẠá¡áá±ážá á¬ážá áá áºáá»á¬ážááœáẠá¡áá±ážáááŒá®ážáá«á ááá¯á·áá±á¬áº "áá±áá¬ááŒá®áž" áááºáááºááá¯á· áá°ážááŒá±á¬ááºážáá»áááºá¡áá á á±á¬áá·áºááẠáááá¯á¡ááºáá« - á¡áááºááœááºáá±á¬áºááŒáá²á·áá±á¬ áá±á¬ááºážáá»áá°á០áá¶á·ááá¯ážáá±ážáá¬ážáá±á¬ ááá¯ááŸá±á¬ááºááŸá¯ ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬áẠáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá០á áááºá á¡áá»áá¯ážáá¶á á¬ážááá¯ááºáááºááŒá áºáááºá áá»áœááºá¯ááºááŒááºáá°ážáá±á¬ ORMs áá áºáá¯á០(jOOQ á¡áá«á¡áááº) ááẠááá·áºáá±áá¬áá±á·á áºááœáẠáááºá¡áá¯á¶ážááŒá¯ááá¯ááá·áº DDL ááœá±ážáá»ááºááŸá¯á¡á á¯á¶á¡áááºááá¯á· áááºáá±á¬ááºááœáá·áºááá±ážáá«á ORM áá»á¬ážááẠDDL áá±ážáá¬ážáá¬ááœáẠáá°áá®ááẠáááááá¬á¡áá»áá¯á·ááᯠáá±ážáá±á¬ááºáááºá
áá«áá±ááá·áº áá±á¬ááºáá¯á¶ážááŸá¬áá±á¬á· DDL ááŸá¬ áááºáá²á·áá±ážáá¬ážáá²á· áá±á¬ááºážáá±á¬ááºážáá®ááá¯ááºážáá±ážááœá²áá¬ážáá²á· schema áá áºáá¯ááŒá áºáá«áááºá áá¯ááºáá±ážááá·áº DDL ááẠáááºážá á¡áá®ážá ááºáá¯á¶ážáá áºáá¯áá¬ááŒá áºáááºá
áá±á¬ááºááẠáá±á¬áºáááºáá±á¬ áááºááá¯áá²á
á¡áááºááœááºáá±á¬áºááŒáá²á·ááá·áºá¡ááá¯ááºážá client ááœáẠááá·áºáá±áá¬áá±á·á áºáá¯á¶á á¶á áááá¹áá°á áááá¯ááºážááá·áºá¡ááŒááºááᯠááá¯á¡ááºáááºááŒá áºáááºá ááŒá±á¬á áá¬áááá¯áá«á á€áááá¯ááºážááá·áºá¡ááŒááºááẠáááá·áºáá±á¬áºáááºááŸáá·áº áááºáá°áá»áá±ááá«áááºá áá«ááá¯á¡á±á¬ááºááŒááºááá¯á· á¡áá±á¬ááºážáá¯á¶ážáááºážáááºážááá¬áá²á áá¯ááºáá®ážá ááºáá áºáá¯ááŸáá·áºá
áá±áá¬áá±á·á áºá¡á¬ážáá¯á¶ážááẠSQL ááŸáááá·áº áááºážááá¯á·á meta-á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážáá±á¬ááºáááºá á€áááºááŸá¬ ááá·áºáá±áá¬áá±á·á áºá០ááá°áá®áá±á¬ 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()
ááá¯ááá¯á·áá±á¬áá±ážááœááºážáá»á¬ážáááááºáá»á¬ážááŸá áááºááẠclient ááœááºáááºááá·áºáááºážááá¬ááá¯áááá¯áááºá¡áá¯á¶ážááŒá¯áá±áá«á á±á áááºááá±áá¬áá±á·á áºáá±á¬áºáááºá client-side ááá¯ááºá á¬ážááŒá¯ááŸá¯ááá¯áá¯ááºáá¯ááºáááºá¡áá±á¬áºáá±ážááœááºáá°áááºá
- á¡áááºá áááºááẠJDBC ááá¯á·ááá¯áẠSpring ááá¯á¡áá¯á¶ážááŒá¯áá±áá«á áááºááẠstring constants á¡á á¯á¶ááᯠáááºáá®ážááá¯ááºáááºá
- á¡áááºá áááºááẠJPA ááá¯á¡áá¯á¶ážááŒá¯áá±áá«áá á¡ááœá²á·á¡á ááºážáá»á¬ážááá¯ááºááá¯ááºáááºáá®ážááá¯ááºáááºá
- á¡áááºá áááºááẠjOOQ ááá¯á¡áá¯á¶ážááŒá¯áá±áá«á áááºááẠjOOQ meta model ááá¯áá¯ááºáá¯ááºááá¯ááºáááºá
ááá·áºáá±á¬ááºááẠAPI áá±ážá
áœááºážááá¯ááºááŸá¯ áááºáá»áŸááŸááááºá¡áá±á«áºáá°áááºá (á¥ááᬠjOOQ ááá¯á·ááá¯áẠJPA)á áá¯ááºáá¯ááºáá¬ážáá±á¬ meta áá±á¬áºáááºááẠá¡ááŸááºáááẠááŒáœááºáááŒá®áž ááŒáá·áºá
á¯á¶ááá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááœááºááá¯ááºáá«áááºááŸá¯ ááŒá
áºááá¯ááºááŒá±ááᯠáá°áá«á
ááá¯á¡áá« áááºááá·áºáá±áá¬áá±á·á Ạááá¯ážáá¬ááŸá¯ááẠáá¯á¶ážá áœá²áá°áá¯ááºááᯠá¡ááá¯á¡áá»á±á¬áẠá¡ááºááááºáá¯ááºáááºááŒá áºáááºá á¥ááᬠá áááºáá°ážááŒáá·áºáá«-
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 ááŒá±á¬ááºážáá²ááŸá¯á¡áá»á¬ážá á¯ááẠsyntax áá»áŸáá¬ááá¯ááºá ááá¯á·ááŒá±á¬áá·áºá áááºááá±áá¬áá±á·á áºááá¯ááá¯ážááŒáŸáá·áºááŒááºážááŒáá·áºáááºááá·áºáá¯ááºááá¯áááºááá·áºáá¯ááºá¡áá»áá¯ážáááºáá±á¬ááºááẠ(ááá¯á·ááá¯ááº) á á¯á ááºážáá¬ážáá±á¬áá¯ááºááœááºááŒáá·áºááŸá¯áááºá¡áááºááŒá±ááá¯ááºáááºá
áá áºáá¯áááºážáá±á¬á¡ááŸááºááá¬áž
áááºááá·áºáááºážááá¬ááá¯á¡áá¯á¶ážááŒá¯áááºááŒá
áºá
á± á¡áá»áá¯á·áá±á¬á
áá
áºááœá²áá»á¬ážá¡ááœááºáá
áºáá¯áááºážáá±á¬á¡ááŸááºááá¬ážá¡áááºážá¡ááŒá
áºááŒá
áºáá±á¬áá±á¬áºáááºáá
áºáá¯á¡ááŒá²ááŸááá«áááº- ááá¯á·ááá¯ááºá¡áááºážáá¯á¶ážáá»áœááºá¯ááºááá¯á·áááºá€á¡ááœááºááŒáá¯ážá
á¬ážááŒá®áž "á¡ááŸááºááá¬áž" áááºáá±áá¬ááá¯ááºážááœááºáááŸáááá·áºáá±áá¬ááá¯ááºážááœááºáá
áºáá»áááºáááºážááŸááá±áá±á¬áá¯ááºáááºážááá¯ááºáá¬ááŸá¯ááºááœá±ážááŸá¯áá»á¬ážááá¯ááŸá±á¬ááºááŸá¬ážááá·áºáááºá á¡áá¬á¡á¬ážáá¯á¶ážá á¡áá»á¬ážááŒá®áž ááá¯ááœááºááœá¬ážááá¯ááºáá«áááºá á¡áááºá áááºááẠXML ááá¯ááºáá»á¬ážááᯠá¡ááŒá¬ážá
áá
áºá¡áá»áá¯á·ááŸáá·áº áááŸááºáá±áá«á XSD ááᯠá¡áá¯á¶ážááŒá¯áá«á XML áá±á¬ááºááœáẠjOOQ á INFORMATION_SCHEMA meta-model ááá¯ááŒáá·áºáá«-
- XSD ááᯠáá±á¬ááºážáá±á¬ááºážáá¬ážáááºáá«áááºá
- XSD ááẠXML á¡ááŒá±á¬ááºážá¡áá¬ááᯠáá±á¬ááºážááœááºá áœá¬ á¡ááŸááºá¡áá¬ážááŒá¯ááŒá®áž áá¯á¶ážá áœá²áá°áá¬áá¬á áá¬ážá¡á¬ážáá¯á¶ážááœáẠááá¬ážáááºááŸá¯ááᯠááœáá·áºááŒá¯áááºá
- XSD ááẠáá±á¬ááºážááœááºáá±á¬áá¬ážááŸááºážááŒá áºááŒá®áž á¡ááœááºá¡áá±á¬ááºááá¯á·ááá¯ááºáááºáááºá
- XSD ááᯠXJC áá¯á¶ážááŒá®áž Java áá¯ááºááá¯á· áá¬áá¬ááŒááºááá¯ááºáááºá
áá±á¬ááºáá¯á¶ážá¡áá»ááºá á¡áá±ážááŒá®ážáááºá XML áááºáá±á·áá»áºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŒááºáá áá áºáá áºáá¯ááŸáá·áº áááºááœááºááá·áºá¡áá«á áá»áœááºá¯ááºááá¯á·á áááºáá±á·áá»áºáá»á¬ážááẠááá¬ážáááºááŒá±á¬ááºáž áá±áá»á¬á á±ááá¯áá«áááºá áááºážááẠJAXBá XJC ááŸáá·áº XSD ááá¯á·ááŒáá·áº á¡á±á¬ááºááŒááºááẠá¡ááœááºááœááºáá°áááºá áá»áœááºá¯ááºááá¯á·ááááºáá±á·áá»áºáá»á¬ážááᯠJava á¡áá¬ááá¹áá¯áá»á¬ážá¡ááŒá Ạáá»áœááºá¯ááºááá¯á·ááŒá¯áá¯ááºááá·áº Java ááááá®ááá¯ááºážáá»ááºážáááºááŸá¯ááœáẠáááºážááá¯á·ááᯠXML ááá¯á· áá¬ááºáááºáá¬ááºááœá±ážááŒáá·áº áá áºáááºážáááºážááŒáá·áº ááŒááºááá¯ááá¯ááºááŒá®áž á¡ááŒá¬ážá áá áºáá áºáá¯ááá¯á· á á¬ážáá¯á¶ážááẠáá±ážááá¯á·ááá¯ááºáááºáᯠááœá±ážáá±á¬áááááºááŸá¬ áá°ážááœááºá áá¬áááºá á€áááºážááŒáá·áº áá¯ááºáá±ážáá±á¬ XML ááẠá¡ááœááºá¡áááºá¡ááœá±ážáá¶á·áá»ááºážááŒá®ážá á¡áá±á¬ááºá¡áá¬ážáá²á·á ááœá¶á·ááŒáá¯ážááá¯ážáááºááẠáááºáá²áááºááŒá áºáááºá ááá¯ááá¯á·áá±á¬á¡ááºáá¬áá±á·á áºáá áºáá¯áá±á«áºááœáẠáááºáá±á¬ááºááŸá¯á¡áááºá¡ááœá±áž (SLA) á¡ááá·áºááá¯ááºáᬠááá±á¬áá°áá®áá»ááºáá áºáá¯áááŸááá«áá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯áá»ááºáá»ááºážááŒá±ááŸááºážáá«áááºá
ááá¯ážááá¯ážáá¬ážáá¬áž ááŒá±á¬áááẠáá«á JSON API áá²á· áá áºáá»áááºáá¯á¶áž ááŒá áºáá»ááºáá±áá±ááá·áº á¡á²áá«á áááŒá¬ážáá¬ááºáááºážáá áºáá¯áá«á áá±á¬ááºáá áºáá« ááŒááºážáá¯ááºáááº...
áá±áá¬áá±á·á áº- áááºážááá¯á·ááẠáá°áá®áááºá
áá±áá¬áá±á·á áºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááŒááºážááŒáá·áº áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠá¡ááŒá±áá¶á¡á¬ážááŒáá·áº áá°áá®ááŒá±á¬ááºáž áááºáá¬ážáááºáá«áááºá áá±áá¬áá±á·á áºááẠáááºážááá±áá¬ááᯠááá¯ááºááá¯ááºááŒá®áž schema ááᯠá á®áá¶ááá·áºááœá²ááááºááŒá áºáááºá á¡ááŸááºááá¬ážá á¡áááºážá¡ááŒá áºáá áºáá¯áááºážááᯠá¡ááºááááºáá¯ááºááá¯ááºááẠschema á¡ááœáẠááŒá¯ááŒááºááœááºážáá¶ááŸá¯ááá¯ááºážááᯠDDL ááœáẠááá¯ááºááá¯ááºá¡áá±á¬ááºá¡áááºáá±á¬áºááá«áááºá
á¡áááºážá¡ááŒá áºá¡ááºááááºááŒá áºáá±á¬á¡áá«á áá¯á¶ážá áœá²áá°áá»á¬ážá¡á¬ážáá¯á¶ážááẠáááºážááá¯á·ááá±á¬áºáááºááááá¹áá°áá»á¬ážááᯠá¡ááºááááºáá¯ááºááááºááŒá áºáááºá á¡áá»áá¯á·áá±á¬ client áá»á¬ážááẠjOOQ ááŸáá·áº Hibernate ááá¯á·ááá¯áẠJDBC (ááá¯á·ááá¯áẠááŸá áºáá¯áá¯á¶áž) ááᯠá¡áá¯á¶ážááŒá¯á Java ááœáẠáá±ážáá¬ážááá¯ááºáá«áááºá á¡ááŒá¬ážáá±á¬ááºáááºáá»á¬ážá¡á¬áž Perl ááŒáá·áºáá±ážáá¬ážááá¯ááºááẠ(áá°ááá¯á·á¡á¬áž áá¶áá±á¬ááºážáá«á á±)á á¡ááŒá¬ážáá°áá»á¬ážááᯠC# ááŒáá·áºáá±ážáá¬ážááá¯ááºáá«áááºá á¡áá±ážáááŒá®ážáá°ážá áááºááá±á¬áºáááºááẠdatabase ááœááºááŒá áºáááºá ORM áá¯ááºáá¯ááºáá±á¬ áá±á¬áºáááºáá»á¬ážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº á¡áááºá¡ááœá±ážáá¶á·áá»ááºážááŒá®ážá ááŸááºáááºážááŸááºáᬠáá¶á·áá»ááºážááŒá®áž ááœá¶á·ááŒáá¯ážááá¯ážáááºááẠáááºáá²áááºá
áá«ááŒá±á¬áá·áº á¡ááŸá¬ážááá¯ááºáááá«á á±áá²á·á á¡á ááááºážá á¡ááŸá¬ážááœá± ááá¯ááºáááá«á á±áá²á·á áá±áá¬áá±á·á áºááŸá¡áá¯ááºáá¯ááºáá«á á¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááá¯ááºáá±á¬ ááŒáá·áºáá»ááºááá¯ááºááá¯ááºážáá áºáá¯ááᯠáááºáá±á¬ááºáá«á ááá·áºáá±áá¬áá±á·á áºáá±á¬áºáááºááᯠá¡áááºááŒá±á áœá¬ áá°ážáá°áᬠáá¯á¶ážá áœá²áá°áá»á¬ážáá±á«áºááœáẠá áœáá·áºáá áºááẠáá¯ááºáá¯ááºáá±ážááá·áº á ááºáá»á¬ážááᯠááœáá·áºáá«á Code Generator áá»á¬ážááŸáá·áºáááºáááºá á áááºáá°ááŒááºážáá»á¬ážááᯠáááºááá·áºááá¯ááºáá«á áá°ááá¯á·áá±á¬ááºážáá«áááºá áááºážááá¯á·ááŸáá·áºá¡áá° áááºááẠááá¯ááá¯ááŒá áºááœááºážáá¬áááºááŒá áºáááºá áááºáá¯ááºáááºááá¯á¡ááºáááºááŸá¬ áááºážááá¯á·ááᯠá¡á ááŸá á á¡áá»áááºá¡áááºážáááºáá±ážááŒá®áž ááá·áºááá±á¬áá»ááºááá¬ááºáááºážááá¯áááºáá±á¬ááºááẠááŸá áºáá±á«ááºážáá»á¬ážá áœá¬ ááá¯ááá¯áá±á¬ááºážááœááºáá±á¬á áœááºážáá±á¬ááºáááºááᯠáááŸááááºááŒá áºáááºá
áá«á·ááᯠáá»á±ážáá°ážááááºáá«áá²á·ááœá¬á
ááŒááºáááºááá·áºá á±ááŒááºáž
ááŸááºážááŸááºážáááºážáááºážááŒá±á¬ááá»áŸááº- á€áá±á¬ááºážáá«ážááẠááá·áºáá±áá¬áá±á·á áºáá±á¬áºáááºááŸáá·áº ááá¯ááºáá®ááẠá áá áºáá áºáá¯áá¯á¶áž (á¥ááá¬á ááá¯ááááºážá á á®ážááœá¬ážáá±ážáá¯áá¹ááá áááºááŒáá·áº á áááº) ááᯠáááºááá·áºáááºážááŒáá·áºáá»áŸ ááœááºážá¡á¬ážáá±ážááŒááºážáááŒá¯áá«á áá®áá±á¬ááºážáá«ážááŸá¬ áá»áœááºáá±á¬áºááŒá±á¬áá±áá¬á áá±áá¬áá±á·á áºáá áºáá¯áá²á· á¡ááŒááºá¡ááŸááºáááºááœááºáá²á· client áá¯ááºá "ááááááºážá á¬áž" á¡ááŒá±á¡áá±ááŸá¬ áá±áá¬áá±á·á áºáá±á¬áºáááºááᯠááŒááºáááœá¬ážááá¯ááºá¡á±á¬áẠáá±áá¬áá±á·á áºáá±á¬áºáááºááᯠá¡ááŒá±áá¶ááŒá®áž áá¯ááºáá±á¬ááºááá·áºáá«áááºá ááá¯ááá¯á·áá±á¬áá¯áá¹áááá±áááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá·áºáá±á¬ááºáááºááŸá áá±áá¬áááºáá±á¬ááºááœáá·áºá¡ááœáŸá¬ááœáẠáááºááŸááááºá
á¡áá»áá¯á·áá±áá¬áá»á¬ážááœáẠááááºážááááºážáá¬ážáá²ááŒá áºáá±á¬ á¡ááá·áºááŸá áºááá·áºááŸááá±á¬ áááá¯áá¬áááºáá¬áá»á¬ážááœááºá ááá¯ááá¯á·áá±á¬ á áá áºáá¯á¶á á¶ááẠááŒá áºááá¯ááºáá»á±áá áºáá¯áᬠááŒá áºááá¯ááºáááºá ááá¯á·áá±á¬áºá á áá áºá¡áá»á¬ážá á¯ááœááºá áá±áá¬áááºáá±á¬ááºááœáá·áºá¡ááœáŸá¬ááẠáá±áá¬áá±á·á áºáá±á¬áºáááºááᯠáá¯á¶ážá¡á¯ááºáá¬ážááá·áº "subsystem" áá áºáá¯áᯠáááºááááºá
ááŒáœááºážáá»ááº
á ááºážáá»ááºážááá¯ááºážá¡ááœáẠááŒáœááºážáá»ááºááŸááá«áááºá áá±áá¬áá±á·á áºáááááá¯ááºážáá²á· á¡áááºážá¡ááŒá áºáá¯ááºáá¯ááºáá¯ááºáá±ážáá»ááºážáááºááŸá¯áᬠáá áºáá«áá áºáá¶ááŸá¬ áááá·áºáá»á±á¬áºáá°ážááá¯á· á¡áááºáááŒá±á¬áá²á·áá°ážáá«áááºá á€áááºááŸá¬ á€áá²á·ááá¯á·áá±á¬ááŒáœááºážáá»ááºá¡áá»áá¯á· (á¡ááŒá¬ážááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáááº)á
- áááºá¡áá»áááºááŸá¬ schema ááá¯áááááá² ááœáá·áºáá¬ážááá¯á·ááá¯áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážá¡á¬áž áááºááá·áºáá¯á¶áá»ááºážááá¯áááᯠáááºážááŒá±á¬ááºážááŸá¬áá¬ááœáẠáá°áá®ááẠáááááá¬áá áºáᯠáá¶á·ááá¯ážáá±ážáá«áááºá ááŸá°ážá á€áá±áá¬ááœáẠáá¯ááºáá»áá¯ážáááºáááŸááá«á ááá¯á·áá±á¬áº - áá±áá¬áá±á·á áºááááŠážá áœá¬á¡á¬ážáá¯á¶ážááá±áá²ááŒá áºáááºá
- ááŒá¿áá¬á¡áá»áá¯á·ááá¯ááŒá±ááŸááºážááẠáááºáááºážáá
áºáá¯á¡á¬áž áá»á¶áááºážááẠááá¯á¡ááºááá·áºá¡áá«á á€á¥ááá¬ááẠáá¯á¶á
á¶á á¡áááºážááẠááá¯ááºáá²áá±á¬ áá¬ážááŸááºážááŒá
áºáá¯á¶ááááºá
entity attribute áááºááá¯áž ááá¯ááá¯áááºááŸá¬á ááá·áºááœáẠáá±á¬ááºážá áœá¬áááºááŸááºáá¬ážáá±á¬ schema áááŸááá«á á€á¡ááŒá±á¡áá±áá»áá¯ážááœááºá RDBMS ááẠááá·áºá¡ááœáẠááá¯ááºáá®áááºááᯠáááŒá¬ááááẠááá±áá»á¬ááá¯ááºáá«á
ááŒáœááºážáá»ááºáá»á¬ážááẠááá¬áá¡á¬ážááŒáá·áº ááŒáœááºážáá»ááºááŒá
áºáááºá RDBMS ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŸáá·áºáááºáááºááá·áºááá
á¹á
á¡áá»á¬ážá
á¯ááœááºá schema ááá¯ááŒáá¯áááºááááŸááá¬ážááŒá®ážá áááºážááẠRDBMS á¡ááœááºážááœááºááŸáááŒá®áž "á¡ááŸááºááá¬áž" ááá
áºáá¯áááºážáá±á¬á¡áááºážá¡ááŒá
áºááŒá
áºááŒá®áž client áá»á¬ážá¡á¬ážáá¯á¶ážáááºážááŸáááŸááá±á¬áááá¹áá°áá»á¬ážááá¯ááá°ááááºááŒá
áºáááºá á¡áá±á¬ááºážáá¯á¶ážááá±á¬á·á áááºážááœáẠcode generator áá«áááºááá·áºáááºá
source: www.habr.com