1. හැඳින්වීම
MySQL හි Schema එකක් නිර්මාණය කිරීමේ හේතුව කුමක්ද?
MySQL හි දත්ත සමුදා සමඟ වැඩ කරන විට, “schema එකක් නිර්මාණය කරන්න” යන වාක්යය ඔබට හමුවී තිබේ හැක.
Schema එකක් යනු දත්ත සමුදායක ව්යුහය හෝ සැලැස්ම නියෝජනය කරන අතර, වගු, දර්ශන, සුචක, ට්රිගර් වැනි වස්තු එකතුවක් ලෙස පවතී. MySQL හි “schema” සහ “database” යන පද දෙකම සමාන අර්ථයක් ගනී. කෙසේ වෙතත්, වෙනත් RDBMS (Relational Database Management Systems) සමඟ සසඳන විට, ඒවායේ අර්ථය වෙනස් විය හැක.
මෙම ලිපියේ, MySQL හි schema එකක් කෙසේ නිර්මාණය කරන්නේ, වැදගත් සැලකිලිමත් කරුණු, සහ ප්රායෝගික හොඳ පුරුදු මාර්ගෝපදේශයන් පියවරෙන් පියවර විස්තර කරමු. විශේෂයෙන්ම ආරම්භකයන් සඳහා, “Schema එකක් කියන්නේ මොනවාද?” සහ “එකක් කෙසේ නිර්මාණය කරන්නේ?” යන ප්රශ්න පැහැදිලි කරයි.
ඉක්මන් සාරාංශය: Schema සහ Database අතර වෙනස
MySQL හි, “schema එකක් නිර්මාණය කිරීම” යනු “දත්ත සමුදායක් නිර්මාණය කිරීම” යන අර්ථය ගනී.
කෙසේ වෙතත්, Oracle සහ PostgreSQL වැනි වෙනත් දත්ත සමුදා පද්ධති වල, “schema” යනු දත්ත සමුදායක් තුළ ඇති තාර්කික කණ්ඩායම (namespace) එකක් වන අතර, එය දත්ත සමුදාය සමඟ සමාන නොවේ. මෙම වෙනස තේරුම් ගැනීම, වෙනත් RDBMS වේදිකා වෙත මාරු වීම හෝ ඒවා සමඟ ඒකාබද්ධ කිරීමේදී ගැටළු වැළැක්වීමට උපකාරී වේ.
මෙම ලිපියේ ඉලක්ක පිරිස සහ අරමුණු
මෙම ලිපිය පහත පිරිස සඳහා ලියන ලද්දේය:
- MySQL පළමු වරට භාවිතා කරන ආරම්භකයන්
- Schema ගොඩනැගීමේ මූලික කරුණු සහ ක්රියාවලිය තේරුම් ගැනීමට කැමති අය
- ව්යාපාරික ව්යාපෘතිවල MySQL භාවිතා කිරීමට සැලසුම් කරන ඉංජිනේරුවන් හෝ සිසුන්
මෙම ලිපිය අවසන් වන විට, ඔබ MySQL හි schema ගොඩනැගීමට සහ ඒවා අක්ෂර සංකේතනය සහ කළමනාකරණ පුරුදු පිළිබඳ අවබෝධය සමඟ නිවැරදිව නිර්මාණය කරගත හැකි වනු ඇත.
2. Schema එකක් කියන්නේ මොනවාද?
Schema එකේ මූලික සංකල්පය
Schema යනු දත්ත සමුදායක ව්යුහය හෝ සැලැස්ම නියෝජනය කරන රාමුව වේ.
විශේෂයෙන්, schema එකේ වස්තු අතර වගු, දර්ශන, සුචක, ගබඩා කරන ක්රම (stored procedures), සහ ට්රිගර් වැනි දත්ත කළමනාකරණය සහ සැකසීම සඳහා භාවිතා කරන අංග ඇතුළත් වේ.
MySQL හි “schema = database” වන අතර, ඔබ CREATE DATABASE විධානය භාවිතා කර schema එකක් නිර්මාණය කරයි. වෙනත් වචනයෙන් කියනවා නම්, MySQL හි “schema” යන පදය ඇසූ විට, එය දත්ත සමුදායමය යැයි සිතිය හැක.
CREATE DATABASE sample_db;
මෙම සරල විධානය භාවිතා කර, ඔබට schema (දත්ත සමුදාය) එකක් නිර්මාණය කළ හැක.
වෙනත් RDBMS වල Schema සමඟ වෙනස්කම්
MySQL හි schema සහ database සමාන වුවත්, වෙනත් RDBMS වල ඒවායේ අර්ථය වෙනස් විය හැක.
| Database System | Definition of Schema |
|---|---|
| MySQL | Refers to the entire database (synonymous) |
| PostgreSQL | A namespace within a database (multiple schemas allowed) |
| Oracle | A data storage unit corresponding to a user (user = schema) |
උදාහරණයක් ලෙස, PostgreSQL එකේ එක දත්ත සමුදායක් තුළ බහු schema ගොඩනැගිය හැකි අතර, ඒවා සෑම එකක්ම ස්වාධීන namespace ලෙස ක්රියා කරයි. එයට විරුද්ධව, MySQL එකේ එක් දත්ත සමුදායක් සඳහා එක් schema එකක් පමණක් භාවිතා කරයි. මෙම වෙනස පද්ධති සැලසුම් සහ පෝර්ටබිලිටි සඳහා වැදගත් වේ.
Schema ගොඩනැගීමේ භූමිකාව සහ ප්රතිලාභ
Schema ගොඩනැගීමෙන් පහත ප්රතිලාභ ලැබේ:
- සංවිධානයකරණ ව්යුහය : වගු සහ දර්ශන තාර්කිකව කණ්ඩායම් කිරීමෙන් කළමනාකරණය පහසු වේ
- ප්රවේශ පාලනය : සෑම schema එකකටම අවසර සැකසීමෙන් ආරක්ෂාව වැඩි වේ
- පැහැදිලි දත්ත ආකෘතිය : නිර්මාණය කිරීමේදී තාර්කික ව්යුහය නියම කිරීමෙන් කණ්ඩායම් සංවර්ධනයේ කාර්යක්ෂමතාව වැඩි වේ
MySQL හි මෙම ප්රතිලාභ බොහෝවිට දත්ත සමුදා මට්ටමේ පමණක් පෙනේ, එබැවින් මෙය ප්රායෝගික පරිසරයන්හි අත්යවශ්ය සංකල්පයක් වේ.
3. MySQL හි Schema එකක් කෙසේ නිර්මාණය කරන්නේ
මූලික Schema නිර්මාණය: CREATE DATABASE විධානය
MySQL හි schema (= දත්ත සමුදාය) එකක් නිර්මාණය කිරීමේ අතිමහත් මූලික ක්රමය CREATE DATABASE ප්රකාශය භාවිතා කිරීමයි. මූලික ව්යුහය මෙසේය:
CREATE DATABASE schema_name;
උදාහරණයක් ලෙස, “sample_db” නමැති schema එකක් නිර්මාණය කිරීම:
CREATE DATABASE sample_db;
මෙම විධානය ක්රියාත්මක කිරීමෙන් sample_db නමැති හිස් දත්ත සමුදායක් (schema) එකක් සාදයි. මෙය MySQL හි schema නිර්මාණයේ ආරම්භක පියවරය වේ.
IF NOT EXISTS භාවිතයෙන් නකල්පත් දෝෂ වැළැක්වීම
දැනටමත් පවතින schema එකක් නැවත නිර්මාණය කිරීමට උත්සාහ කළහොත් දෝෂයක් සිදුවේ. IF NOT EXISTS විකල්පය භාවිතා කිරීමෙන් එය වැළැක්විය හැක:
CREATE DATABASE IF NOT EXISTS sample_db;
මෙම ව්යුහය විශේෂයෙන් සංවර්ධන පරිසරයන්හි, ස්ක්රිප්ට් එකක් නැවත නැවත ක්රියාත්මක විය හැකි අවස්ථාවලදී ප්රයෝජනවත් වේ.
අක්ෂර සංකේතනය සහ සංග්රහය සැකසීම
බහුභාෂා දත්ත (ජපන් පාඨය ඇතුළත්) සැකසීමේදී, character set සහ collation නිරූපණය කිරීම ඉතා වැදගත් වේ. වැරදි සැකසුම් මොජිබාකේ (අසම්මත පාඨ) හෝ අනුක්රමණික ගැටළු ඇති කරයි.
CREATE DATABASE sample_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
නිර්දේශිත සැකසුම්:
- CHARACTER SET :
utf8mb4(බහුභාෂා දත්ත සහ එමොජි ඇතුළත් කරයි) - COLLATE :
utf8mb4_general_ci(වේගවත් නමුත් අඩු කඩිනම්),utf8mb4_unicode_ci, හෝutf8mb4_0900_ai_ci(MySQL 8.0+ සඳහා නිර්දේශිත)
මෙම සැකසුම් අනාගත අක්ෂර සංකේතන ගැටළු වැළැක්වීමට උපකාරී වේ.
CREATE SCHEMA ගැන කුමක්?
MySQL CREATE SCHEMA විධානයටත් සහය දක්වයි, එය CREATE DATABASE සමඟ සම්පූර්ණයෙන් එකම ලෙස ක්රියා කරයි. දෙකම භාවිතා කළ හැකි නමුත් MySQL ක්රියාකාරකම් වල CREATE DATABASE වැඩි වශයෙන් භාවිතා වේ.
CREATE SCHEMA IF NOT EXISTS sample_db
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
ඔබේ කැමැත්ත අනුව තෝරා ගත හැක, නමුත් කණ්ඩායමක් හෝ ව්යාපෘතියක් තුළ සමාන්යතාවය රැක ගැනීම නිර්දේශිත වේ.
4. ස්කීමා නිර්මාණය කිරීමේදී හොඳම පුරුදු ක්රම
MySQL හි ස්කීමා නිර්මාණය කිරීම සරලයි, නමුත් වාස්තුක පරිසරවල, දිගුකාලීන මෙහෙයුම් සැලසුම් සහ කළමනාකරණය අත්යවශ්ය වේ.
ස්ථාවර නාමකරණ නියමයන් ස්ථාපනය කරන්න
ස්කීමා නාම, වගු නාම, තීර නාම සඳහා පැහැදිලි සහ ස්ථාවර නාමකරණ නීති යොදන්න. අස්ථාවර නාමකරණය නඩත්තු සහ විස්තාරණය කිරීමේදී ගැටළු ඇති කරයි.
උදාහරණ නාමකරණ නීති
- snake_case භාවිතා කරන්න (
sample_table) - වගු නාමය නාමපද භාවිතයෙන් නාමකරණය කරන්න (උදාහරණය,
users,orders) - අත්යවශ්ය නොවන උපසර්ග වලින් වැළකී සිටින්න
ඔබේ කණ්ඩායමේ නාමකරණ නියමයන් ලේඛනය කර බෙදා ගන්න.
අක්ෂර සංකේතනය පැහැදිලිව නියම කරන්න
පෙර සඳහන් කළ පරිදි, අක්ෂර සංකේතනය මූලික වේ. බහුභාෂා ව්යාපෘති සඳහා, utf8mb4 පැහැදිලිව නියම කරන්න.
CREATE DATABASE example_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
පැරණි utf8 3 බයිට් පමණක් සහය දක්වයි, එය එමොජි හෝ විශේෂ අක්ෂර සමඟ ගැටළු ඇති කරයි. නව ව්යාපෘති වල සෑම විටම utf8mb4 භාවිතා කරන්න.
අවසර සැකසුම් සැලසුම් කරගන්නා විට අවධානයෙන්
ස්කීමා නිර්මාණය කිරීමෙන් පසු, සුදුසු පරිශීලක අවසර ලබා දෙන්න. සියලු පරිශීලකයන්ට සියලු අවසර ලබා දීම ආරක්ෂාත්මක අවදානමකි.
GRANT ALL PRIVILEGES ON example_db.* TO 'app_user'@'localhost';
රෝල්-අධාරිත අවසර සැලසුම ගැන සිතන්න:
| Role | Example Privileges |
|---|---|
| Administrator | All privileges (CREATE, DROP, GRANT, etc.) |
| Application | SELECT, INSERT, UPDATE, etc. |
| Read-only | SELECT only |
REVOKE සහ SHOW GRANTS භාවිතයෙන් ඔබට අවසර කළමනාකරණය කළ හැක.
මුල් ස්කීමා ව්යුහය පිටපත් ගන්න
දත්ත නොමැතිව සිටියත්, මුල් ස්කීමා ව්යුහය අපනයනය කර සුරකින්නා ඉතා ප්රයෝජනවත් වේ.
mysqldump -u root -p --no-data example_db > schema_structure.sql
මෙය ඔබට ව්යුහය වෙනත් පරිසරවලට පහසුවෙන් යෙදීමට ඉඩ සලසයි.

5. ස්කීමා කළමනාකරණය සහ මෙහෙයුම්
MySQL හි ස්කීමා නිර්මාණය කිරීමෙන් පසු, එය නිසි ලෙස කළමනාකරණය සහ මෙහෙයුම් කිරීම සඳහා ඔබට අවශ්ය කුසලතා තිබිය යුතුය.
5.1 ස්කීමා ලැයිස්තුව පෙන්වන්න
පවතින ස්කීමා (දත්ත සමුදා) බැලීමට:
SHOW DATABASES;
මෙය සියලු ස්කීමා, information_schema සහ mysql වැනි පද්ධති දත්ත සමුදා ඇතුළත්, පෙන්වයි.
5.2 ස්කීමා භාවිතා (මාරු) කරන්න
ක්රියාකාරී ස්කීමා නිරූපණය කිරීම සඳහා:
USE sample_db;
මෙය සැසියේ පසුබැසීම sample_db වෙත මාරු කරයි.
5.3 ස්කීමා මකා දමන්න
භාවිතා නොකළ ස්කීමා මකා දමීමට:
DROP DATABASE sample_db;
අවවාදය:
මෙම ක්රියාව පසුපසට හැරවිය නොහැක. ස්කීමා තුළ ඇති සියලු වගු, දර්ශන, සහ දත්ත මකා දමනු ලැබේ.
ආරක්ෂාව සඳහා:
DROP DATABASE IF EXISTS sample_db;
5.4 වගු සහ දර්ශන කළමනාකරණය
වගුවක් සාදන්න
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255)
);
වගු ලැයිස්තුව
SHOW TABLES;
දර්ශනයක් සාදන්න
CREATE VIEW active_users AS
SELECT id, name
FROM users
WHERE active = 1;
දර්ශන ලැයිස්තුව
SHOW FULL TABLES WHERE Table_type = 'VIEW';
වගු හෝ දර්ශන මකා දමන්න
DROP TABLE users;
DROP VIEW active_users;
නිවැරදි සකස්කිරීමේ (schema) කළමනාකරණය පද්ධතියේ විස්තාරණය සහ නඩත්තුකිරීම ඉතාමත් වැඩිදියුණු කරයි.
6. බහුභාෂා දත්ත ආරක්ෂිතව හසුරවීම
බහුභාෂා පරිසරවල නවකයන් මුහුණ දෙන සාමාන්යතම ගැටළුව “mojibake” (අසම්පූර්ණ අක්ෂර) වන අතර, අකුරු කේතනයේ අසමතුලිත සැකසුම් නිසා සිදුවේ.
Mojibake හි හේතු
කේතනයේ සැකසුම් තුනක් තුළ එකම විය යුතුය:
- දත්ත ගබඩාව (schema) කේතනය
- වගුව/තීරුව කේතනය
- ගනුදෙනුකරු-සේවාදායක සන්නිවේදන කේතනය
මෙම සැකසුම් වෙනස් නම්, ඇතුළත් කරන ලද පෙළ “???” ලෙස පෙන්විය හැක, අදහස් කරන ලද අක්ෂර වෙනුවට.
නිර්දේශිත කේතනයේ සැකසුම්
දත්ත ගබඩාවක් (Database) නිර්මාණය කරන විට:
CREATE DATABASE japanese_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
වගුවක් (Table) නිර්මාණය කරන විට:
CREATE TABLE messages (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ගනුදෙනුකරු සැකසුම් පරීක්ෂා කරන්න:
SHOW VARIABLES LIKE 'character_set%';
අවශ්ය නම්:
SET NAMES utf8mb4;
සේවාදායක සැකසුම් (my.cnf / my.ini)
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
වෙනස්කම් සිදු කිරීමෙන් පසු MySQL නැවත ආරම්භ කරන්න.
Mojibake සිදුවේ නම්
SHOW CREATE TABLE table_name;භාවිතා කර කේතනය පරීක්ෂා කරන්න;- ගනුදෙනුකරු
utf8mb4භාවිතා කරන බව සහතික කරන්න; - පැහැදිලි කේතනය සමඟ (උදා:
--default-character-set=utf8mb4) ඩම්ප් කර නැවත පිහිටුවන්න;
7. නිතර අසන ප්රශ්න (FAQ)
Q1. MySQL හි “schema” සහ “database” එකම දේද?
A1. ඔව්. MySQL හි, ඒවා සමාන වශයෙන් භාවිතා වේ. CREATE DATABASE සහ CREATE SCHEMA එකම ක්රියාවලියක් කරයි.
Q2. අකුරු කේතනය සඳහන් නොකළහොත් කුමක් වේද?
A2. සේවාදායකයේ පෙරනිමි කේතනය යොදා ගනු ලැබේ. එය latin1 හෝ utf8 විය හැක, එය mojibake සිදු කරයි. සෑම විටම utf8mb4 පැහැදිලිව සඳහන් කරන්න.
Q3. පසුකාලීනව කේතනය වෙනස් කළ හැදුවද?
A3. ඔව්, පහත පරිදි භාවිතා කර:
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
කෙසේ වෙතත්, පවතින වගු වෙනම වෙනස් කළ යුතුය.
Q4. schema එකක් පිටපත් (backup) කර ගැනීමට කෙසේද?
mysqldump -u root -p --databases sample_db > sample_db.sql
පිළිගැනීම:
mysql -u root -p < sample_db.sql
Q5. schema ප්රවේශය විශේෂිත පරිශීලකයන්ට සීමා කිරීමට කෙසේද?
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON sample_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
නිසි ආරක්ෂාව සඳහා පරිශීලක භූමිකා අනුව අවසර ලබා දෙන්න.


