Community project by students of the Faculty of Information Technology, University of Moratuwa, Sri Lanka.

9.7 දත්ත පාදකයක තාර්කික පරිපාටික සටහන සැලසුම් කිරීම (Designs the logical schema of a database)

 

දත්ත පාදකයක තාර්කික පරිපාටික සටහන සැලසුම් කිරීම (Designs the logical schema of a database)

සම්බන්ධක ක්‍රමාණුරූපය (Relational Schema)

මීට පෙර අවස්ථා වලදී අපි කතා කළා, වගුවක් (table) නැත්නම් සම්බන්ධයක් (relation) කියන්නෙ සැබෑ ලෝකේ දකින්න පුළුවන් භූථාරථයක් (entity) කියල. ඒ වගේම, entity එකක් උපලක්ෂණ (attributes) කිහිපයකින් සමන්විත වෙන්න පුළුවන්. ක්‍රමාණුරූපයක් (schema) කියන්නෙ, table එකක් නිරුපණය කරන්න භාවිතා කරන සම්මත අංකනයක් (standard notation). Table එකක් එයට අදාල නමින් සහ, තීරු නාම (column names) හෝ attributes වලින් සමන්විත වෙනවා.

සාමාන්‍යයෙන්, relational schema එකක් අපි නිර්මාණය කරන්නේ ER සටහනක් (ER diagram) යොදා ගෙන. අපි අනිවාර්යයෙන්, යම්කිසි නිශ්චිත දත්ත සමුදාය කළමනාකරණ මෘදුකාංගයක් (database management software) සහ දත්ත අර්ථ දැක්වීමේ භාෂාව (data definition language/DDL) භවිතා කරල database එකක table එකක් නම් කරන්න කලින්, හැම table එකකටම relational schema එකක් ලියන්න ඕන. (DDL ගැන අපි ඉදිරි පාඩම්මාලා වලදී කතා කරනවා)

Relational schema එකක් ලියන්න කලින් මෙනන් මේ නීති අපි අනුගමනය කරන්න ඕන.

  • Relation එකේ නම capital letters වලින් ලිවිය යුතුයි.
  • ප්‍රාථමික මූලය (primary key) යටින් ඉරක් ඇඳලා, අන්‍ය මූල (foreign keys) වැල් අකුරින් ලිවිය යුතුයි.

පහත ER සටහන බලන්න.

ERdiagram

Student සහ Faculty කියන entity දෙකට relational schema එක ලියන්නේ මෙහෙමයි.

STUDENT (Student_id, NIC, Student_name, Student_class, Faculty_id) FACULTY (Faculty_id, Faculty_name, No_of_students);

අදාල attributes අපිට ලියන්න පුළුවන් ඒවාට අනුරුප දත්ත වර්ග (data types) සමග.

STUDENT (Student_id: string, NIC: integer, Student_name: string, Student_class: string, Faculty_id: string) FACULTY (Faculty_id: string, Faculty_name: string, No_of_students: integer); 

සම්බන්ධක උදාහරණ (Relational Instances)

Relational Instance එකක් කියන්නෙ දී ඇති වෙලාවක,සම්බන්ධක දත්ත ගබඩා පද්ධතියක (relational database system) තියන නිශ්චිත පේලි (tuples/records) සමුහයක්. Relational instance එකක, එකම record එක කිහිප වරක් තියෙන්න බැහැ (duplicate records). ඒ වගේම තමයි, relational instance එකක තියන records, schema එකට ගැලපෙන්න ඕන.

පහතින් දැක්වෙන්නෙ, අපි ඉහත සඳහන් කරපු Student සහ Faculty කියන tables හි, relational instances වලට උදාහරණ.

STUDENT

studentTable

වගුව 1

FACULTY

facultyTable

වගුව 2

ප්‍රාථමික මූලය (Primary Key)

Primary key එකක් කියන්නෙ, table එකක tuple එකක් වෙන් කර හදුනාගන්න පුළුවන් attribute එකකට. ඒ වගේම තමයි, database එකක tables අතර සම්බන්දයක් (relation) ගොඩනගන්න අපි මේ primary key එක පාවිච්චි කරනවා. සමහර අවස්ථා වලදී, මේ primary key එක attributes කිහිපයකින් සමන්විත වෙන්න පුළුවන්. ඒ වගේ primary key එකකට අපි කියන්නෙ සංයුක්ත ප්‍රාථමික මූලයක් (composite primary key) කියලා. Primary key එකක් තෝරාගන්න කලින් පහත කරුණු වලට අවදානය යොමු කරන්න.

  • Primary key එකක අගයන් (values) එකිනෙකට වෙනස් විය යුතුයි. (unique)
  • Primary key එකක අභිශුන්‍ය අගයන් (null values) නොතිබිය යුතුයි.
  • එක table එකක් සඳහා තිබිය යුත්තේ එක primary key එකක් පමණයි.

උදාහරණය: ඉහත සඳහන් කළ student table එකේ, Student_id කියන attribute එක, ඒ table එකේ තියන records වෙන්කර හඳුනගන්න අපිට පාවිච්චි කරන්න පුළුවන්. ඒ නිසා, Student_id එක, primary key එක විදියට නම් කරන්න සුදුසු attribute එකක්. නමුත්, Student_name කියන attribute එක primary key එකට සුදුසු නැහැ. ඒකට හේතුව තමයි, එකම නම කිහිප සැරයක් තියෙන්න පුළුවන් නිසා, records වෙන්කර හඳුනගන්න බැහැ.

අන්‍ය මූල (Foreign Keys)

Foreign key එකක් කියන්නෙ, වෙනත් table එකක, primary key එකකට සමුද්දේශ (reference) කරන, යම්කිසි table එකක තියන attribute එකක් (හෝ කිහිපයක්). වෙනත් විදියකට කිව්වොත්, foreign key එකක් පාවිච්චි කරන්නෙ, database එකක tables 2ක් සම්බන්ද කරන්න. ඒ වගේම තමයි, foreign key එකක් දත්ත වල සමුද්දේශක පුර්ණත්වය (referential integrity) පෙන්වන්නත් පාවිච්චි කරනවා. (මේ ගැන වැඩි තොරතුරු අපි මේ පාඩම්මාලාවෙම පසු කොටසෙ සාකච්චා කරනවා)

උදාහරණය: ඉහත උදාහරණයේ Faculty_id කියන attribute එක, Student table එකේ foreign key එක විදියට හැසිරෙනවා. ඒ වගේම, Faculty_id එක පාවිච්චි කරලා Students සහ එයාලට අදාල Faculty එක අපිට සම්බන්ද කරන්න පුළුවන්. Faculty_id කියන්නෙ, Student table එක reference කරන Faculty table එකේ primary key එක.

අපේක්ෂක මූලය (Candidate Key)

Candidate key එකක් කියන්නෙ, table එකක record එකක් වෙන්කර හඳුනගන්න පුළුවන් attribute එකක් හෝ කිහිපයක්. Table එකක candidate keys එකකට වඩා තියෙන්න පුළුවන්. Candidate key එකක, එකිනෙකට වෙනස් values තියෙන්න ඕන වගේම, null values තියෙන්නේ බැහැ. Table එකක තියන candidate keys සියල්ල අතරින් අපි වඩාත් සුදුසු attribute එක primary key එක විදියට තෝරාගන්නවා.

උදාහරණය: ඉහත උදාහරණයේ, Student_id සහ NIC කියන attributes දෙකම අපිට candidate keys විදියට හඳුනගන්න පුළුවන්.

විකල්ප මූලය (Alternate Key)

Candidate keys අතරින් primary key එකක් තෝරගත්තට පස්සේ, ඉතිරිවෙන හැම candidate key එකක්ම alternate key එකක් විදියට හඳුන්වන්න පුළුවන්. Alternate key එකක attribute එකකටත් record එකක් වෙනකර හඳුනගන්න පුළුවන් හැකියාව තියනවා.

උදාහරණය: ඉහත උදාහරණයේ, Student_id එක අපි primary key එක විදියට තෝරගත්තට පස්සේ, NIC කියන candidate key එක alternate key එකක් වෙනවා.

සම්බන්දක දත්ත පුර්ණත්වය (Referential Data Integrity)

හැම table එක ක්ම වලංගු table එකක් (valid table/relation) වෙන්න යම් කොන්දේසි කිහිපයක් අනුගමනය කරන්න ඕන. මේ කොන්දේසි අපි හඳුන්වන්නේ Referential Integrity Constraints නමින්. ප්‍රධාන වශයෙන්, referential integrity constraints 3ක් අපිට පහතින් දක්වන්න පුළුවන්.

  1. මූල අවහිරතා (Key Constraints)
  2. වසම අවහිරතා (Domain Constraints)
  3. සමුද්දේශ පුර්ණත්ව අවහිරතා (Referential Integrity Constraints)

මූල අවහිරතා (Key Constraints)

මෙය, Entity Integrity Constraint ලෙසත් හඳුන්වනවා.

මේ constraints සලකන්නේ table එකක primary key එක පිළිබදව. මෙය වලංගු කරනවා, ‘table එකක අනිවාර්යයෙන් primary key එකක් තිබිය යුතුයි’ යන්න. මෙය තවදුරටත් වලංගු කරනවා,

  • එකිනෙකට වෙනස් අගයන්ගෙන් හැම record එකක්ම සමන්විතවිය යුතු බව සහ,
  • Null values නොතිබිය යුතු බව.

මේ constraints පාවිච්චි කරලා, table එකක record එකක් වෙන්කර හදුනාගන්න පුළුවන් බවට අපි සහතික කරගන්නවා.

වසම අවහිරතා (Domain Constraints)

Domain එකක් කියන්නෙ, යම්කිසි attribute එකකට අපිට පාවිච්චි කරන්න පුළුවන් values වලට. මේ හැම value එකක්ම, එකම data type එකකට අදාලයි.

උදාහරණ: ධන නිඛිල සමුහයක්, a සිට z දක්වා ඉංග්‍රීසි අක්ෂර

මේ domain constraint එකෙන් කියවෙන්නෙ, relational database එකක තියන හැම attribute එකක්ම නම් කරන්න ඕන, යම්කිසි domain එකකට/පරාසයකට (range) යටත්ව කියලා. අපි domain එකක් attribute එකක් සඳහා තීරණය කරද්දී, සැබෑ ලෝකේ සංසිද්දියක් හැමවිටම අදාල කරගන්න ඕන.

උදාහරණ:

  • Age කියන attribute එකක අගයක් කිසිම වෙලාවක 0ට වඩා අඩු වෙන්න බැහැ. ඒ වගේම තමයි, වයස පුර්ණ සංඛ්‍යාවක් වෙන්නත් ඕන. ඒ නිසා, age කියන attribute එකේ domain එක වෙන්නෙ ධන පුර්ණ සංඛ්‍යා කුලකය.
  • දුරකථන අංකයක් හැමවිටම ඉලක්කම් 10කින් සම්විතයි. ඒ වගේම, 0-9ත් අතර ඉලක්කම් වලින් ලියවිය යුතුයි.ඒ නිසා, දුරකථන අංකයක domain එක වෙන්නෙ, 0-9ත් අතර ඉලක්කම් 10 සංඛ්‍යා කුලකය.
  • ඉහත ‘වගුව 1’ හි, Student_id කියන attribute එකේ අගයන් ඉලක්කම් 3කින් ලියවිලා තියනවා. ඒ නිසා, ඇතුලත් කරන හැම Student_id එකක්ම ඉලක්කම් 3කින් ලියවෙන්න ඕන. (මේ දේ තීරණය වෙන්නෙ අපි සලකන සැබෑ ලෝකේ සිද්දියත් සමඟ. උදාහරණයක් විදියට, වෙනත් පාසලක Student_id එකක් ඉලක්කම් 6කින් ලියැවෙන්න පුළුවන්. ඒ වගේ අවස්ථාවක Student_id එක ඉලක්කම් 6කින් අපි ලියන්න ඕන.)

සමුද්දේශක පුර්ණත්ව අවහිරතා (Referential Integrity Constraints)

මේ constraints සලකන්නේ foreign keys පිළිබඳව. මේ constraint එකෙන් කියවෙනෙ, foreign key එකක value එකක්, ඊට අදාල primary key එකේ අගයක් විය යුතු බව හෝ එය null value එකක් විය යුතු බව. Foreign key එකක null value එකක් තියෙන්න පුළුවන් වෙන්නේ, යම්කිසි record එකක් relation එකක් ගොඩනගල තියන තවත් table එකක් සමඟ කිසිම සම්බන්දයක් නැති අවස්ථාවකදී හෝ, ඒ සම්බන්දතාවය අපි නොදන්නවා නම් පමණයි.

උදාහරණය: Student table එකේ තියන Faculty_id values, Faculty table එකේ තියන Faculty_id valuesම විය යුතුයි. මේ column එකේ value එකක් null වෙන්න පුළුවන් වෙන්නෙ, යම්කිසි student කෙනෙක් කිසිම faculty එකක් යටතේ නැති අවස්ථාවක.

Leave a Reply

Your email address will not be published. Required fields are marked *