
Информатика: өз цифрлық көмекшімізді жасаймыз 51-сабақ (барлығы 72)
Байланысқан кестелер, кілттер және қайталанбайтын жазбалар
Тапсырма мен сабақ жазбасын кілт арқылы байланыстырып, бос жерге сілтемені болдырмаймыз.
Картадағы орнымыз
72 сабақтың 51-сі, «Деректер, кестелер және дерекқорлар» блогы (47–54). Үш ойдан алынған тапсырмасы бар 1.1 көмекшісін жалғастырамыз. Блок соңында жазбалар жергілікті SQLite ішінде сақталып, тексерілген еске салу ережелері өзгермейді.
Жағдай және сұрақ
Әр сабақ жолына «Кітап оқу» атауын қайта жазсақ, бір таңбадағы қате жаңа тапсырма бардай көрсетеді. Атауды бір рет сақтап, ID арқылы сілтеме жасаған сенімдірек.
Жаңа сөздерді анық түсінейік
Дерекқор — оқу мен жазу ережелері бар ұйымдасқан қойма. Реляциялық кесте бір түрлі нысанды сипаттайды: бізде tasks және study_sessions. Бастапқы кілт кестеде қайталанбайды: task_id не session_id. Сыртқы кілт study_sessions.task_id бар тапсырмаға ғана сілтейді. Бірден көпке байланысы: бір тапсырманың көп сабағы болуы мүмкін, әр сабақ бір тапсырмаға тиесілі. Күндегі NULL — «күн берілмеген», бос мәтін не нөлінші күн емес.
Сабақтың тірек сигналы
Сызбаны солдан оңға оқыңыз. Әр жебенің кірісін, өзгерісін және тексеруін айтыңыз. Үшінші қадамды жауып, нәтижесін болжаңыз. Содан соң CSV, SQL не есептегі тиісті жолды табыңыз: сурет нақты сан мен байланысты алмастырмауы керек.
Қадамдап талдаймыз
Сол жаққа үш тапсырма, оң жаққа төрт сабақты салыңыз. s-01, s-02 → t-01; s-03, s-04 → t-03; t-02 жебесіз қалады. SQLite-де бастапқы кілт пен REFERENCES tasks(task_id) бар екі кесте жасаңыз. Python-дағы әр байланыста PRAGMA foreign_keys = ON қосыңыз: тексеру өзінен өзі қосылған деп болжауға болмайды. t-99 енгізу қате беруі тиіс.
Болжаңыз және тексеріңіз
Алдымен жол ретіне дейін нақты күтілетін нәтижені жазыңыз. Кодты step-05 бумасынан орындап, таңба бойынша салыстырыңыз. Бір кірісті өзгертіп, «болжау — іске қосу — түсіндіру» айналымын қайталаңыз. Мысал тек көрсетілген ережені дәлелдейді; ойдан алынған деректі нақты адамдар өлшеміне айналдырмайды.
import sqlite3
db = sqlite3.connect(":memory:")
db.execute("PRAGMA foreign_keys = ON")
db.execute("CREATE TABLE tasks (task_id TEXT PRIMARY KEY)")
db.execute("CREATE TABLE sessions (task_id TEXT REFERENCES tasks(task_id))")
print(db.execute("PRAGMA foreign_keys").fetchone()[0])
db.close()
Күтілетін нәтиже
1
Қатені табыңыз
Екі сабақтағы бірдей task_id — қате қайталану емес, рұқсат етілген байланыс. Қайталану — бір session_id не бір task_id міндетінің тағы жазылуы. Сыртқы кілт тексеруі қосылған байланыста ғана жұмыс істейді.
Жобаға енгізілетін өзгеріс
step-05/data_store.py ішінде екі кесте, шектеулер және тапсырма бойынша сабақ іздейтін индекс бар. Импорт жаңа уақытша файлда өтеді: тексеру бітпесе, дайын дерекқор пайда болмайды.
Тапсырма және дәлел
Сұлбадағы кілттерді атаңыз. s-05,t-99 қоссаңыз, қандай ереже іске қосылады? t-02 сабағы болмауы неліктен байланыс қатесі емес?
Жаңа жағдайға көшіру
Кітапханада books пен loans кестелері бар. Бір кітап бірнеше рет берілсе, сыртқы кілт қай кестеде тұрады? Қандай жолға жол берілмейді?
1, 7 және 30 күннен кейін қайталау
1 күннен кейін сызбаны жатқа салып, қарапайым ұқсастық жұмыс істемейтін жағдайды атаңыз. 7 күннен кейін жаңа кестені мәтінсіз досыңызға түсіндіріп, соңғы сабақтағы он сұрақтың кемінде жетеуіне жауап беріңіз. 30 күннен кейін уақытша бумаға импорт жасап, үш тапсырма, төрт сабақ, 70 минут және өзгермеген еске салуды тексеріңіз. Түсініксіз терминді жазып, алғашқы анықтамасына оралыңыз.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.