Мәліметтер базасын жобалау негіздері: көп-көп (К:К) қатынасты қалай құруға болады және бұл қатынас түрі қашан қажет, қарапайым мысалмен түсіндірілген
Қашан "көп-көп" (К:К) қатынасы қажет?
Кесте A-дағы кез келген жазбаны кесте B-дағы бірнеше жазбамен байланыстырғымыз келгенде, және сол уақытта кесте B-дағы кез келген жазбаны кесте A-дағы бірнеше жазбамен байланыстырғымыз келгенде.
Онлайн дүкен үшін мәліметтер базасын жобалау барысында дәл осы жағдайдың нақты мысалын қарастырайық: бізде пайдаланушылар мен өнімдер бар.
Пайдаланушы сатып алу алдында виртуальды шеңберге өнімдерді қосады. Бұл архитектуралық тұрғыдан не білдіреді? Бір пайдаланушы өз шеңберіне бірнеше түрлі өнімді қосуы мүмкін. Бірге көптеген? Қорытындыға асықпаңыз: бірдей өнімді мүлдем әртүрлі пайдаланушылар қосуы мүмкін!
Енді, қандай өнімдердің қай пайдаланушылардың шеңберіне қосылғаны туралы мәліметтерді ең тиімді түрде қалай сақтауымыз керек? "Көп-көп" қатынасы көмектеседі!
"Көп-көп" (К:К) қатынасын қалай құруға болады?
Біз қосымша кесте құруымыз керек, және біз онда қатынастарды белгілейміз. Бұған кестеде тек екі баған қажет: бірінші бағанда кесте A-дағы (біздің жағдайда - пайдаланушы) жазбаның бірегей идентификаторы (id) болады, ал екінші бағанда кесте B-дағы (біздің жағдайда - өнім) id болады. Кестенің атын мағыналы түрде атауды ұсынамыз - cart.
Көп жағдайда, К:К қатынасы кестелері шартты түрде былай аталады: nameOfTableA_nameOfTableB. Бірақ, егер мағыналы атау берудің айқын екенін көрсеңіз, мен оны мәні бойынша атауды ұсынамын.
"Көп-көп" қатынасы осылай көрінеді:
"Көп-көп" (К:К) қатынасымен қалай жұмыс істеуге болады?
Мысалды пайдалана отырып, оны анықтайық. Пайдаланушы өнімді өз шеңберіне қосады:
INSERT into cart (user, product) VALUES ( user.id, product.id );
Осылайша әр түрлі пайдаланушылар әр түрлі өнімдерді қосады. Енді біз белгілі бір пайдаланушының шеңберінің мазмұнын ақылды түрде ала аламыз:
SELECT
p.id,
p.name,
p.price
FROM
product p,
cart c
WHERE
c.product = p.id
AND
c.user = ?;
Сұрақ белгісі пайдаланушының бірегей идентификаторы (id) мен алмастырылып, сол пайдаланушының шеңберінде бар өнімдер туралы барлық мәліметтерді аламыз.
Егер пайдаланушы шеңберден өнімді алып тастаса, біз тек өнім id және пайдаланушы id сәйкес келетін жазбаны шеңбер кестесінен жоюымыз қажет. Бұл өте оңай:
DELETE FROM cart WHERE user = user.id AND product = product.id;
Реляциялық базалардың негізгі күштілігі - пайдаланушының шеңберінде сол өнім туралы барлық мәліметтерді сақтау орнына, өнімнің тек бірегей жазба номерін ғана сақтай аламыз. Және осы бірегей номердің арқасында, біз өнім туралы барлық мәліметтерді шығара аламыз, және бұл базадағы кез келген жазбаға қатысты.
Біз сонымен қатар, сұраныс арқылы алған жазбаның басқа қатынастары бойынша ақпаратты алуымыз мүмкін. Осылайша, біз деректердің қайталануын жоямыз, яғни, деректерді нормаға келтіреміз.
Көршілес мақалаларда реляциялық деректер қатынасының басқа түрлері туралы ақпаратты таба аласыз: бір-біріне, және бір-бір, сондай-ақ нормализация туралы нақтырақ мәліметтер. Егер сіз мәліметтер базасының архитектурасын жобалауда бастауыш болсаңыз, міндетті түрде бұл ақпаратпен танысыңыз.
Егер пайдалы болса, мені лайкпен/комментариймен/абонементпен қолдай аласыз менің білім беру YouTube арнам арқылы.