4.1 Panimula

Sa pamamagitan ng pag-convert ng mga talahanayan ng database sa mga regular na talahanayan, maaari mo na ngayong suriin ang mga ugnayan sa pagitan nila. Ang bilang ng mga elementong nakikipag-ugnayan sa pagitan ng dalawang magkakaugnay na talahanayan ay tinatawag na kardinal. Tinutulungan ka ng Cardinality na kontrolin kung gaano kahusay ang paghati mo sa iyong data sa mga talahanayan.

Sa teoryang, lahat ng entity ay maaaring mapanatili ang mga relasyon sa isa't isa, ngunit sa pagsasagawa, mayroong tatlong uri ng mga relasyon sa pagitan ng mga entity:

  • Isa sa isa
  • Isa sa marami
  • marami sa marami

4.2 Isa-sa-isang komunikasyon

Kung mayroon lamang isang instance ng entity A para sa bawat instance ng entity B, sinasabing mayroon silang one-to-one na relasyon (madalas na tinutukoy bilang "1:1"). Sa mga diagram ng ER, ang gayong relasyon ay ipinahiwatig ng isang linya na may maliit na bar sa bawat dulo:

Ang isang 1:1 na relasyon sa pangkalahatan ay nagpapahiwatig na, maliban kung mayroon kang magandang dahilan upang panatilihing hiwalay ang mga ito, ang data ng dalawang talahanayan ay pinakamahusay na pinagsama sa isa.

Gayunpaman, sa ilang pagkakataon, makatwirang gumamit ng mga talahanayan na may 1:1 na relasyon. Kung ang iyong mga talahanayan ay may mga patlang na may opsyonal na data, tulad ng mga paglalarawan, at sa maraming mga kaso ay walang laman ang mga ito, makatuwirang ilipat ang lahat ng mga paglalarawan sa isang hiwalay na talahanayan, na magbibigay-daan sa iyong alisin ang mga madalas na gaps at dagdagan ang kahusayan ng iyong database .

Pagkatapos, upang maayos na maimapa ang data, kakailanganin mong magsama ng kahit isang magkaparehong column sa bawat talahanayan (pinakamahusay na pumili ng pangunahing key para dito).

4.3 Isa-sa-maraming relasyon

Ang ganitong uri ng relasyon ay nangyayari kapag ang isang tala sa isang talahanayan ay nauugnay sa maraming entity sa isa pa. Halimbawa, maaaring mag-order ang parehong customer, o maaaring humiram ng maraming aklat ang isang bisita sa library sa isang pagbisita. Ang isa-sa-maraming relasyon (o 1:M para sa maikli) ay ipinahayag sa isang diagram gamit ang notasyon ng crow's feet, tulad ng ipinapakita sa halimbawa sa ibaba:

Upang maglapat ng 1:M na relasyon kapag nagpaplano ng database, idagdag lang ang pangunahing key mula sa "isang" talahanayan bilang isang katangian sa "marami" na talahanayan. Kung ang primary key ay nasa ibang table, ito ay tinatawag na "foreign key". Ang "isang" talahanayan ay itinuturing na ang parent table, habang ang "many" table ay itinuturing na ang child table.

4.4 Many-to-many na relasyon

Kapag ang maraming entity sa isang table ay maaaring ikonekta sa maraming entity sa isa pa, ang mga ito ay itinuturing na may many-to-many (o M:M) na relasyon. Halimbawa, ang gayong relasyon ay umiiral sa pagitan ng mga mag-aaral at mga klase, dahil ang bawat mag-aaral ay maaaring dumalo sa iba't ibang klase, at, nang naaayon, maraming mga mag-aaral ang maaaring pumasok sa bawat klase.

Sa ER diagram, ang ganitong uri ng relasyon ay ipinapakita bilang mga sumusunod:

Sa kasamaang palad, imposibleng direktang ipatupad ang gayong relasyon sa database. Samakatuwid, ito ay kailangang hatiin sa dalawang isa-sa-maraming relasyon.

Para magawa ito, kakailanganin mong lumikha ng bagong entity sa pagitan ng dalawang talahanayan. Kung ang isang M:M na relasyon ay naitatag sa pagitan ng mga benta at mga produkto, ang bagong entity ay maaaring tawaging "mga produktong ibinebenta" dahil ito ay kumakatawan sa mga nilalaman ng bawat pagbebenta.

Gamit ang "mga ibinebenta" at ang talahanayang "mga benta" at ang talahanayang "mga kalakal" ay uugnay sa uri 1:M. Sa iba't ibang mga modelo, ang mga naturang intermediate na entity ay tinatawag na iba - "pagkonekta ng mga talahanayan", "mga nauugnay na entidad" o "mga talahanayan ng node".

Ang bawat entry sa talahanayan ng link ay nag-uugnay sa dalawang magkaibang entity ng mga katabing talahanayan (at maaari ring maglaman ng karagdagang impormasyon). Halimbawa, ang isang talahanayan ng link sa pagitan ng mga mag-aaral at mga klase ay maaaring magmukhang ganito:

4.5 Mandatory o hindi?

Ang isa pang diskarte sa pagsusuri ng link ay upang matukoy kung alin sa mga konektadong entity ang isang kinakailangan para sa pagkakaroon ng isa pang entity. Ang opsyonal na link side ay minarkahan ng bilog sa trunk.

Halimbawa, upang ang isang estado ay magkaroon ng sarili nitong kinatawan sa UN, dapat itong umiiral sa mapa ng mundo, ngunit ang pahayag sa kabaligtaran ay magiging mali:

Ang dalawang entity ay maaaring magkaisa (iyon ay, ang isa ay hindi maaaring umiral nang wala ang isa).

Mga recursive na link

Minsan ang isang talahanayan ay maaaring sumangguni sa sarili nito. Halimbawa, ang isang talahanayan ng empleyado ay maaaring may katangiang "manager" na magre-refer sa amin sa isa pang empleyado sa parehong talahanayan. Ito ang recursive na relasyon.

Mga karagdagang koneksyon

Ang mga link ay itinuturing na kalabisan kung ang mga ito ay ipinahayag nang higit sa isang beses. Bilang isang patakaran, ang isa sa mga ito ay maaaring tanggalin nang hindi nawawala ang mahalagang impormasyon. Halimbawa, kung ang entity na "mga mag-aaral" ay konektado sa entidad na "mga guro" hindi lamang direkta, ngunit din hindi direkta sa pamamagitan ng "mga klase", makatuwirang alisin ang ugnayan sa pagitan ng mga entidad na "mag-aaral" at "mga guro". Ang desisyon na ito ay nabibigyang katwiran sa pamamagitan ng katotohanan na posible na magtalaga ng mga mag-aaral sa mga guro sa pamamagitan lamang ng mga klase.

4.6 Referential na integridad ng data

Kapag binabago ang pangunahin at dayuhang mga susi, dapat obserbahan ng isa ang isang aspeto bilang integridad ng referential ng data . Ang pangunahing ideya nito ay panatilihin ang dalawang talahanayan sa isang database na nag-iimbak ng parehong data na pare-pareho.

Ang integridad ng data ay kumakatawan sa wastong binuong mga ugnayan sa pagitan ng mga talahanayan na may tamang pag-uugnay sa pagitan ng mga ito. Sa anong mga kaso maaaring labagin ang integridad ng data:

  • Anomalya sa pagtanggal . Nagaganap kapag ang isang hilera ay tinanggal mula sa pangunahing talahanayan. Sa kasong ito, ang foreign key mula sa dependent table ay patuloy na tumutukoy sa tinanggal na row mula sa master table.
  • Anomalya sa pagpasok . Nagaganap kapag ang isang row ay ipinasok sa isang dependent table. Sa kasong ito, ang foreign key mula sa dependent table ay hindi tumutugma sa pangunahing key ng alinman sa mga row mula sa master table.
  • I-update ang anomalya. Sa ganoong anomalya, maaaring maglaman ang ilang row ng isang table ng data na kabilang sa parehong bagay. Kung babaguhin mo ang data sa isang row, maaari silang magkasalungat sa data mula sa isa pang row.

Anomalya sa pagtanggal

Upang malutas ang anomalya sa pagtanggal, dapat na itakda ang foreign key sa isa sa dalawang hadlang:

Kung ang isang row mula sa isang dependent table ay kinakailangang nangangailangan ng isang row mula sa master table, ang foreign key ay nakatakda sa cascade delete. Iyon ay, kapag ang isang row ay tinanggal mula sa master table, ang nauugnay na row (mga) ay tatanggalin mula sa dependent table.

Kung ang isang hilera mula sa isang dependent na talahanayan ay nagbibigay-daan sa walang kaugnayan sa isang hilera mula sa pangunahing talahanayan (iyon ay, ang gayong relasyon ay opsyonal), pagkatapos ay ang dayuhang key ay nakatakda sa NULL kapag ang kaugnay na hilera ay tinanggal mula sa pangunahing talahanayan. Dapat na nullable ang column ng foreign key.

Anomalya sa pagpasok

Upang malutas ang insert na anomalya kapag nagdaragdag sa isang dependent data table, ang column na kumakatawan sa foreign key ay dapat na nullable. At sa gayon, kung ang bagay na idinaragdag ay walang koneksyon sa pangunahing talahanayan, kung gayon ang dayuhang key column ay magkakaroon ng NULL na halaga.

I-update ang mga anomalya

Upang malutas ang problema sa anomalya sa pag-update, inilapat ang normalisasyon, na tinalakay nang mas maaga.