Өтпелі тәуелділіктерден аулақ болу Нормализацияны қамтамасыз етіңіз
Деректер базасында транзитивті тәуелділік функционалдық тәуелділікті тудыратын бір кестедегі мәндер арасындағы жанама қатынас болып табылады. Үшінші Қалыпты Пішіннің (3NF) нормалау стандартына жету үшін сіз кез-келген өтпелі тәуелділікті жоюыңыз керек.
Өз табиғаты бойынша транзиттік тәуелділік олардың арасындағы функционалдық тәуелділікке ие үш немесе одан да көп атрибуттарды (немесе дерекқор бағаналарын) талап етеді, бұл кестеде А бағаны B бағанына аралық B бағаны арқылы сүйенеді.
Мұның қалай жұмыс істейтінін көрейік.
Өтпелі тәуелділік үлгісі
AUTHORS
Автор_ID | Автор | Кітап | АвторNationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Эндер ойындары | АҚШ |
Auth_001 | Orson Scott Card | Эндер ойындары | АҚШ |
Auth_002 | Маргарет Атвуд | Handmaid's Tale | Канада |
Жоғарыдағы AUTHORS мысалында:
- Кітап → Автор : Міне, кітап төлсипаты Автор атрибутын анықтайды. Егер сіз кітаптың атын білсеңіз, автордың атын біле аласыз. Дегенмен, автор кітапты анықтамайды, себебі автор бірнеше кітап жаза алады. Мысалы, Орсон Скотт Кардтың автордың есімін білетіндіктен, біз әлі де кітаптың атын білмейміз.
- Авторы Авторлық нақтылық : Сонымен қатар, Автор атрибуты Автордың нақтылығын анықтайды, бірақ басқа жолмен емес; өйткені біз білеміз, бұл азаматтығы авторды анықтай алмайды дегенді білдірмейді.
Бірақ бұл кесте транзиттік тәуелділікті ұсынады:
- Book → Author_Nationality: Егер біз кітаптың атын білсек, онда автордың авторлық бағаны арқылы азаматтығын анықтай аламыз.
Өтпелі тәуелділіктерді болдырмау
Үшінші қалыпты пішінді қамтамасыз ету үшін өтпелі тәуелділікті алып тастайық.
Біз Кітапхана бағанын Авторлар кестесінен алып, бөлек Кітаптар кестесін жасау арқылы бастауға болады:
КІТАПТАР
Book_ID | Кітап | Автор_ID |
---|---|---|
Book_001 | Эндер ойындары | Auth_001 |
Book_001 | Балалардың ақыл-ойы | Auth_001 |
Book_002 | Handmaid's Tale | Auth_002 |
AUTHORS
Автор_ID | Автор | АвторNationality |
---|---|---|
Auth_001 | Orson Scott Card | АҚШ |
Auth_002 | Маргарет Атвуд | Канада |
Бұл оны түзете ме? Енді біздің тәуелділіктерімізді қарастырайық:
КІТАПТАР кестесі :
- Book_ID → Book: Book Book_ID-ке байланысты.
- Осы кестеде басқа тәуелділік жоқ, сондықтан біз жақсы. Автор_ID шетелдік кілті осы кестені AUTHORS кестесіне өзінің негізгі кілтімен Author_ID арқылы байланыстыратынын ескеріңіз . Біз транзитивті тәуелділікті болдырмау үшін, қарым-қатынас дерекқорларының негізгі жобасын құрдық.
AUTHORS кестесі :
- Author_ID → Авторы: Автор Автор_ID-ге байланысты.
- Авторы Авторлық нақтылық: ұлты автормен анықталуы мүмкін.
- Автор_ID → Author_Nationalality: Авторлық құқықтан Автордың атрибуты арқылы анықталуы мүмкін. Бізде әлі де өтпелі тәуелділік бар.
Бұл деректерді қалыпқа келтіру үшін үшінші кестені қосу керек:
COUNTRIES
Country_ID | Ел |
---|---|
Coun_001 | АҚШ |
Coun_002 | Канада |
AUTHORS
Автор_ID | Автор | Country_ID |
---|---|---|
Auth_001 | Orson Scott Card | Coun_001 |
Auth_002 | Маргарет Атвуд | Coun_002 |
Енді кестелердің арасында байланыстыру үшін шетел кілттерін пайдаланатын үш кесте бар:
- BOOK кестесінің авторы Author_ID AUTHORS кестесіндегі авторға кітабын байланыстырады.
- AUTHORS кестесінің Country_ID авторы шетел авторы COUNTRIES кестесіндегі елге сілтеме жасайды.
- COUNTRIES кестесінде шетелдік кілт жоқ, себебі бұл дизайндағы басқа кестеге сілтеме жасаудың қажеті жоқ.
Өтпелі тәуелділіктер неліктен дерекқордың дизайны болып табылады
3NF-ті қамтамасыз ету үшін транзиттік тәуелділіктерді болдырмаудың маңызы қандай? Алғашқы үстелімізді қайтадан қарастырып, оның жасаған мәселелерін қарастырайық:
AUTHORS
Автор_ID | Автор | Кітап | АвторNationality |
---|---|---|---|
Auth_001 | Orson Scott Card | Эндер ойындары | АҚШ |
Auth_001 | Orson Scott Card | Балалардың ақыл-ойы | АҚШ |
Auth_002 | Маргарет Атвуд | Handmaid's Tale | Канада |
Мұндай дизайн деректердің ауытқуларына және сәйкессіздіктерге ықпал етуі мүмкін, мысалы:
- Егер сіз «Балалардың ақыл-ойы» және «Эндер ойындары» атты екі кітапты жойсаңыз, автордың «Орсон Скотт Кард» және оның азаматтығын дерекқордан толығымен жоймақсыз.
- Сіз кітапты қоспайынша дерекқорға жаңа авторды қосуға болмайды; егер автор әлі жарияланбаған болса немесе сіз автордың атын білмесеңіз?
- Егер «Орсон Скотт Кард» өз азаматтығын өзгерткен болса, сіз оны барлық жазбаларда өзгерте аласыз. Бір автормен бірнеше жазбаларды алу дәл емес деректерге әкелуі мүмкін: деректерді енгізу адам оған бірнеше жазбалар бар екенін түсінбейді және деректерді тек бір жазба бойынша өзгертеді?
- Авторды толығымен жоймай-ақ «The Handmaid's Tale» сияқты кітапты жою мүмкін емес.
Бұл тек қалыпқа келтірудің кейбір себептері және өтпелі тәуелділіктерді болдырмау, деректерді қорғау және келісімділікті қамтамасыз ету.