Pulogalamu ya ProHoster > Blog > Ulamuliro > Chowonadi choyamba, kapena chifukwa chake dongosololi liyenera kupangidwa motengera kapangidwe ka database
Chowonadi choyamba, kapena chifukwa chake dongosololi liyenera kupangidwa motengera kapangidwe ka database
Pa Habr!
Tikupitiriza kufufuza mutuwo Java ΠΈ Spring, kuphatikiza pamlingo wa database. Lero tikukupemphani kuti muwerenge chifukwa chake, popanga mapulogalamu akuluakulu, ndizomwe zili m'dawunilodi, osati Java code, zomwe ziyenera kukhala zofunika kwambiri, momwe izi zimachitikira, ndi zina zomwe zilipo pa lamuloli.
M'nkhani yomalizayi, ndifotokoza chifukwa chake ndikukhulupirira kuti pafupifupi nthawi zonse, mtundu wa data mu pulogalamu uyenera kupangidwa "kuchokera ku database" osati "kuchokera ku Java" (kapena chilankhulo chilichonse cha kasitomala chomwe muli. ntchito ndi). Pogwiritsa ntchito njira yachiwiri, mukudzipangira njira yayitali yowawa komanso kuzunzika polojekiti yanu ikayamba kukula.
Nkhaniyi inalembedwa potengera funso limodzi, yoperekedwa pa Stack Overflow.
Kuphatikiza pa funso lachinyengo la momwe mungayendetsere bwino kupanga ma code - pamanja kapena mwachisawawa, tiyeneranso kunena kuti pali anthu omwe amakhulupirira kuti kupanga ma code sikofunikira nkomwe. Kulungamitsidwa kwa malingaliro awa, omwe ndimakumana nawo nthawi zambiri, ndikuti ndizovuta kukhazikitsa payipi yomanga. Inde, ndizovuta kwambiri. Ndalama zowonjezera zowonjezera zimakhalapo. Ngati mutangoyamba kumene ndi chinthu china (kaya ndi jOOQ, kapena JAXB, kapena Hibernate, ndi zina zotero), kukhazikitsa malo opangira zinthu kumatenga nthawi yomwe mungafune kumathera pophunzira API yokhayo kuti muthe kuchotsapo phindu. .
Ngati ndalama zomwe zimagwirizana ndi kumvetsetsa kapangidwe ka jenereta ndizokwera kwambiri, ndiye kuti, API idachita bwino kwambiri pakugwiritsa ntchito ma code jenereta (ndipo pambuyo pake zikuwonekeranso kuti kusintha kwa ogwiritsa ntchito momwemo kumakhala kovuta). Kugwiritsa ntchito kuyenera kukhala kofunikira kwambiri pa API iliyonse yotere. Koma uwu ndi mkangano umodzi wotsutsana ndi kupanga ma code. Kupanda kutero, ndi mwamtheradi kwathunthu kulemba choyimira chakumaloko cha chowonadi chamkati kapena chakunja.
Ambiri anganene kuti alibe nthawi yochitira zonsezi. Atha kutha masiku omaliza a Super Product yawo. Tsiku lina tidzakonza ma conveyor a msonkhano, tidzakhala ndi nthawi. Ndidzawayankha:
Koma ku Hibernate / JPA ndikosavuta kulemba Java code.
Zoonadi. Kwa Hibernate ndi ogwiritsa ntchito, izi ndi dalitso komanso temberero. Mu Hibernate mutha kungolemba mabungwe angapo, monga chonchi:
@Entity
class Book {
@Id
int id;
String title;
}
Ndipo pafupifupi chirichonse chiri chokonzeka. Tsopano zili kwa Hibernate kuti apange "zambiri" zovuta za momwe gululi lidzafotokozedwera mu DDL ya "chilankhulo" chanu cha 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);
"Chowonadi" chenicheni mu schema yanu ya database ndi "ulamuliro" pamwamba pake zili mkati mwa nkhokwe. Schema imatanthauzidwa mu database yokha ndipo kwina kulikonse, ndipo kasitomala aliyense ali ndi kopi ya schema iyi, kotero ndizomveka kukakamiza kutsata schema ndi kukhulupirika kwake, kuti azichita bwino mu nkhokwe - komwe chidziwitso chili. kusungidwa.
Izi ndi zakale, ngakhale zanzeru zachinyengo. Mafungulo oyambira komanso apadera ndi abwino. Makiyi akunja ndi abwino. Kuwunika zoletsa ndizabwino. Ndemanga - Chabwino.
Komanso, si zokhazo. Mwachitsanzo, pogwiritsa ntchito Oracle, mungafune kufotokoza:
Kodi tebulo lanu lili m'malo otani?
Mtengo wake wa PCTFREE ndi wotani?
Kodi cache kukula kwake ndi chiyani (kumbuyo kwa id)
Izi sizingakhale zofunika m'makina ang'onoang'ono, koma simuyenera kudikirira mpaka mutalowa m'malo akuluakulu a data-mutha kuyamba kupindula ndi kukhathamiritsa kosungirako komwe kumaperekedwa ndi ogulitsa monga zomwe tazitchula pamwambapa posachedwa. Palibe ORM yomwe ndawona (kuphatikiza jOOQ) yomwe imapereka mwayi wopeza zonse za DDL zomwe mungafune kugwiritsa ntchito munkhokwe yanu. Ma ORM amapereka zida zina zomwe zimakuthandizani kulemba DDL.
Koma kumapeto kwa tsikulo, dera lopangidwa bwino limalembedwa pamanja mu DDL. DDL iliyonse yopangidwa ndikungoyerekeza.
Nanga bwanji chitsanzo cha kasitomala?
Monga tafotokozera pamwambapa, pa kasitomala mudzafunika kopi ya schema yanu ya database, mawonekedwe a kasitomala. Mosafunikira kutchula, mawonekedwe a kasitomala awa ayenera kugwirizana ndi chitsanzo chenicheni. Njira yabwino yokwaniritsira izi ndi iti? Kugwiritsa ntchito code jenereta.
Ma database onse amapereka mauthenga awo a meta kudzera pa SQL. Umu ndi momwe mungapezere matebulo onse kuchokera pankhokwe yanu m'zilankhulo zosiyanasiyana za 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
Mafunso awa (kapena ofanana, kutengera ngati mukuyeneranso kuganizira malingaliro, mawonedwe opangidwa ndi thupi, ntchito zamtengo wapatali) amachitidwanso poyimba foni. DatabaseMetaData.getTables() kuchokera ku JDBC, kapena kugwiritsa ntchito meta-module ya jOOQ.
Kuchokera pazotsatira zamafunso oterowo, ndizosavuta kupanga choyimira chamakasitomala chamtundu wanu wa database, mosasamala kanthu zaukadaulo womwe mumagwiritsa ntchito pa kasitomala.
Kutengera kuchuluka kwa magwiridwe antchito omwe amaperekedwa ndi kasitomala wanu API (mwachitsanzo jOOQ kapena JPA), meta yopangidwa ikhoza kukhala yolemera komanso yokwanira. Tengani, mwachitsanzo, kuthekera kwa majowidwe obisika, idayambitsidwa mu jOOQ 3.11, yomwe imadalira zambiri za meta zokhudzana ndi maubwenzi ofunika akunja omwe alipo pakati pa matebulo anu.
Tsopano kuwonjezereka kulikonse kwa database kumangosintha ma code kasitomala. Tangoganizani mwachitsanzo:
ALTER TABLE book RENAME COLUMN title TO book_title;
Kapena kalasi yosinthidwa ya jOOQ. Zosintha zambiri za DDL zimakhudzanso semantics, osati ma syntax okha. Chifukwa chake, zitha kukhala zothandiza kuyang'ana mu code yomwe idapangidwa kuti muwone kuti ndi code iti (kapena ingakhudzidwe) ndi kuchuluka kwa database yanu.
Choonadi chokha
Mosasamala kanthu zaukadaulo womwe mumagwiritsa ntchito, nthawi zonse pamakhala mtundu umodzi womwe umakhala gwero lokhalo la chowonadi pazigawo zina - kapena, osachepera, tiyenera kuyesetsa izi ndikupewa chisokonezo chamabizinesi, pomwe "chowonadi" chili paliponse ndipo palibe paliponse nthawi imodzi. . Chilichonse chikhoza kukhala chophweka. Ngati mukungosintha mafayilo a XML ndi makina ena, ingogwiritsani ntchito XSD. Onani INFORMATION_SCHEMA meta-model kuchokera ku jOOQ mu mawonekedwe a XML: https://www.jooq.org/xsd/jooq-meta-3.10.0.xsd
XSD imamveka bwino
XSD imawonetsa zomwe zili mu XML bwino kwambiri ndikuloleza kutsimikizika m'zilankhulo zonse zamakasitomala
XSD ndi yosinthidwa bwino ndipo ili ndi mayendedwe obwerera kumbuyo
XSD ikhoza kumasuliridwa ku Java code pogwiritsa ntchito XJC
Mfundo yomaliza ndiyofunika. Polankhulana ndi makina akunja pogwiritsa ntchito mauthenga a XML, tikufuna kutsimikizira kuti mauthenga athu ndi ovomerezeka. Izi ndizosavuta kukwaniritsa pogwiritsa ntchito JAXB, XJC ndi XSD. Zingakhale misala kwambiri kuganiza kuti, ndi njira yopangira "Java yoyamba" pomwe timapanga mauthenga athu ngati zinthu za Java, kuti mwanjira ina atha kujambulidwa ku XML ndikutumizidwa ku makina ena kuti amwe. XML yopangidwa motere ingakhale yotsika kwambiri, yopanda zikalata, komanso yovuta kupanga. Pakadakhala mgwirizano wautumiki (SLA) wamawonekedwe oterowo, tikadawononga nthawi yomweyo.
Moona mtima, izi ndi zomwe zimachitika nthawi zonse ndi JSON APIs, koma iyi ndi nkhani ina, ndidzakangana nthawi ina ...
Databases: ndi chinthu chomwecho
Mukamagwira ntchito ndi ma database, mumazindikira kuti onse ndi ofanana. Maziko ali ndi deta yake ndipo ayenera kuyang'anira ndondomekoyi. Zosintha zilizonse zomwe zapangidwa ku schema ziyenera kukhazikitsidwa mwachindunji mu DDL kuti gwero limodzi lachowonadi lisinthidwe.
Pamene kusintha kwa gwero kwachitika, makasitomala onse ayenera kusinthanso makope awo a chitsanzo. Makasitomala ena amatha kulembedwa mu Java pogwiritsa ntchito jOOQ ndi Hibernate kapena JDBC (kapena onse). Makasitomala ena amatha kulembedwa ku Perl (timangowafunira zabwino), pomwe ena amatha kulembedwa mu C #. Zilibe kanthu. Chitsanzo chachikulu chiri mu database. Ma Model opangidwa pogwiritsa ntchito ma ORM nthawi zambiri amakhala osawoneka bwino, osalembedwa bwino, komanso ovuta kupanga.
Choncho musalakwitse. Osalakwitsa kuyambira pachiyambi. Gwirani ntchito kuchokera ku database. Pangani payipi yotumizira yomwe ingakhale yodzichitira. Yambitsani makina opanga ma code kuti zikhale zosavuta kukopera mtundu wa database yanu ndikuutaya kwa makasitomala. Ndipo lekani kudandaula za ma code jenereta. Iwo ndi abwino. Ndi iwo mudzakhala obala zipatso. Mukungoyenera kuthera nthawi yochepa kuti muwakhazikitse kuyambira pachiyambi - ndiyeno zaka zowonjezera zokolola zikukuyembekezerani, zomwe zimapanga mbiri ya polojekiti yanu.
Osandithokoza ine panobe, kenako.
Kufotokozera
Kunena zomveka: Nkhaniyi sichikukulimbikitsani kuti mukuyenera kupindika dongosolo lonse (ie, domain, logic yamalonda, etc., etc.) kuti mugwirizane ndi chitsanzo chanu cha database. Zomwe ndikunena m'nkhaniyi ndikuti nambala yamakasitomala yomwe imalumikizana ndi database iyenera kuchitapo kanthu pamaziko a database yachitsanzo, kuti iyo yokha isaberekenso mtundu wa database mu "gulu loyamba". Lingaliro ili nthawi zambiri limakhala pamalo ofikira deta pa kasitomala wanu.
Muzomangamanga ziwiri, zomwe zimasungidwabe m'malo ena, mtundu woterewu ukhoza kukhala wotheka. Komabe, m'makina ambiri gawo lofikira la data likuwoneka kwa ine ngati "subsystem" yomwe imaphatikiza mtundu wa database.
Kupatulapo
Pali zosiyana ndi lamulo lililonse, ndipo ndanena kale kuti njira yopangira database-yoyamba ndi magwero-code-code nthawi zina imakhala yosayenera. Nazi zina mwazosiyana (mwina zina):