Kung nagsisimula ka pa lang sa pagbuo ng Android, mapapansin mo na ang pamamahala ng data ay hindi basta-basta madali. Kapag ginagamit natin Silid bilang isang patong ng abstraksyon Tungkol sa SQLite, nalaman namin na, bagama't ito ay isang relational database, ang Room ay may sariling mga patakaran upang maiwasan ang mga teknikal na problema at mapanatili ang kahusayan.
Ang pamamahala kung paano kumokonekta ang mga entity sa isa't isa ay mahalaga upang maiwasan ang pagiging mabagal o bug ng iyong aplikasyon. Sa artikulong ito, tatalakayin natin... kung paano bumuo ng mga kumplikadong relasyon at kung paano masulit ang mga SQL query para maayos na dumaloy ang iyong data.
Mga Uri ng Relasyon sa Ekosistema ng Silid
Hindi tulad ng ibang mga framework kung saan maaari kang direktang sumangguni sa mga object, ipinagbabawal ito ng Room upang maiwasan ang mga isyu sa performance. Sa halip, nag-aalok ito ng mga sumusunod na paraan upang pamahalaan ang mga object: mga ugnayan sa pagitan ng mga entidad>:
- Isa-isaAng isang talaan sa isang talahanayan ay eksklusibong naka-link sa isang talaan lamang sa isa pa.
- Isa hanggang ilanMaaaring ikonekta ang isang entity sa isang grupo ng mga record na may ibang uri.
- Marami hanggang ilanDito nagiging interesante ang mga bagay-bagay, dahil maraming rekord ang nauugnay sa maraming iba pang rekord, karaniwang nangangailangan ng isang pagdudugtong o intermediate na mesa.
- Mga naka-nest na relasyonSa pamamagitan ng paggamit mga isinama na bagay, ang isang entity ay maaaring maglaman ng isa pa na parang isa lamang itong field.
Mga Istratehiya para sa Pagsasagawa ng mga Relational Search
Kapag gusto mong kunin ang datos na nakakalat sa maraming talahanayan, binibigyan ka ng Room ng dalawang pangunahing landas. Ang una ay ang paggamit ng intermediate na klase ng datosGamit ang pamamaraang ito, gagawa ka ng isang modelo na magpapangkat sa mga field na kailangan mo mula sa parehong talahanayan. Ito ay mainam para maiwasan ang labis na kumplikadong SQL, bagama't ang disbentaha ay magtatapos ka sa mas maraming klase sa iyong proyekto, na maaaring makagulo nang kaunti sa code.
Ang pangalawang opsyon, na magagamit simula noong bersyon 2.4, ay ang paggamit ng mga uri ng datos na multimapDito mo nakakalimutan ang tungkol sa paglikha ng mga karagdagang klase at direktang tukuyin ang pagbabalik bilang isang mapa (halimbawa, Map<User, List<Book>></Map>). Sa kasong ito, Ang mabibigat na gawain ay ginagawa ng SQL query. sa pamamagitan ng isang JOIN, ngunit ang Kotlin o Java code ay mas malinis at mas direkta.
Pag-master sa mga Naka-embed na Bagay gamit ang @Embedded
Minsan gusto natin na ang isang bagay ay kumilos bilang isang lohikal na yunit, ngunit sa antas ng database, gusto natin na ang mga field nito ay maiimbak sa magkakahiwalay na mga column. Para dito, ginagamit natin ang anotasyon. @Naka-embedHalimbawa, kung mayroon kang klase Address kasama ang kalye at lungsod, sa pamamagitan ng pagmamarka nito bilang naka-embed sa loob ng entidad UserGagawa ang Room ng user table na naglalaman ng lahat ng kolum ng address pinagsama-sama.
Kung sakaling kailangan mong magsama ng dalawang bagay na magkapareho ang uri sa isang entity, maaaring makaranas ka ng mga conflict sa mga pangalan ng column. Para malutas ito, maaari mong gamitin ang property na unlapina nagdaragdag ng teksto sa simula ng bawat pangalan ng column at iba pa Pinipigilan mo ang pag-overlap ng data..
Mga Abanteng Konsepto ng mga Query at Relational Algebra
Para makapagsulat ng mga query na hindi mabibigo, mahalagang maunawaan ang relational algebra. Ang mga operasyon tulad ng unyon, sangandaan at pagkakaiba Pinapayagan tayo ng mga ito na manipulahin ang mga dataset. Sa SQL, isinasalin ito sa mga sugnay tulad ng UNION, INTERSECT y EXCEPT. Sa kabilang banda, ang pagpili at pagtataya Pinapayagan tayo ng mga ito na i-filter ang mga row at piliin kung aling mga column ang gusto nating ipakita, ayon sa pagkakabanggit.
Ang puso ng mga kumplikadong konsultasyon ay nasa Mga JOIN o kombinasyon. Nasa atin ang INNER JOINna nagdadala lamang ng mga talaang tumutugma sa parehong talahanayan, at ang OUTER JOIN (Kaliwa, Kanan, at Buo), na mas mapagpahintulot at kumukuha ng datos kahit na walang eksaktong tugma sa kabilang talahanayan. Pag-alam kung paano pumili sa pagitan ng isang equi-join o isang natural na pagsanib Ito ang pagkakaiba sa pagitan ng isang mahusay na query at isa na nagbabalik ng dobleng data.
Praktikal na Implementasyon: Mga Entidad at DAO
Kapag nagse-set up ng iyong database, dapat mong tukuyin nang tama ang iyong Mga tala sa silid. Gumagamit kami @Entity para sa mga mesa at @PrimaryKey para sa mga natatanging identifier. Para i-link ang mga talahanayan, ang anotasyon @ForeignKey Ito ay mahalaga, dahil pinapayagan tayo nitong tukuyin ang ugnayan sa pagitan ng child column at ng parent table, at itinatatag din kung ano ang mangyayari kung magbura tayo ng data (tulad ng mga cascading delete).
Ang lahat ng pag-access sa datos ay nakasentro sa Mga DAO (Mga Bagay sa Pag-access ng Data)Dito natin isinusulat ang mga pangungusap. @QueryHalimbawa, para maghanap ng mga teleponong nauugnay sa isang developer, maglulunsad kami ng isang panloob na pagdugtong sa pagitan ng talahanayan ng mga developer at ng talahanayan ng mga telepono batay sa ID ng gumagamit.
Pamamahala ng Relasyon sa Iba Pang Mga Kagamitan
Bagama't nakatuon kami sa Room, nakakatuwang makita na ang mga tool tulad ng Power BI o Access ay humahawak dito nang iba. Halimbawa, sinusubukan ng Power BI na gawin ang isang awtomatikong pagtuklas ng relasyon batay sa mga pangalan ng kolum. Dito, ang mga konsepto tulad ng kardinalidad (isa-sa-isa o marami-sa-isa) at ang direksyon ng cross filter Mahalaga ang mga ito upang matiyak na ang mga ulat ay hindi magpapakita ng maling datos.
Sa Access, ang pamamaraan ay mas biswal, na ginagawang mas madali ang paglikha mga query na may mga parameter at mga advanced na pormula. Sa lahat ng mga sistemang ito, ang prinsipyo ay pareho: kung walang mahusay na tinukoy na natatanging susiAng mga ugnayan ay nasisira o lumilikha ng kalabuan, na nagtutulak sa atin na linisin ang datos o lumikha ng mga intermediate na talahanayan.
Ang wastong implementasyon ng arkitektura ng datos, maging sa pamamagitan ng kakayahang umangkop ng mga multi-map sa Room o ang higpit ng mga JOIN sa SQL, ay tinitiyak na ang aplikasyon ay maaaring i-scalable. Pag-master sa foreign key at ang paggamit ng @Embedded Pinapayagan ka nitong baguhin ang isang patag na database tungo sa isang matatag na sistema ng pakikipag-ugnayan, na may kakayahang pamahalaan ang mga kumplikadong dami ng impormasyon nang hindi isinasakripisyo ang bilis ng pagtugon ng device. Ibahagi ang impormasyong ito upang mas maraming tao ang matuto tungkol sa paksa.
