نبدأ بأنشاء قاعده البيانات ونسميها مثلا ElectronicProduct ManagementS ystem
امر انشاء قاعده بيانات نظام إدارة المنتجات
MS_= ManagementS ystem
create database MS_ElectronicProduct
امر انشاء قاعده بيانات نظام إدارة المنتجات
MS_= ManagementS ystem
create database MS_ElectronicProduct
❤1
نبدأ في انشاء الجداول
بحيث تتأكد انك تشتغل على القاعدة التي تم بنائها
use MS_ElectronicProduct
بحيث تتأكد انك تشتغل على القاعدة التي تم بنائها
use MS_ElectronicProduct
👍1
use MS_ElectronicProduct
--1. جدول الفئات (Categories)
CREATE TABLE Categories (
CategoryID INT PRIMARY KEY,
CategoryName VARCHAR(100) NOT NULL
);
1. إضافة فئة جديدة
INSERT INTO Categories (CategoryID, CategoryName)
VALUES (1, 'Electronics'); --
--1. جدول الفئات (Categories)
CREATE TABLE Categories (
CategoryID INT PRIMARY KEY,
CategoryName VARCHAR(100) NOT NULL
);
1. إضافة فئة جديدة
INSERT INTO Categories (CategoryID, CategoryName)
VALUES (1, 'Electronics'); --
--2. جدول المنتجات (Products)
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100) NOT NULL,
CategoryID INT,
Price DECIMAL(10, 2) NOT NULL,
StockQuantity INT NOT NULL,
Description TEXT,
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);
--3. جدول العملاء (Customers)
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Email VARCHAR(100) NOT NULL UNIQUE,
PhoneNumber VARCHAR(15),
Address VARCHAR(255)
);
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100) NOT NULL,
CategoryID INT,
Price DECIMAL(10, 2) NOT NULL,
StockQuantity INT NOT NULL,
Description TEXT,
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);
--3. جدول العملاء (Customers)
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Email VARCHAR(100) NOT NULL UNIQUE,
PhoneNumber VARCHAR(15),
Address VARCHAR(255)
);
❤1
--4. جدول الطلبات (Orders)
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATETIME NOT NULL,
TotalAmount DECIMAL(10, 2) NOT NULL,
Status VARCHAR(50),
PaymentStatus VARCHAR(50),
ShippingStatus VARCHAR(50),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
--5. جدول تفاصيل الطلب (OrderDetails)
CREATE TABLE OrderDetails (
OrderItemID INT PRIMARY KEY,
OrderID INT,
ProductID INT,
Quantity INT NOT NULL,
Subtotal DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--6. جدول المستخدمين (Users)
CREATE TABLE Users (
UserID INT PRIMARY KEY,
Username VARCHAR(50) NOT NULL UNIQUE,
Password VARCHAR(255) NOT NULL,
Role VARCHAR(50) NOT NULL
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATETIME NOT NULL,
TotalAmount DECIMAL(10, 2) NOT NULL,
Status VARCHAR(50),
PaymentStatus VARCHAR(50),
ShippingStatus VARCHAR(50),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
--5. جدول تفاصيل الطلب (OrderDetails)
CREATE TABLE OrderDetails (
OrderItemID INT PRIMARY KEY,
OrderID INT,
ProductID INT,
Quantity INT NOT NULL,
Subtotal DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--6. جدول المستخدمين (Users)
CREATE TABLE Users (
UserID INT PRIMARY KEY,
Username VARCHAR(50) NOT NULL UNIQUE,
Password VARCHAR(255) NOT NULL,
Role VARCHAR(50) NOT NULL
);
👍2❤1
--7. جدول الموردين (Suppliers)
CREATE TABLE Suppliers (
SupplierID INT PRIMARY KEY,
SupplierName VARCHAR(100) NOT NULL,
ContactNumber VARCHAR(15),
Email VARCHAR(100) NOT NULL UNIQUE,
Address VARCHAR(255)
);
--8. جدول ربط المنتجات بالموردين (Product_Suppliers)
CREATE TABLE Product_Suppliers (
ProductSupplierID INT PRIMARY KEY,
ProductID INT,
SupplierID INT,
PurchasePrice DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID),
FOREIGN KEY (SupplierID) REFERENCES Suppliers(SupplierID)
);
--9. جدول المشتريات (Purchases)
CREATE TABLE Purchases (
PurchaseID INT PRIMARY KEY,
SupplierID INT,
PurchaseDate DATETIME NOT NULL,
TotalAmount DECIMAL(10, 2) NOT NULL,
Status VARCHAR(50),
FOREIGN KEY (SupplierID) REFERENCES Suppliers(SupplierID)
);
--10. جدول تفاصيل الشراء (Purchase_Items)
CREATE TABLE Purchase_Items (
PurchaseItemID INT PRIMARY KEY,
PurchaseID INT,
ProductID INT,
Quantity INT NOT NULL,
UnitPrice DECIMAL(10, 2) NOT NULL,
TotalPrice DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (PurchaseID) REFERENCES Purchases(PurchaseID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--11. جدول الحسابات (Accounts)
CREATE TABLE Accounts (
AccountID INT PRIMARY KEY,
AccountName VARCHAR(100) NOT NULL,
AccountType VARCHAR(50) NOT NULL,
Description TEXT
);
--12. جدول المعاملات المالية (Transactions)
CREATE TABLE Transactions (
TransactionID INT PRIMARY KEY,
TransactionDate DATETIME NOT NULL,
AccountID INT,
Amount DECIMAL(10, 2) NOT NULL,
TransactionType VARCHAR(50) NOT NULL,
Description TEXT,
RelatedOrderID INT,
RelatedPurchaseID INT,
FOREIGN KEY (AccountID) REFERENCES Accounts(AccountID),
FOREIGN KEY (RelatedOrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (RelatedPurchaseID) REFERENCES Purchases(PurchaseID)
);
CREATE TABLE Suppliers (
SupplierID INT PRIMARY KEY,
SupplierName VARCHAR(100) NOT NULL,
ContactNumber VARCHAR(15),
Email VARCHAR(100) NOT NULL UNIQUE,
Address VARCHAR(255)
);
--8. جدول ربط المنتجات بالموردين (Product_Suppliers)
CREATE TABLE Product_Suppliers (
ProductSupplierID INT PRIMARY KEY,
ProductID INT,
SupplierID INT,
PurchasePrice DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID),
FOREIGN KEY (SupplierID) REFERENCES Suppliers(SupplierID)
);
--9. جدول المشتريات (Purchases)
CREATE TABLE Purchases (
PurchaseID INT PRIMARY KEY,
SupplierID INT,
PurchaseDate DATETIME NOT NULL,
TotalAmount DECIMAL(10, 2) NOT NULL,
Status VARCHAR(50),
FOREIGN KEY (SupplierID) REFERENCES Suppliers(SupplierID)
);
--10. جدول تفاصيل الشراء (Purchase_Items)
CREATE TABLE Purchase_Items (
PurchaseItemID INT PRIMARY KEY,
PurchaseID INT,
ProductID INT,
Quantity INT NOT NULL,
UnitPrice DECIMAL(10, 2) NOT NULL,
TotalPrice DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (PurchaseID) REFERENCES Purchases(PurchaseID),
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--11. جدول الحسابات (Accounts)
CREATE TABLE Accounts (
AccountID INT PRIMARY KEY,
AccountName VARCHAR(100) NOT NULL,
AccountType VARCHAR(50) NOT NULL,
Description TEXT
);
--12. جدول المعاملات المالية (Transactions)
CREATE TABLE Transactions (
TransactionID INT PRIMARY KEY,
TransactionDate DATETIME NOT NULL,
AccountID INT,
Amount DECIMAL(10, 2) NOT NULL,
TransactionType VARCHAR(50) NOT NULL,
Description TEXT,
RelatedOrderID INT,
RelatedPurchaseID INT,
FOREIGN KEY (AccountID) REFERENCES Accounts(AccountID),
FOREIGN KEY (RelatedOrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (RelatedPurchaseID) REFERENCES Purchases(PurchaseID)
);
❤1
--13. جدول تقييمات المنتجات (Product Reviews)
CREATE TABLE ProductReviews (
ReviewID INT PRIMARY KEY,
ProductID INT,
CustomerID INT,
Rating INT CHECK (Rating >= 1 AND Rating <= 5),
Comment TEXT,
ReviewDate DATETIME NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
--14. جدول العروض الترويجية (Promotions)
CREATE TABLE Promotions (
PromotionID INT PRIMARY KEY,
ProductID INT,
DiscountPercentage DECIMAL(5, 2) CHECK (DiscountPercentage >= 0 AND DiscountPercentage <= 100),
StartDate DATETIME NOT NULL,
EndDate DATETIME NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--15. جدول تقارير المخزون (Inventory Reports)
CREATE TABLE InventoryReports (
ReportID INT PRIMARY KEY,
ReportDate DATETIME NOT NULL,
TotalProducts INT NOT NULL,
TotalStockValue DECIMAL(10, 2) NOT NULL
);
--16. جدول تنبيهات المخزون (Inventory Alerts)
CREATE TABLE InventoryAlerts (
AlertID INT PRIMARY KEY,
ProductID INT,
ThresholdQuantity INT NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--17. جدول شحن الطلبات (Shipping)
CREATE TABLE Shipping (
ShippingID INT PRIMARY KEY,
OrderID INT,
ShippingAddress VARCHAR(255) NOT NULL,
ShippingDate DATETIME,
TrackingNumber VARCHAR(100),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
--18. جدول أدوار المستخدمين (User Roles)
CREATE TABLE UserRoles (
RoleID INT PRIMARY KEY,
RoleName VARCHAR(50) NOT NULL,
Permissions TEXT
);
--19. جدول تقارير المبيعات (Sales Reports)
CREATE TABLE SalesReports (
ReportID INT PRIMARY KEY,
ReportDate DATETIME NOT NULL,
TotalSales DECIMAL(10, 2) NOT NULL,
TotalOrders INT NOT NULL
);
CREATE TABLE ProductReviews (
ReviewID INT PRIMARY KEY,
ProductID INT,
CustomerID INT,
Rating INT CHECK (Rating >= 1 AND Rating <= 5),
Comment TEXT,
ReviewDate DATETIME NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
--14. جدول العروض الترويجية (Promotions)
CREATE TABLE Promotions (
PromotionID INT PRIMARY KEY,
ProductID INT,
DiscountPercentage DECIMAL(5, 2) CHECK (DiscountPercentage >= 0 AND DiscountPercentage <= 100),
StartDate DATETIME NOT NULL,
EndDate DATETIME NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--15. جدول تقارير المخزون (Inventory Reports)
CREATE TABLE InventoryReports (
ReportID INT PRIMARY KEY,
ReportDate DATETIME NOT NULL,
TotalProducts INT NOT NULL,
TotalStockValue DECIMAL(10, 2) NOT NULL
);
--16. جدول تنبيهات المخزون (Inventory Alerts)
CREATE TABLE InventoryAlerts (
AlertID INT PRIMARY KEY,
ProductID INT,
ThresholdQuantity INT NOT NULL,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--17. جدول شحن الطلبات (Shipping)
CREATE TABLE Shipping (
ShippingID INT PRIMARY KEY,
OrderID INT,
ShippingAddress VARCHAR(255) NOT NULL,
ShippingDate DATETIME,
TrackingNumber VARCHAR(100),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
--18. جدول أدوار المستخدمين (User Roles)
CREATE TABLE UserRoles (
RoleID INT PRIMARY KEY,
RoleName VARCHAR(50) NOT NULL,
Permissions TEXT
);
--19. جدول تقارير المبيعات (Sales Reports)
CREATE TABLE SalesReports (
ReportID INT PRIMARY KEY,
ReportDate DATETIME NOT NULL,
TotalSales DECIMAL(10, 2) NOT NULL,
TotalOrders INT NOT NULL
);
❤2
ممكن الذي لديه اضافات او تعديلات يرسلها او يعلق في المجموعه الخاصه بالمناقشه
https://t.me/DBLearningCommunity
https://t.me/DBLearningCommunity
بعد ان تخلص انشاء الجداول وتضيف بيانات افتراضيه ننتقل الى جانب التطبيق الاستعلامات
قوم بعمل استعلام عن جميع الفئات
SELECT * FROM Categories;
SELECT * FROM Categories;
لو طلب منك استعلام عن جميع المنتجات
SELECT * FROM Products;
SELECT * FROM Products;
استعلام عن جميع العملاء
SELECT * FROM Customers;
-استعلام عن جميع الطلبات
SELECT * FROM Orders;
SELECT * FROM Customers;
-استعلام عن جميع الطلبات
SELECT * FROM Orders;
لو اردنا عمل استعلامات متداخله للربط بين اكثر من جدول
لو طلب منك عمل استعلام لجلب جميع المنتجات مع فئاتها
SELECT p.ProductID, p.ProductName, c.CategoryName, p.Price, p.StockQuantity
FROM Products p
JOIN Categories c ON p.CategoryID = c.CategoryID;
لو طلب منك عمل استعلام لجلب جميع المنتجات مع فئاتها
SELECT p.ProductID, p.ProductName, c.CategoryName, p.Price, p.StockQuantity
FROM Products p
JOIN Categories c ON p.CategoryID = c.CategoryID;
كيف ارجع بيانات الطلبات مع حالة الدفع
SELECT o.OrderID, o.OrderDate, c.FirstName, c.LastName, o.TotalAmount, o.PaymentStatus
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
WHERE o.PaymentStatus = 'Pending';
SELECT o.OrderID, o.OrderDate, c.FirstName, c.LastName, o.TotalAmount, o.PaymentStatus
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
WHERE o.PaymentStatus = 'Pending';
❤1
في طريق الدفع لو طلب منك عرض الطلبات مع حالة الدفع
SELECT o.OrderID, o.OrderDate, c.FirstName, c.LastName, o.TotalAmount, o.PaymentStatus
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
WHERE o.PaymentStatus = 'Pending';
SELECT o.OrderID, o.OrderDate, c.FirstName, c.LastName, o.TotalAmount, o.PaymentStatus
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
WHERE o.PaymentStatus = 'Pending';
❤1
استعلامات الدوال
قوم بعمل استعلام لحساب متوسط تقييمات كل منتج
SELECT p.ProductName, AVG(r.Rating) AS AverageRating
FROM ProductReviews r
JOIN Products p ON r.ProductID = p.ProductID
GROUP BY p.ProductName;
قوم بعمل استعلام لحساب متوسط تقييمات كل منتج
SELECT p.ProductName, AVG(r.Rating) AS AverageRating
FROM ProductReviews r
JOIN Products p ON r.ProductID = p.ProductID
GROUP BY p.ProductName;
❤1
--6. استعلام لجلب تقارير المبيعات الشهرية
SELECT ReportDate, TotalSales, TotalOrders
FROM SalesReports
ORDER BY ReportDate DESC;
--7. استعلام لجلب تنبيهات المخزون للمنتجات
SELECT p.ProductName, a.ThresholdQuantity
FROM InventoryAlerts a
JOIN Products p ON a.ProductID = p.ProductID;
الهدف: توضيح كيفية الربط بين تنبيهات المخزون والمنتجات.
--. استعلام لجلب تفاصيل الشحن لكل طلب
SELECT s.ShippingID, o.OrderID, s.ShippingAddress, s.TrackingNumber
FROM Shipping s
JOIN Orders o ON s.OrderID = o.OrderID;
الهدف: فهم كيفية ربط جداول الشحن والطلبات للحصول على معلومات الشحن.
--. استعلام لجلب جميع الموردين مع المنتجات الموردة
SELECT s.SupplierName, p.ProductName, ps.PurchasePrice
FROM Product_Suppliers ps
JOIN Suppliers s ON ps.SupplierID = s.SupplierID
JOIN Products p ON ps.ProductID = p.ProductID;
: كيفية استعلام البيانات من جداول الموردين والمنتجات.
SELECT ReportDate, TotalSales, TotalOrders
FROM SalesReports
ORDER BY ReportDate DESC;
--7. استعلام لجلب تنبيهات المخزون للمنتجات
SELECT p.ProductName, a.ThresholdQuantity
FROM InventoryAlerts a
JOIN Products p ON a.ProductID = p.ProductID;
الهدف: توضيح كيفية الربط بين تنبيهات المخزون والمنتجات.
--. استعلام لجلب تفاصيل الشحن لكل طلب
SELECT s.ShippingID, o.OrderID, s.ShippingAddress, s.TrackingNumber
FROM Shipping s
JOIN Orders o ON s.OrderID = o.OrderID;
الهدف: فهم كيفية ربط جداول الشحن والطلبات للحصول على معلومات الشحن.
--. استعلام لجلب جميع الموردين مع المنتجات الموردة
SELECT s.SupplierName, p.ProductName, ps.PurchasePrice
FROM Product_Suppliers ps
JOIN Suppliers s ON ps.SupplierID = s.SupplierID
JOIN Products p ON ps.ProductID = p.ProductID;
: كيفية استعلام البيانات من جداول الموردين والمنتجات.
❤5
--. استعلام لحساب إجمالي المبيعات لكل منتج
SELECT p.ProductName, SUM(pi.Quantity) AS TotalSold
FROM Purchase_Items pi
JOIN Products p ON pi.ProductID = p.ProductID
GROUP BY p.ProductName;
SELECT p.ProductName, SUM(pi.Quantity) AS TotalSold
FROM Purchase_Items pi
JOIN Products p ON pi.ProductID = p.ProductID
GROUP BY p.ProductName;
❤2
ممكن الكل يشارك بعمل اسئلة لعمل استعلامات ونحلها مع بعض في القناه الخاصة بالاستفسارات
https://t.me/DBLearningCommunity
https://t.me/DBLearningCommunity