Qhov tseeb ua ntej, los yog vim li cas lub system yuav tsum tau tsim raws li cov qauv database

Hlo Habr!

Peb txuas ntxiv mus tshawb txog lub ntsiab lus Java ΠΈ Caij nplooj ntoos hlavsuav nrog hauv qib database. Niaj hnub no peb muab los nyeem txog vim li cas, thaum tsim cov ntawv loj loj, nws yog cov qauv database, thiab tsis yog Java code, uas yuav tsum yog qhov tseem ceeb, qhov no ua li cas, thiab dab tsi yog qhov zam rau txoj cai no.

Hauv tsab xov xwm no, kuv yuav piav qhia vim li cas kuv xav tias yuav luag txhua qhov xwm txheej, cov qauv ntaub ntawv hauv daim ntawv thov yuav tsum tau tsim "los ntawm cov ntaub ntawv" es tsis yog "los ntawm lub peev xwm ntawm Java" (lossis txawm tus neeg siv hom lus koj nyob nraum). ua haujlwm nrog). Los ntawm kev xaiv qhov thib ob mus kom ze, koj nkag mus rau txoj kev ntev ntawm kev mob thiab kev txom nyem thaum koj qhov project pib loj hlob.

Kab lus tau sau raws li ib lo lus nug, muab rau Stack Overflow.

Cov kev sib tham txaus siab ntawm reddit hauv ntu /r/java ΠΈ /r/programming.

Code tiam

Kuv xav tsis thoob li cas tias muaj cov txheej txheem me me ntawm cov neeg siv uas, tau paub txog jOOQ, tsis txaus siab qhov tseeb tias jOOQ tiag tiag tso siab rau cov cim tsim los khiav. Tsis muaj leej twg txwv koj los ntawm kev siv jOOQ txoj hauv kev uas koj pom zoo, thiab tsis muaj leej twg yuam koj siv cov cim cim. Tab sis los ntawm lub neej ntawd (raws li tau piav qhia hauv phau ntawv qhia), jOOQ ua haujlwm zoo li no: koj pib nrog (legacy) database schema, thim rov qab engineer nws nrog jOOQ code generator kom tau txais cov chav kawm uas sawv cev rau koj cov ntxhuav, thiab tom qab ntawd sau hom- kev nyab xeeb queries tiv thaiv cov rooj:

	for (Record2<String, String> record : DSL.using(configuration)
//   ^^^^^^^^^^^^^^^^^^^^^^^ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° Π½Π° 
//   основании сгСнСрированного ΠΊΠΎΠ΄Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅
// Π½ΠΈΠΆΠ΅ условиС SELECT 
 
       .select(ACTOR.FIRST_NAME, ACTOR.LAST_NAME)
//           vvvvv ^^^^^^^^^^^^  ^^^^^^^^^^^^^^^ сгСнСрированныС ΠΈΠΌΠ΅Π½Π°
       .from(ACTOR)
       .orderBy(1, 2)) {
    // ...
}

Cov cai yog generated los ntawm manually sab nraum lub build, los yog manually ntawm txhua tus tsim. Piv txwv li, xws li kev rov tsim dua tshiab tuaj yeem ua raws tam sim tom qab Flyway database migration, uas tuaj yeem ua tau manually lossis txiav.

Source code tiam

Muaj ntau yam kev xav, qhov zoo thiab qhov tsis zoo cuam tshuam nrog cov txheej txheem no rau kev tsim cov lej - phau ntawv thiab tsis siv neeg - uas kuv yuav tsis tham txog qhov nthuav dav hauv tsab xov xwm no. Tab sis, feem ntau, tag nrho cov ntsiab lus ntawm cov cai tsim tawm yog tias nws tso cai rau koj rov tsim dua hauv Java "qhov tseeb" uas peb tau lees paub, tsis hais hauv peb lub cev lossis sab nraud ntawm nws. Nyob rau hauv ib qho kev txiav txim siab, compilers uas tsim bytecode, tshuab code, los yog lwm yam code los ntawm qhov chaws code ua tib yam - peb tau txais ib tug sawv cev ntawm peb "qhov tseeb" nyob rau hauv lwm yam lus, tsis hais seb yog vim li cas.

Muaj ntau yam code generators. Piv txwv li, XJC tuaj yeem tsim Java code raws li XSD lossis WSDL cov ntaub ntawv. Lub hauv paus ntsiab lus yeej ib txwm zoo ib yam:

  • Muaj qee qhov tseeb (sab hauv lossis sab nraud) - piv txwv li, qhov tshwj xeeb, cov qauv ntaub ntawv, thiab lwm yam.
  • Peb xav tau ib tus neeg sawv cev hauv zos ntawm qhov tseeb no hauv peb cov lus programming.

Ntxiv mus, nws yuav luag ib txwm pom zoo los tsim kom muaj cov sawv cev zoo li no - txhawm rau kom tsis txhob rov ua dua.

Hom Muab Kev Pabcuam thiab Kev Sau Ntawv Sau

Nco tseg: Lwm qhov, niaj hnub thiab kev qhia tshwj xeeb rau kev tsim cov lej rau jOOQ suav nrog kev siv cov chaw muab kev pabcuam, raws li lawv tau siv hauv F#. Nyob rau hauv cov ntaub ntawv no, lub code yog generated los ntawm lub compiler, tiag tiag nyob rau hauv lub compilation theem. Nyob rau hauv txoj cai, xws li code tsis muaj nyob rau hauv daim ntawv ntawm cov codes. Hauv Java, muaj qhov zoo sib xws, txawm hais tias tsis zoo nkauj, cov cuab yeej - cov no yog cov annotation processors, piv txwv li, Lombok.

Hauv qee qhov kev nkag siab, tib yam tshwm sim ntawm no ib yam li thawj kis, tshwj tsis yog:

  • Koj tsis pom cov cai tsim tawm (tej zaum qhov xwm txheej no tsis zoo li ua rau lwm tus neeg tsis txaus siab?)
  • Koj yuav tsum xyuas kom meej tias hom tuaj yeem muab tau, uas yog, "tseeb" yuav tsum muaj nyob ib txwm muaj. Qhov no yog ib qho yooj yim nyob rau hauv cov ntaub ntawv ntawm Lombok, uas annotates "qhov tseeb". Nws yog qhov nyuaj me ntsis nrog cov qauv database uas nyob ntawm qhov kev sib txuas nyob ib txwm muaj.

Yuav ua li cas yog qhov teeb meem nrog code tiam?

Ntxiv nrog rau cov lus nug tsis yooj yim ntawm yuav ua li cas nws zoo dua los pib cov cim cim - manually lossis txiav, kuv yuav tsum tau hais tias muaj cov neeg ntseeg tias cov cim cim tsis xav tau txhua. Qhov kev ncaj ncees rau qhov kev xav no, uas kuv tuaj hla ntau zaus, yog tias nws nyuaj rau teeb tsa lub kav dej. Yog, nws nyuaj heev. Muaj cov nqi vaj tse ntxiv. Yog tias koj nyuam qhuav pib nrog cov khoom tshwj xeeb (xws li jOOQ, lossis JAXB, lossis Hibernate, thiab lwm yam), nws yuav siv sijhawm los teeb tsa lub chaw ua haujlwm uas koj xav siv sijhawm kawm API nws tus kheej kom tau txais txiaj ntsig ntawm nws. .

Yog tias tus nqi cuam tshuam nrog kev nkag siab cov cuab yeej ntawm lub tshuab hluav taws xob siab dhau, ces, qhov tseeb, API tau ua haujlwm tsis zoo ntawm kev siv lub tshuab hluav taws xob code (thiab yav tom ntej nws hloov tawm tias kev hloov kho hauv nws kuj nyuaj). Kev siv tau yuav tsum yog qhov tseem ceeb tshaj plaws rau ib qho API zoo li no. Tab sis qhov ntawd tsuas yog ib qho kev sib cav tawm tsam code tiam. Tsis tas li ntawd, sau tag nrho los ntawm txhais tes hauv zos sawv cev ntawm qhov tseeb sab hauv lossis sab nraud.

Ntau tus yuav hais tias lawv tsis muaj sijhawm los ua txhua yam no. Lawv nyob rau hnub kawg rau lawv cov khoom Super. Ib hnub tom qab peb yuav comb cov khoom sib dhos, peb yuav muaj sijhawm. Kuv yuav teb lawv:

Qhov tseeb ua ntej, los yog vim li cas lub system yuav tsum tau tsim raws li cov qauv database
Thawj, Alan O'Rourke, Cov Neeg Sawv Cev

Tab sis hauv Hibernate / JPA nws yooj yim heev los sau code "hauv Java".

tiag tiag. Rau Hibernate thiab nws cov neeg siv, qhov no yog ob qho txiaj ntsig thiab kev foom phem. Hauv Hibernate, koj tuaj yeem sau ob peb qhov chaw, zoo li no:

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

Thiab yuav luag txhua yam yog npaj txhij. Tam sim no qhov ntau ntawm Hibernate yog los tsim kom muaj "cov ntsiab lus" ntawm qhov tseeb ntawm qhov chaw no yuav raug txhais li cas hauv DDL ntawm koj "dialect" ntawm 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);

... thiab pib khiav daim ntawv thov. Qhov zoo tshaj plaws kom sawv thiab khiav nrawm thiab sim tawm ntau yam.

Txawm li cas los xij, cia kuv. kuv dag.

  • Puas yog Hibernate yuav tswj hwm lub ntsiab lus ntawm lub npe tseem ceeb no?
  • Puas yuav Hibernate tsim qhov ntsuas ntawm TITLE? Kuv paub tseeb tias peb xav tau.
  • Puas yuav Hibernate ua tus yuam sij no yog tus yuam sij rau tus kheej hauv Kev Qhia Txog Tus Kheej?

Tej zaum tsis yog. Yog tias koj tab tom txhim kho koj qhov project los ntawm kos, nws yog ib qho yooj yim kom muab pov tseg cov ntaub ntawv qub thiab tsim ib qho tshiab sai li sai tau thaum koj ntxiv cov ntsiab lus tsim nyog. Yog li ntawd, lub koom haum Phau Ntawv yuav nws thiaj li coj daim ntawv:

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

Txias. Rov tsim dua. Ib zaug ntxiv, hauv qhov no, nws yuav yooj yim heev thaum pib.

Tab sis koj yuav tau them rau nws tom qab.

Tsis ntev los sis tom qab koj yuav tau mus rau hauv kev tsim khoom. Qhov ntawd yog thaum tus qauv nres ua haujlwm. Vim:

Hauv kev tsim khoom, nws yuav tsis tuaj yeem ua tau, yog tias tsim nyog, muab pov tseg cov ntaub ntawv qub thiab pib txhua yam ntawm kos. Koj cov ntaub ntawv yuav dhau los ua ib qho qub txeeg qub teg.

Txij no mus thiab mus ib txhis koj yuav tau sau DDL migration scripts, xws li siv Flyway. Thiab yuav ua li cas rau koj cov koom haum hauv qhov xwm txheej no? Koj tuaj yeem tsim kho lawv tus kheej (thiab muab ob npaug rau koj cov haujlwm ua haujlwm) lossis muaj Hibernate rov tsim dua tshiab rau koj (yuav ua li cas yuav yog tus tsim txoj hauv kev no kom tau raws li koj qhov kev cia siab?) Koj poob ob txoj kev.

Yog li, sai li sai tau thaum koj tsiv mus rau hauv kev tsim khoom, koj yuav xav tau cov khoom kub. Thiab lawv yuav tsum tau coj mus rau kev tsim khoom sai heev. Txij li thaum koj tsis tau npaj thiab txhim kho cov kav dej ntawm koj txoj kev tsiv teb tsaws chaw rau kev tsim khoom, koj nyob nraum patching wildly. Thiab tom qab ntawd koj tsis muaj sijhawm los ua txhua yam zoo. Thiab koj cem Hibernate, vim nws ib txwm ua txhaum, tab sis tsis yog koj ...

Hloov chaw, txij thaum pib, txhua yam tuaj yeem ua tiav txawv kiag li. Piv txwv li, muab lub log puag ncig ntawm lub tsheb kauj vab.

Database ua ntej

Qhov tseeb "qhov tseeb" nyob rau hauv koj database schema thiab "sovereignty" tshaj nws nyob rau hauv lub database. Lub schema txhais tau hais tias tsuas yog nyob rau hauv cov ntaub ntawv nws tus kheej thiab tsis nyob qhov twg, thiab txhua tus ntawm cov neeg siv khoom muaj ib daim qauv ntawm cov qauv no, yog li nws ua rau muaj kev nkag siab zoo los tswj kev ua raws li schema thiab nws txoj kev ncaj ncees, ua nws txoj cai hauv database - qhov twg cov ntaub ntawv raug khaws cia.
Qhov no yog qub txawm hackneyed txawj ntse. Cov yuam sij tseem ceeb thiab tshwj xeeb yog qhov zoo. Cov yuam sij txawv teb chaws zoo. Kev ntsuam xyuas kev txwv yog qhov zoo. Kev lees paub - Zoo.

Thiab, tsis yog tag nrho. Piv txwv li, siv Oracle, tej zaum koj yuav xav qhia meej:

  • Lub rooj zaum twg yog koj lub rooj nyob hauv
  • Nws tus nqi PCTFRE yog dab tsi
  • Dab tsi yog qhov cache loj hauv koj cov kab ke (tom qab tus ID)

Tag nrho cov no yuav tsis muaj teeb meem hauv cov tshuab me me, tab sis nws tsis tas yuav tos kom txog thaum hloov mus rau thaj tsam ntawm "cov ntaub ntawv loj" - koj tuaj yeem pib tau txais txiaj ntsig los ntawm cov neeg muag khoom muab kev cia zoo, xws li cov tau hais los saum no, ntau dhau los. Tsis muaj ORMs kuv tau pom (xws li jOOQ) muab kev nkag mus rau tag nrho cov txheej txheem DDL uas koj xav siv hauv koj cov ntaub ntawv. ORMs muab qee cov cuab yeej los pab koj sau DDL.

Tab sis thaum kawg ntawm lub hnub, ib tug zoo-tsim schema yog txhais tes-sau hauv DDL. Ib qho DDL generated tsuas yog qhov kwv yees ntawm nws.

Yuav ua li cas txog tus neeg siv khoom qauv?

Raws li tau hais los saum toj no, ntawm tus neeg siv khoom koj yuav xav tau daim ntawv theej ntawm koj lub database schema, tus neeg siv saib. Needless hais, tus neeg saib no yuav tsum nyob rau hauv sync nrog tus qauv tiag. Dab tsi yog txoj hauv kev zoo tshaj kom ua tiav qhov no? Nrog ib tug code generator.

Tag nrho cov databases muab lawv cov ntaub ntawv meta-cov ntaub ntawv ntawm SQL. Nov yog yuav ua li cas kom tau txais tag nrho cov lus hauv SQL dialects los ntawm koj cov ntaub ntawv:

	-- 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

Cov lus nug no (los yog cov uas zoo sib xws, nyob ntawm seb koj puas yuav tsum tau xav txog cov kev xav, cov ntsiab lus pom, cov lus muaj nuj nqis) kuj raug txiav txim los ntawm kev hu. DatabaseMetaData.getTables() los ntawm JDBC, lossis siv jOOQ meta-module.

Los ntawm cov txiaj ntsig ntawm cov lus nug no, nws yog qhov yooj yim los tsim cov neeg siv khoom-sab sawv cev ntawm koj tus qauv database, txawm li cas los xij koj siv thev naus laus zis ntawm tus neeg siv khoom.

  • Yog tias koj siv JDBC lossis Caij Nplooj Ntoos Hlav koj tuaj yeem tsim cov hlua txuas ntxiv
  • Yog tias koj siv JPA, ces koj tuaj yeem tsim cov koom haum lawv tus kheej
  • Yog tias koj siv jOOQ koj tuaj yeem tsim jOOQ meta qauv

Nyob ntawm seb lub zog npaum li cas koj cov neeg siv khoom API muab (xws li jOOQ lossis JPA), tus qauv meta tsim tuaj yeem nplua nuj thiab ua tiav. Piv txwv li, muaj peev xwm ntawm implicit joins, qhia hauv jOOQ 3.11, uas vam khom cov ntaub ntawv meta-cov ntaub ntawv hais txog kev sib raug zoo txawv teb chaws ntawm koj lub rooj.

Tam sim no ib qho kev nce qib database yuav hloov kho tus neeg siv khoom code. Xav ua piv txwv:

ALTER TABLE book RENAME COLUMN title TO book_title;

Koj puas xav ua txoj haujlwm no ob zaug? Tsis muaj teeb meem. Peb tsuas yog cog lus rau DDL, khiav nws los ntawm koj qhov kev tsim cov kav dej, thiab tau txais qhov hloov tshiab:

@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;
}

Los yog kho tshiab jOOQ chav kawm. Feem ntau cov kev hloov DDL tseem cuam tshuam rau cov ntsiab lus, tsis yog syntax xwb. Yog li ntawd, nws tuaj yeem yooj yim pom hauv cov ntawv sau ua ke dab tsi code yuav (lossis tuaj yeem yog) cuam tshuam los ntawm kev nce koj cov ntaub ntawv.

Qhov tseeb xwb

Txawm hais tias koj siv thev naus laus zis twg, yeej ib txwm muaj ib tus qauv uas tsuas yog qhov tseeb ntawm qee qhov subsystem - lossis tsawg kawg peb yuav tsum siv zog rau qhov no thiab zam kev lag luam tsis meej pem qhov twg "qhov tseeb" nyob txhua qhov chaw thiab tam sim no nyob qhov twg. Txhua yam tuaj yeem yooj yim dua. Yog tias koj tsuas yog pauv cov ntaub ntawv XML nrog qee qhov system, tsuas yog siv XSD. Ua tibzoo saib jOOQ's INFORMATION_SCHEMA meta-model hauv XML daim ntawv:
https://www.jooq.org/xsd/jooq-meta-3.10.0.xsd

  • XSD tau nkag siab zoo
  • XSD cim XML cov ntsiab lus zoo heev thiab tso cai rau kev siv tau hauv txhua hom lus neeg siv
  • XSD yog qhov zoo tshaj plaws thiab rov qab tau zoo heev
  • XSD tuaj yeem txhais ua Java code siv XJC

Lub ntsiab lus kawg yog qhov tseem ceeb. Thaum sib txuas lus nrog rau sab nraud siv cov lus XML, peb xav kom paub tseeb tias peb cov lus siv tau. Qhov no yooj yim heev kom ua tiav nrog JAXB, XJC thiab XSD. Nws yuav yog kev npau taws heev los xav tias, nyob rau hauv Java-thawj tsim txoj hauv kev uas peb ua peb cov lus li Java khoom, lawv tuaj yeem ua tau zoo rau XML thiab xa mus rau lwm qhov system. XML tsim los ntawm txoj kev no yuav tsis zoo, tsis muaj ntaub ntawv, thiab nyuaj rau kev txhim kho. Yog tias muaj kev pom zoo ntawm qib kev pabcuam zoo (SLA) ntawm qhov kev sib txuas, peb yuav tam sim ntawd ntsia nws.

Yuav kom ncaj ncees, qhov no yog qhov tshwm sim txhua lub sijhawm nrog JSON API, tab sis qhov ntawd yog lwm zaj dab neeg, kuv yuav sib cav lwm zaus ...

Databases: lawv yog tib yam

Ua haujlwm nrog databases, koj nkag siab tias lawv txhua tus yeej zoo ib yam. Lub database muaj nws cov ntaub ntawv thiab yuav tsum tswj cov schema. Txhua qhov kev hloov kho uas ua rau lub tswv yim yuav tsum tau ua ncaj qha rau hauv DDL kom qhov tseeb ntawm ib qho kev hloov kho.

Thaum qhov hloov tshiab tau tshwm sim, txhua tus neeg siv khoom yuav tsum hloov kho lawv cov qauv ntawm cov qauv. Qee tus neeg siv yuav raug sau rau hauv Java siv jOOQ thiab Hibernate lossis JDBC (los yog ob qho tib si). Lwm tus neeg tuaj yeem sau rau hauv Perl (cia peb xav kom lawv muaj hmoo), lwm tus hauv C #. Tsis muaj teeb meem. Tus qauv tseem ceeb yog nyob rau hauv lub database. Cov qauv tsim ORM feem ntau yog cov khoom tsis zoo, cov ntaub ntawv tsis zoo, thiab nyuaj rau kev tsim kho.

Yog li tsis txhob ua yuam kev. Tsis txhob ua yuam kev txij thaum pib. Ua haujlwm los ntawm database. Tsim ib lub raj xa dej uas tuaj yeem siv tau. Pab kom code generators kom yooj yim luam koj cov qauv database thiab muab pov tseg rau cov neeg siv khoom. Thiab tsis txhob txhawj txog cov code generators. Lawv zoo. Nrog lawv, koj yuav ua tau ntau dua. Txhua yam koj yuav tsum tau ua yog siv sijhawm me ntsis teeb tsa lawv los ntawm qhov pib, thiab koj yuav muaj ntau xyoo ntawm kev ua tau zoo los tsim koj qhov project zaj dab neeg.

Tsis txhob ua tsaug rau kuv, tom qab ntawd.

Lus piav qhia

Kom meej meej: Kab lus no tsis nyob rau hauv ib txoj kev tawm tswv yim hais tias tag nrho cov system (piv txwv li, sau, lag luam logic, thiab lwm yam) yuav tsum tau flexed kom haum koj database qauv. Qhov kuv tab tom tham txog hauv tsab xov xwm no yog cov neeg siv code uas cuam tshuam nrog lub database yuav tsum ua raws li cov qauv database kom nws tsis rov tsim dua cov qauv database hauv "thawj chav kawm" xwm txheej. Xws li logic feem ntau yog nyob ntawm cov ntaub ntawv nkag txheej ntawm koj tus neeg siv khoom.

Nyob rau hauv ob-theem architectures, uas yog tseem khaws cia nyob rau hauv tej qhov chaw, xws li ib tug system qauv yuav tsuas yog ib tug ua tau. Txawm li cas los xij, hauv ntau lub tshuab, cov ntaub ntawv nkag mus rau txheej zoo li kuv ua "subsystem" uas encapsulates tus qauv database.

Tsis suav

Muaj kev zam rau txhua txoj cai, thiab kuv tau hais ua ntej tias cov ntaub ntawv ua ntej thiab cov txheej txheem tsim tawm tuaj yeem qee zaum tsis tsim nyog. Nov yog ob peb qhov kev zam no (tej zaum yuav muaj lwm tus):

  • Thaum lub schema tsis paub thiab yuav tsum tau qhib. Piv txwv li, koj muab ib lub cuab yeej los pab cov neeg siv taw qhia txhua daim duab. Phew. Tsis muaj code tiam ntawm no. Tab sis tseem - lub database ua ntej ntawm tag nrho cov.
  • Thaum lub voj voog yuav tsum tau tsim tawm ntawm ya mus los daws qee qhov teeb meem. Qhov piv txwv no zoo li yog me ntsis frilly version ntawm tus qauv tus nqi attribute, i.e., koj tsis tshua muaj lub tswv yim zoo. Hauv qhov no, koj feem ntau tsis tuaj yeem paub tseeb tias RDBMS yuav haum koj.

Kev zam yog los ntawm qhov tshwj xeeb. Feem ntau hais txog kev siv RDBMS, schema paub ua ntej, nws nyob hauv RDBMS thiab tsuas yog qhov "qhov tseeb", thiab txhua tus neeg siv khoom yuav tsum tau txais cov ntawv luam los ntawm nws. Qhov zoo tshaj plaws, qhov no yuav tsum koom nrog lub tshuab hluav taws xob code.

Tau qhov twg los: www.hab.com

Ntxiv ib saib