السلام عليكم ورحمة الله
عندي Table اسمها Employees تحتوي على Id,name,country, salary,allowance,tax
اريد حينما أدخل قيمة للSalary يتم إضافة الضريبة 4% من قيمة الراتب تلقائيا لل tax.
وعليكم السلام
يمكنك تحقيق هذا الهدف باستخدام قاعدة البيانات ولغة SQL، يجب عليك تنفيذ عملية تحديث (UPDATE) لجدول Employees بعد إدخال القيمة للراتب (Salary). يمكنك استخدام الاستعلام التالي كمثال:
UPDATE Employees
SET salary = 'القيمة الجديدة',
tax = 0.04 * 'القيمة الجديدة'
WHERE Id = 'رقم الموظف';
ضع مكان 'القيمة الجديدة' القيمة الجديدة للراتب التي تم إدخالها، وضع مكان 'رقم الموظف' رقم الموظف الذي تريد تحديث معلوماته.
تأكد من تنفيذ هذا الاستعلام في قاعدة البيانات الخاصة بك بعد كل إدخال جديد للراتب، سيقوم هذا الاستعلام بتحديث قيمة الراتب والضريبة تلقائياً وفقاً للنسبة المحددة (4%).
هناك العديد من الطرق لتحقيق ذلك، وفيما يلي مثال بسيط باستخدام لغة SQL لإدخال البيانات وحساب الضريبة:
إنشاء الجدول
CREATE TABLE Employees ( Id INT PRIMARY KEY, Name VARCHAR(100), Country VARCHAR(100), Salary DECIMAL(10, 2), Allowance DECIMAL(10, 2), Tax DECIMAL(10, 2) );
إضافة قيمة للجدول مع حساب الضريبة
INSERT INTO Employees (Id, Name, Country, Salary, Allowance, Tax) VALUES (1, 'John', 'USA', 5000, 1000, (Salary * 0.04));
في هذا المثال، يتم إنشاء جدول "Employees" مع الحقول المحددة. ثم يتم استخدام عبارة INSERT لإدخال قيمة لـ "Salary" وحساب الضريبة المناسبة باستخدام تعبير (Salary * 0.04) وتخزينها في حقل "Tax".
كطريقة أولى استخدم دالة SQL لحساب الضريبة وإضافة القيمة إلى حقل الضريبة تلقائيا عند إدخال قيمة جديدة للراتب.
INSERT INTO Employees (Id, name, country, salary, allowance, tax) VALUES (1, 'Hessin', 'Egypt', 10000, 500, (SELECT (salary * 0.04) AS tax));
وكحل آخر استخدم إجراء مخزن (stored procedure) لحساب الضريبة وإضافة القيمة إلى حقل الضريبة تلقائيا عند إدخال قيمة جديدة للراتب.
CREATE PROCEDURE UpdateSalary @Id INT, @Salary DECIMAL(10,2) AS BEGIN SET @Tax = @Salary * 0.04; UPDATE Employees SET Salary = @Salary, Tax = @Tax WHERE Id = @Id; END;
لاستخدام تلك الطريقة، نفذ إجراء المخزن كالتالي:
EXEC UpdateSalary @Id = 1, @Salary = 10000;
في كلتا الطريقتين، سيتم إضافة قيمة الضريبة إلى حقل الضريبة تلقائيا عند إدخال قيمة جديدة للراتب.
وفي حالتك أنت، استخدم الطريقة الأولى كالتالي:
INSERT INTO Employees (Id, name, country, salary, allowance, tax) VALUES (1, 'Hessin', 'Egypt', 10000, 500, (SELECT (salary * 0.04) AS tax));
والنتجية هي إنشاء إدخال جديد في جدول Employees مع قيمة الضريبة 400.
وتستطيع أيضًا استخدام الطريقة الثانية كالتالي:
CREATE PROCEDURE UpdateSalary @Id INT, @Salary DECIMAL(10,2) AS BEGIN SET @Tax = @Salary * 0.04; UPDATE Employees SET Salary = @Salary, Tax = @Tax WHERE Id = @Id; END;
ثم تنفيذ إجراء المخزن كالتالي:
EXEC UpdateSalary @Id = 1, @Salary = 10000;
سوف لن يكون آنذاك داع من تخزين القيمة، كونها قابلة للإشتقاق من قيمة أخرى مخزنة بالفعل. لما تخزن كلتا القيمتين اذن؟ استعمل دالة تستخرجلك هاته القيمة بشكل تلقائي في استعلامات القراءة مستقبلا .. فماذا لو تم تغيير نسبة الضريبة مستقبلا؟
رغم ذلك، هنالك طريقة تمكنك من ذلك وهي فكرة تصريح Trigger أو مراقب يقوم بضبط قيمة عمود معين بحسب قيمة عمود آخر، يمكنك إنشاء مراقب بحيث تستجيب لتغييرات في حقل الراتب (Salary) وتقوم بحساب الضريبة وتحفظها في حقل الضريبة (Tax).
أضف استعلام تصريح المراقبة كالتالي:
CREATE TRIGGER calculate_tax_before_insert BEFORE INSERT ON Employees FOR EACH ROW BEGIN SET NEW.tax = NEW.salary * 0.04; END;
حيث يكون calculate_tax_before_insert: هو اسم المراقب
التعليقات