ER-mallinnus ja suhteiden kardinaliteetti
Vaatimusten muuntaminen entiteeteiksi, suhteiksi ja liitostauluiksi.
ER-mallinnus ja suhteiden kardinaliteetti on ilmainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Valmistautuminen ohjelmointihaastatteluihin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Miksi ER-mallinnusta käsitellään haastatteluissa
Normalisoinnin jälkeen haastattelijat testaavat, osaatteko muuntaa vaatimukset skeemaksi. Tehtävänanto on yleensä avoin: "Suunnitelkaa tietokanta kyytipalvelusovellukselle" tai "Mallintakaa kirjastojärjestelmä."
Tämä on entiteetti–suhdemallinnusharjoitus (ER-mallinnus). Haastattelijat seuraavat, miten tunnistatte entiteetit, attribuutit ja niiden väliset suhteet, mukaan lukien kardinaliteetin.
Taito on muuntaa englanninkieliset substantiivit ja verbit tauluiksi ja viiteavaimiksi.
Entiteetit, attribuutit ja suhteet
Jokaisen ER-mallin muodostavat kolme rakennuspalikkaa:
- Entiteetti: asia, josta tallennetaan tietoja (Asiakas, Tilaus, Tuote). Siitä tulee yleensä taulu.
- Attribuutti: entiteetin ominaisuus (nimi, hinta, created_at). Siitä tulee yleensä sarake.
- Suhde: tapa, jolla entiteetit liittyvät toisiinsa (Asiakas tekee Tilauksen). Se toteutetaan viiteavaimilla tai liitostauluilla.
Tehtävänannosta saa hyvän vinkin: substantiiveista tulee entiteettejä tai attribuutteja, verbeistä suhteita.
Kardinaliteetti: keskeinen käsite
Kardinaliteetti kuvaa, kuinka monta yhden entiteetin instanssia liittyy toiseen. Kolme päätyyppiä ovat:
- Yksi yhteen (1:1): yksi tämän puolen rivi vastaa enintään yhtä toisen puolen riviä.
- Yksi moneen (1:N): yksi tämän puolen rivi vastaa monia toisen puolen rivejä (yleisin tapaus).
- Moni moneen (M:N): kummankin puolen rivit vastaavat monia toisen puolen rivejä.
Oikein määritetty kardinaliteetti ratkaisee, mihin viiteavaimet sijoitetaan ja tarvitaanko liitostaulua.
Yksi moneen -suhteen toteuttaminen
Yksi moneen -suhde toteutetaan sijoittamalla viiteavain "monen" puolelle. Asiakkaalla on monta tilausta, joten jokaisella tilausrivillä on customer_id.
Sanokaa suunta haastattelussa aina selvästi: "Yhdestä asiakkaasta moneen tilaukseen, joten FK on orders-taulussa."
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);Moni moneen -suhteen toteuttaminen
Relaatiotietokantaan ei voi tallentaa M:N-suhdetta suoraan. Haastattelijat odottavat vastaukseksi liitostaulua (jota kutsutaan myös silta-, linkki- tai assosiatiiviseksi tauluksi).
Opiskelijat ilmoittautuvat useille kursseille, ja kullakin kurssilla on useita opiskelijoita. Luokaa enrollments-taulu, jonka avain muodostuu molemmista viiteavaimista. Näin M:N-suhde ratkaistaan kahdeksi 1:N-suhteeksi.
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
title VARCHAR(100)
);
CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrolled_at DATE,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);Liitostaulu voi sisältää tietoja
Yleinen jatkokysymys kuuluu: "Mihin tallennatte opiskelijan kurssista saaman arvosanan?"
Arvosana kuuluu suhteeseen, ei yksin opiskelijalle tai kurssille. Siksi se tallennetaan liitostauluun. Tätä oivallusta haastattelijat testaavat: M:N-suhteen attribuutit kuuluvat siltatauluun.
Esimerkkejä ovat ilmoittautumispäivä, arvosana, tilausrivin määrä ja rooli projektijäsenyydessä.
ALTER TABLE enrollments
ADD COLUMN grade CHAR(2);
-- grade describes THIS student in THIS course,
-- so it belongs on the junction tableYksi yhteen -suhteen toteuttaminen
1:1-suhteet ovat harvinaisempia. Ne toteutetaan antamalla riippuvalle taululle viiteavain, joka on samalla uniikkiavain (usein itse perusavain).
Esimerkiksi user- ja user_profile-tauluissa voi olla laajennettuja, valinnaisia tietoja. Kun user_id tehdään profiilitaulun perusavaimeksi, taataan enintään yksi profiili käyttäjää kohden.
CREATE TABLE users (
user_id INT PRIMARY KEY,
email VARCHAR(255)
);
CREATE TABLE user_profiles (
user_id INT PRIMARY KEY, -- 1:1 enforced here
bio TEXT,
avatar_url VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES users(user_id)
);Valinnaisuus ja osallistuminen
Kardinaliteetilla on toinenkin haastattelijoita kiinnostava ulottuvuus: valinnaisuus (jota kutsutaan myös osallistumiseksi).
- Pakollinen: jokaisella tilauksella on oltava asiakas, joten
customer_idonNOT NULL. - Valinnainen: käyttäjällä voi olla profiili tai olla olematta, joten suhde voi puuttua.
Pakollinen osallistuminen ilmaistaan viiteavaimen NOT NULL-rajoitteella. NULL-kelpoisuuden mainitseminen osoittaa, että ajattelette todellisia rajoitteita etteivät vain rakenteita.
Itseensä viittaavat suhteet
Jotkin suhteet yhdistävät entiteetin itseensä. Työntekijällä on esimies, joka on myös työntekijä, ja luokalla on isäntäluokka.
Tämä mallinnetaan viiteavaimella, joka viittaa samaan tauluun. Haastattelijat odottavat tätä organisaatiokaavioissa ja puumaisissa rakenteissa, ja se sopii luontevasti yhteen itseliitosten ja rekursiivisten CTE:iden kanssa.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT NULL,
FOREIGN KEY (manager_id) REFERENCES employees(employee_id)
);
-- manager_id NULL = top of the hierarchy (e.g. CEO)Pieni mallinnusesimerkki
Harjoitelkaa verbien muuntamista suhteiksi. Tehtävänanto: "Asiakkaat tekevät tilauksia; kukin tilaus sisältää monia tuotteita; tuotteet kuuluvat toimittajille."
- Asiakas 1:N Tilaus (viiteavain customer_id orders-taulussa).
- Tilaus M:N Tuote -> liitostaulu
order_items(jossa on quantity). - Toimittaja 1:N Tuote (viiteavain supplier_id products-taulussa).
Kertokaa jokainen kardinaliteetti ja se, mihin avain sijoitetaan. Tällainen selostus ratkaisee haastattelun.
Esitettävät tarkentavat kysymykset
Haastattelijat arvostavat hakijoita, jotka kysyvät ennen suunnittelua. Hyviä tarkentavia kysymyksiä ovat:
- "Voiko tuote kuulua useammalle kuin yhdelle toimittajalle?" (ratkaisee, onko suhde 1:N vai M:N).
- "Onko jokaisessa tilauksessa oltava vähintään yksi tilausrivi?" (osallistuminen).
- "Tarvitsemmeko historiatiedot vai vain nykyisen tilan?" (vaikuttaa lisätaulujen tarpeeseen).
Vastaukset muuttavat kardinaliteettia ja taulujen määrää, joten älkää koskaan olettako. Kysymysten esittäminen osoittaa kokemusta.
Pikatarkistus
Mallinnatte opiskelijoita ja kursseja: kukin opiskelija voi suorittaa useita kursseja ja kullakin kurssilla voi olla useita opiskelijoita.
Kertaus: ER-mallinnus ja kardinaliteetti
Voitte nyt ratkaista avoimen skeemasuunnittelutehtävän:
- Muunnetaan substantiivit entiteeteiksi/attribuuteiksi ja verbit suhteiksi.
- 1:N: vierasavain tulee N-puolelle.
- M:N: liitostaulu sisältää molemmat vierasavaimet sekä mahdolliset suhteen attribuutit.
- 1:1: riippuvaisessa taulussa käytetään jaettua/yksikäsitteistä avainta.
- Käyttäkää
NOT NULL-määrettä pakollisen osallistumisen ilmaisemiseen ja hierarkioissa itseensä viittaavia vierasavaimia. - Esittäkää tarkentavat kysymykset ennen kuin päätätte kardinaliteetista.
Opi Valmistautuminen ohjelmointihaastatteluihin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 90
- Oppitunnit
- 360
Usein kysytyt kysymykset
Onko oppitunti ”ER-mallinnus ja suhteiden kardinaliteetti” ilmainen?
Kyllä – oppitunnin ”ER-mallinnus ja suhteiden kardinaliteetti” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Valmistautuminen ohjelmointihaastatteluihin-kurssin, päivitä CoddyKit PROhon. Valmistautuminen ohjelmointihaastatteluihin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”ER-mallinnus ja suhteiden kardinaliteetti”?
Vaatimusten muuntaminen entiteeteiksi, suhteiksi ja liitostauluiksi. Harjoittelet Valmistautuminen ohjelmointihaastatteluihin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Valmistautuminen ohjelmointihaastatteluihin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Valmistautuminen ohjelmointihaastatteluihin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”ER-mallinnus ja suhteiden kardinaliteetti”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Valmistautuminen ohjelmointihaastatteluihin-oppitunnilla?
Kyllä. Jokainen Valmistautuminen ohjelmointihaastatteluihin-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Normalisointi 3NF:ään asti
- ER-mallinnus ja suhteiden kardinaliteetti
- Tähtiskeema ja tietovaraston suunnittelu
- Kattava harjoitushaastattelun tehtäväsarja