Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Databases
Code

SQL para sa mga Nag-uumpisa: Parte 3 - Mga Relasyon sa Database

by
Length:LongLanguages:

Tagalog (Wikang Tagalog) translation by Robert Alexander (you can also view the original English article)

Ngayon, itutuloy natin ag ating paglalakbay sa mundo ng SQL at magkakatulad na database na sistema. Sa ikatlong parte na ito ng serye, malalaman natin kung gaano gumawa ng maraming table na may relasyon sa isa’t-isa. Una, tutungo tayo muli sa mga pinaka-konsepto, pagkatapos ay magta-trabaho na tayo kasama ang JOIN queries sa SQL.

Maaari mo ring makita ang mga SQL databases sa gumagalaw sa pagtsi-tsek sa SQL na mga scripts, apps at add-ons sa Envato Market.

Pagbabalik-tanaw

Introduksyon

Kapag gumagawa ng database, didiktahan tayo ng ating sentido-kumon na dapat tayong gumamit ng iba’t-ibang tables para sa iba’t-ibang kategorga. Ilang halimbawa nito ay ang: mga kostumer, mga order, mga kagamitan, mga mensahe, at iba pa... Ngunit kailangan din nating magkaroon ng relasyon sa pagitan ng mga tables na ito. Halimbawa, o-order and kostumer, at ang order aymayroong mga nilalaman. And relasyon na ito ay nararapat na mai-presenta sa database. Ganoon din, kapag kumukuha ng datos sa SQL, kailangan din nating gumamit ng siguradong tipo ng JOIN queries para makuha ang ating mga kailangan.

Mayroong iba’t-ibang tipo ng mga relasyon ang database. Sa araw na ito ay pag-uusapan natin ang mga sumusunod:

  • Isa sa Isang Relasyon
  • Isa sa Marami at Marami sa Isang Relasyon
  • Marami sa Maraming Relasyon
  • Sariling Pagpili ng Relasyon

Kapag pumipili ng datos mula sa iba’t-ibang tables na may mga relasyon, gagamit tayo ng JOINT query. Maraming klase ng JOINS, at malalaman natin ang mga sumusunod:

  • Kros na Joins
  • Natural na Joins
  • Nakapaloob na Joins
  • Kanang (Panlabas) na Joins
  • Kaliwa (Panlabas) na Joins

Malalaman din natin ang tungkol sa ON clause at sa USING na clause.

Isa sa Isang Relasyon

Sabihin nating mayroon kang table para sa kostumer:

Maaari nating ilagay ang tirahan ng kostumer sa isa pang table:

Ngayon ay mayroon na tayong relasyon sa table ng Kostumer at sa table ng mga Tirahan. Kung kada isang tirahan ay para lamang sa iisang kostumer, ang relasyon na ito ay "Isa sa Isa". Tandaan lamang na ang relasyon na ito ay hindi pangkaraniwan. Ang ating unang table na mayroong tirahan kasama ng kostumer ay maaaring umandar sa mas nakararaming pagkakataon.

Pansinin na ngayon ay mayroon ng pangalan ng field na "address_id" sa table ng Kostumer, na tumutukoy sa katulad na table sa table ng Tirahan. Ito ay tinatawag na "Foreign Key" at ito ay nagagamit a lahat ng klase ng relasyon sa database. Pag-uusapan natin ang paksang ito mamaya sa artikulong ito.

Ngayon ay makikita na natin ang relasyon ng kostumer at ng tirahan sa rekord katulad nito:

Tignan na ang pagkakaroon ng relasyon ay opsyonal, katulad ng pagkakaroon ng kostumer na walang nakalagay na rekord ng tirahan.

Isa sa Marami at Marami sa Isang Relasyon

Heto ang pinaka - madalas gamitin na tipo ng relasyon. Isipin ang isang e-commerce na website, na may mga sumusunod:

  • Ang mga kostumer ay maaaring kumuha ng order.
  • Ang mga order ay maaaring magkaroon ng madaming laman.
  • Ang mga laman ay maaaring magkaroon ng iba’t-ibang lenggwahe sa deskripsyon.

Sa kasong ito kakailanganin nating gumawa ng “Isa sa Maraming" Relasyon. Heto ang halimbawa:

Kada kostumer ay maaaring may zero, isa o maraming order. Ngunit ang order ay maaari lamang sa iisang kostumer:

Marami sa Maraming Relasyon

Sa ma-ilang kaso, maaaring may mga pagkakataon sa magkabilang banda ng mga relasyon. Halimbawa, bawat order ay maaaring may maraming naglalaman ng maraming order. At kada napagpilian ay mayroong marami pang pagpipilian.

Samga ganitong relasyon, kailangan nating gumawa ng karagdagang table:

Ang mga Pagpipilian_at mga order na table ay may iisang tungkulan lamang, at iyon ay ang guma ng “Marami sa Maraming” relasyon sa pagitan ng mga pagpipilian at ng mga order.

Ganito natin maaaaring makita ang ganitong klase ng relasyon:

Kung nais mong idagdag ang mga pagpipilian _at ang mga order na rekord sa iisag graph, magmumukha itong ganito:

Pagpili ng Sariling mga Relasyon

Ginagamit din ito kapag kailangan na ang table ay may relasyon sa sarili nito. Halimbawa, sabihin natin na ikaw ay may referral na programa. Ang mga kostumer ay maaaring magrekomenda ng iba pang kostumer sa iyong pamilihang website. Magmumukhang ganito ang table:

Sina Kostumer 102 at 103 ai inirekomenda ni kostumer 101.

Kaparehas ito ng “isa sa maraming” relasyon dahilag iisang kostumer ay makakapagrekomenda pa ng maraming kostumer. Maaari rin itong makita bilang isang istraktura ng isang puno.

Ang isang kostumer ay maaaring mag rekomenda ng zero na kostumer, isa, o marami pang kostumer. Kada isang kostumer ay ay maaari lamang irekomenda ng isa pang kostumer, o wala.

Kung nais mong gumawa ng sariling pagpili ng “marami sa maraming” relasyon, maaari kang gumamit ng  isa pang table katulad ng ating napag-usapan sa huling seksyon.

Foreign Keys

Nalaman palang natin ang ma-ilang konsepto. Ngayon ay ang pag-gawa na sa mga ito gamit ang SQL. Sa parteng ito, kailangan nating maintindihan kung ano ang mga Foreign Keys. 

Kahalintulad ng halimbawang nasa itaas, palagi tauong mayroong ganito "****_id" na field na nagbibigay ng hanay sa isa pang table. Sa halimbawang ito, ang id ng kostumer_id sa hanay ng mga Order table ay isang Foreigh Key na hanay:

Sa isang database na tulad ng MySQL, heto ay dalawang paraan para makagawa ng foreign keys sa hanay:

Malawak na pagpapaliwanag sa Foreign Key

Tayo’y gumawa ng simpleng tableng kostumer:

Ngayon ay ang mga order table, na maglalaman ng Foreign Key:

Ang parehas na hanay (kostumer.kostumer_id at orders.kostumer_id) ay dapat na eksaktong istraktura. Kung ang isa ay INT, ang isa ay ay hindi dapat BIGINT halimbawa.

Tandaan na ang MySQL lamang ang InnoDB na mekanismo ay bung sumusuporta sa Foreign Keys. Ngunit ang ibang lalagyanan ay hahayaan ka paring ayusin ang mga ito ng hindi nagkakamali. Ganoon din na ang Foreign Key na hanay ay nakaayos ng awtomatiko, yoon ay kung hindi ka maglalagay ng iba pa rito.

Walang Mahabang Deklarasyon

Ang magkatulad na order table ay maaaring gawin maski na hindi malawakang ideklara and kostumer_id na hanay para maging Foreign Key:

Kapag may kinukuhang datos mula sa JOIN na tanong, maaaro mo paring kamitin ang hanay na ito bilang Foreign Key maski na pa ang database na mekanismo ay walang alam sa nasabing relasyon.

Malalaman natin ang tungkol sa JOIN na mga tanong sa artikulong ito.

Pananaw sa mga Relasyon

Ang aking kasalukuyang paboritong software sa pagdidesenyo ng database at pagtanaw sa Foreign Key na mga relasyon ay ang MySQL Workbench.

Kapag nai-desenyo mo na ang iyong database, maaaari mong i-angkat ang SQL at paandarin ito sa iyong server. ito ay nagiging madali para sa mga mas malalaki at komplikadong disenyo ng database.

JOIN Queries

Para kunin muli ang mga datos mula sa database na mayroong mga relasyon, madalas nating gamitin ang JOIN queries.

Bago tayo mag-umpisa, gumawa tayo ng table at halimbawa ng datos na ating gagamitin.

Mayroon tayong 4 na kostumer. Ang isang kostumer ay may 2 na order, dalawang kostumer ay may isang order kada isa, at isang kostumer na walang order. Ngayon ay tignan natin ang iba’t-ibang klase ng JOIN queries na maaari nating gamitin sa mga table na ito.

Cross Join

Ito ay basikong halimbawa ng JOIN query kapag walang nakalagay na kondisyon.

Ang resulta ay tinatawag na “Cartesian product” ng mga table. Ibig sabihin na kada hanay sa unang table ay katulad ng kada hanay sa ikalawang table. Dahil kada table ay may 4 na hanay, makakakuha tayo ng pinal na resulta na 16 na hanay.

Ang JOIN na keyword ay maaaring palitan gamit ang kuwit.

Ang resulta ng ganito ay hindi kadalasang nagagamit. Kaya tignan natin ang iba pang tipo ng join.

Natural na Join

Sa ganitong klase ng JOIN query, ang mga table ay kailangang may katulad na pangalan sa hanay. Sa kaso natin, ang parehas na table ay may kostumer_id na hanay. Kaya ang MySQL ay pagsasamahin ang mga rekord kapag ang mga nilalaman ng hanay na ito ay katulad ng sa dalawa pang rekord.

Kung mapapansin mo, ang kostumer_id na hanay ay minsan lamang naipapakita dito, dahil ang database na mekanismo ay itinuturing ito bilang komon na hanay. Makikita natin ang dalawang order na inilagay ni Adam, at ang dalawa pa mula kay Joe at Sandy. Tayo ay makakakuha na tayo ng magagamit na impormasyon.

Nakapaloobna na Join

Kapag ang kundisyon ng join ay nakalahad, ang inner join ay ginagamit. Sa kasong ito, magandang ideya na magkaroon ng kostumer _id na hanay na jatulad ng magkaparehas na table. Ang resulta ay dapat na katulad ng sa Natural na join.

Ang mga resulta ay magkaparehas lamang maliban lamang sa bahagyang pagkakaiba. Ang kostumer_id na hanay ay nauulit ng dalawang beses, minsan kada isang table. Ang rason ay inuutusan lamang natin ang database na ilagay ang mga nilalaman sa mga magkaparehas na hanay. Ngunit ang mga ito ay nagpapakita lamang ng magkaparehas na impormasyon.

Tayo ay magdagdag pa ng karagdagang impormasyon sa query.

Sa puntong ito ay natanggap natin ang order na higit sa $15.

ON na Clause

Bago tumungo sa iba pang tipo ng  join, kailangan nating tignan ang ON na clause. Ito ay magagamit sa paglalagay ng JOIN na kundisyon sa magka-ibang clause.

Ngayon ay makikita na natin ang JOIN na kondisyon mula sa WHERE na clause na kondisyon. Ngunit mayroon ding maliit na pagkakaiba sa pag-gamit. Makikita natin ang mga ito sa mga halimbawa ng LEFT na JOIN.

USING na Clause

Ang USING na clause ay kaparehas ng ON na clause, ngunit mas maikli. Kung ang hanay ay kaparehas na pangalan ng parehas na table, mailalagay natin ang mga ito dito.

Sa totoo lang ay halos katulad ito ng NATURAL na JOIN, kaya ang join na hanay (kostumer_id) ay hindi nauulit ng dalawang beses sa isang hanay.

Left na (Panlabas) Join

Ang LEFT na JOIN ay tipo ng panlabas na join. Sa ganito, walang kamukha na makikita sa pangalawang table, and rekord sa unang table ay nakalagay parin.

Maski na pa walang order si Andy, ang rekord nya ai ipinapakita parin. Ang nilalaman ng hanay ay NULL.

Gamitin din ito sa paghahanap ng rekord na walang relasyon. Halimbawa, mahahanap natin ang kostumer na walang nilagay na ano mang order.

Ang gagawin lang natin ay hanapin ang NULL na nilalaman sa order_id.

Tignan din na ang OUTER keyword ay pinagpipilian. Maaari mong gamitin ang  LEFT JOIN keysa sa LEFT OUTER JOIN.

Mga Kondisyon

Tignan naman natin ngayon ang mga katanungan na may kondisyon.

Ano nang nagyari kay Andy at Sandy? Ang LEFT na JOIN ay nararapat na ibaik ang mga kostumer na mga walang katulad na order. Ang problema ay kung nasaan ang WHERE na clause ay hinaharangan ang ganitong resulta. para makuha ang mga ito, maaari rin nating ilagay ang NULL na kondisyon.

Nakuha natin si Andy ngunit hindi si Sandy. Mayroon paring mali. Para makuha ang ating nais, kailangan nating gumamit ng ON na clause.  

Ngayon ay nakuha na natin lahat, at lahat ng order ay matass pa sa $15.Tulad ng sinabi ko kanina, ang ON na clause ay minsang may ibang ginagawa gaya ng WHERE na clause. Sa Outer Join katulad nito, ang mga hanay ay kasama maski na pa hindi katulad ng mga ito ang ON na clause na mga kondisyon.

Right (Panlabas) Join

Ang RIGHT na panlabas na JOIN ay ganoon din gumalaw, ngunit ang pagkakasunod sunod ng mga table ay baligtad.

Ngayon ay wala ng NULL na resulta dahil kada order ay may katulad na rekord ng kostumer. Maaari nating palitan ang order ng mga table at kunin ang parehas na detalye tulad ng ginawa natin sa LEFT OUTER JOIN.

Ngayon ay mayroon na tayong NULL values dahil ang table ng kortumer ay nasa kanang banda na ng join.

Konklusyon

Salamat sa pagbasa sa artikulong ito. sana ay natuwa kayo! Mag-iwan ng komento at mga katanungan, magandang araw!

Huwag kalimutang tignan ang SQL scripts, apps at add-ons sa Envato Market. Malalaman mo ang mga posibleng gawin sa mga SQL na database, at maaaring makita mo na ang perpektong solusyon para matulungan ka sa iyong kasalukuyang ginagawang proyekto,

Sundan kami sa Twitter, o sumunod sa Nettuts+ RSS Feed para sa mga pinaka magagandang web development na tutoryal sa web na ito.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.