මොඩියුලය 2

දත්ත සමුදාය සැලසුම් කිරීම සහ පිහිටුවීම


1 එන්ටිටි (Entities) තේරුම් ගැනීම

දත්ත සමුදායක් නිර්මාණය කිරීමට පෙර, අපට ගබඩා කිරීමට අවශ්‍ය දත්ත මොනවාදැයි හඳුනාගත යුතුය. මෙම ප්‍රධාන දත්ත කාණ්ඩ "එන්ටිටි" ලෙස හැඳින්වේ. අපගේ සුපිරි වෙළඳසැල් පද්ධතිය සඳහා වන ප්‍රධාන එන්ටිටි නම්:

  • නිෂ්පාදන (Products): විකිණීමට ඇති භාණ්ඩ (නම, මිල, ප්‍රමාණය).
  • පරිශීලකයින් (Users): පද්ධතිය භාවිතා කරන අය (පරිපාලක, අයකැමි).
  • විකුණුම් (Sales): සෑම ගනුදෙනුවක්ම (දිනය, මුළු මුදල).
  • ප්‍රවර්ග (Categories): නිෂ්පාදන වර්ගීකරණය (එළවළු, පළතුරු, බීම).
  • සැපයුම්කරුවන් (Suppliers): භාණ්ඩ සපයන සමාගම්.

සෑම එන්ටිටියක්ම දත්ත සමුදායේ වෙනම වගුවක් (table) බවට පත් වේ.

2 දත්ත සමුදා සැලැස්ම (ER Diagram)

Entity-Relationship (ER) රූපසටහනක් යනු අපගේ වගු (එන්ටිටි) සහ ඒවා අතර ඇති සම්බන්ධතා දෘශ්‍යමය වශයෙන් පෙන්වන සැලැස්මකි. මෙය නිවසක් සෑදීමට පෙර අඳින ලද සැලැස්මක් වැනිය.

ප්‍රධාන සම්බන්ධතා:

  • එක් විකිණීමකට (Sale) විකුණුම් අයිතම (Sale_Items) රාශියක් තිබිය හැක. (One-to-Many)
  • එක් නිෂ්පාදනයක් (Product) විවිධ විකුණුම් අයිතම වලට ඇතුළත් විය හැක. (One-to-Many)
  • එක් ප්‍රවර්ගයකට (Category) නිෂ්පාදන රාශියක් අයත් විය හැක. (One-to-Many)
3 වගු (Tables) නිර්මාණය කිරීම

දැන් අපි අපගේ `supermarket_db` දත්ත සමුදාය තුළ අවශ්‍ය වගු නිර්මාණය කරමු. සෑම වගුවකම තීරු (columns), දත්ත වර්ග (data types), සහ යතුරු (keys) අඩංගු වේ.

  • `INT`: පූර්ණ සංඛ්‍යා සඳහා.
  • `VARCHAR`: අකුරු සහ අංක (text) සඳහා.
  • `DECIMAL`: දශම සංඛ්‍යා (මිල වැනි) සඳහා.
  • `TIMESTAMP`: දිනය සහ වේලාව ස්වයංක්‍රීයව සටහන් කිරීමට.
  • `PRIMARY KEY`: වගුවේ සෑම පේළියක්ම අනන්‍යව හඳුනාගන්නා යතුර.
  • `FOREIGN KEY`: එක් වගුවක් තවත් වගුවක් සමඟ සම්බන්ධ කරන යතුර.

⭐ ප්‍රායෝගික පැවරුම: වගු නිර්මාණය සහ දත්ත ඇතුළත් කිරීම

පියවර 1: SQL මගින් වගු නිර්මාණය කිරීම

phpMyAdmin (`http://localhost/phpmyadmin`) වෙත පිවිස, `supermarket_db` දත්ත සමුදාය තෝරා, එහි 'SQL' ටැබ් එකට ගොස් පහත ඇති සම්පූර්ණ කේතයම copy-paste කර "Go" බොත්තම ඔබන්න. මෙමගින් සියලුම වගු එකවර නිර්මාණය වනු ඇත.

-- Users Table CREATE TABLE `users` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `role` VARCHAR(50) NOT NULL DEFAULT 'cashier', -- 'admin' or 'cashier' `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Categories Table CREATE TABLE `categories` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Products Table CREATE TABLE `products` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `category_id` INT(11) NOT NULL, `price` DECIMAL(10, 2) NOT NULL, `quantity` INT(11) NOT NULL, `image` VARCHAR(255) NULL, `supplier` VARCHAR(255) NULL, PRIMARY KEY (`id`), FOREIGN KEY (`category_id`) REFERENCES `categories`(`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Sales Table CREATE TABLE `sales` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `user_id` INT(11) NOT NULL, `total` DECIMAL(10, 2) NOT NULL, `sale_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Sale Items Table CREATE TABLE `sale_items` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `sale_id` INT(11) NOT NULL, `product_id` INT(11) NOT NULL, `qty` INT(11) NOT NULL, `subtotal` DECIMAL(10, 2) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`sale_id`) REFERENCES `sales`(`id`) ON DELETE CASCADE, FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

පියවර 2: නියැදි දත්ත ඇතුළත් කර පරීක්ෂා කිරීම

වගු නිවැරදිව ක්‍රියා කරන්නේ දැයි බැලීමට, අපි නියැදි ප්‍රවර්ගයක් සහ නිෂ්පාදනයක් ඇතුළත් කරමු. නැවතත් 'SQL' ටැබ් එකට ගොස් පහත කේතය ක්‍රියාත්මක කරන්න.

-- Insert a sample category INSERT INTO `categories` (`name`) VALUES ('Beverages'); -- Insert a sample product INSERT INTO `products` (`name`, `category_id`, `price`, `quantity`, `supplier`) VALUES ('Milk Packet', 1, 150.00, 50, 'Highland');

දැන් phpMyAdmin හි `products` සහ `categories` වගු browse කර බලන්න. ඔබ ඇතුළත් කළ දත්ත එහි දිස්විය යුතුය. එසේ නම්, ඔබ මෙම මොඩියුලය සාර්ථකව නිම කර ඇත!

‹‹ පෙර මොඩියුලය (Module 1) ඊළඟ මොඩියුලය (Module 3) ››