DataBase قواعد بيانات – Telegram
DataBase قواعد بيانات
2.42K subscribers
201 photos
9 videos
42 files
82 links
قواعد بيانات تمارين و امثله ..
Download Telegram
CREATE PROCEDURE UpdateUserStatusAndCreateAccountAndBalanceWithStatusCheck
@userId INT,
@userPerformingUpdate INT,
@groupId SMALLINT,
@accountNo NVARCHAR(12),
@yemeniCurrencyId NCHAR(3),
@saudiCurrencyId NCHAR(3)
AS
BEGIN
-- التحقق من حالة المستخدم الذي يقوم بالتحديث
DECLARE @statusPerformer TINYINT;
SELECT @statusPerformer = [status] FROM PMUser WHERE id = @userPerformingUpdate;

IF @statusPerformer != 1
BEGIN
RAISERROR ('المستخدم موقوف ولا يمتلك صلاحية للتحديث', 16, 1);
RETURN;
END

-- التحقق من حالة المستخدم المستهدف
DECLARE @statusTarget TINYINT;
SELECT @statusTarget = [status] FROM PMUser WHERE id = @userId;

IF @statusTarget = 3
BEGIN
RAISERROR ('المستخدم المراد تحديثه محظور من قبل الادارة', 16, 1);
RETURN;
END

-- تحديث حالة المستخدم المستهدف
UPDATE PMUser
SET [status] = 1
WHERE id = @userId;

-- إنشاء حساب جديد
INSERT INTO AMAccount (id, groupId, accountNo, [status], createAt, [denoscription])
VALUES (@userId, @groupId, @accountNo, 1, GETDATE(), '{}');

-- إنشاء رصيد بالعملة اليمنية
INSERT INTO AMBalance (accountId, groupId, currencyId, [status], amount, [denoscription])
VALUES (@userId, @groupId, @yemeniCurrencyId, 1, 0, '{}');

-- إنشاء رصيد بالعملة السعودية
INSERT INTO AMBalance (accountId, groupId, currencyId, [status], amount, [denoscription])
VALUES (@userId, @groupId, @saudiCurrencyId, 1, 0, '{}');
END;
5
DataBase قواعد بيانات
CREATE PROCEDURE UpdateUserStatusAndCreateAccountAndBalanceWithStatusCheck @userId INT, @userPerformingUpdate INT, @groupId SMALLINT, @accountNo NVARCHAR(12), @yemeniCurrencyId NCHAR(3), @saudiCurrencyId NCHAR(3) AS BEGIN -- التحقق…
جربت تحدي الذكاء الاصطناعي من اجل كتابة كود يناسب قاعدة بياناتي لأجراء مخزن يحتوي على الكثير من التفاصيل ويتعامل مع عده جداول وكانت النتيجة 100% كما اريد
👍1
اجراء مخزن.rar
3 MB
حفظت صفحة المحادثة بالكامل وهذه هي
create table AMService (
id int primary key identity(1, 1),
categoryId smallint not null constraint FK_AMService_AMCategory foreign key references AMCategory(id),
currencyId nchar(3) not null constraint FK_AMService_AMCurrency foreign key references AMCurrency(id),
fatherId int constraint FK_AMService_AMServiceFather foreign key references AMService(id),
serviceCode nvarchar(20) not null,
amount money not null,
);

create table AMPayment (
id int primary key identity(1, 1),
currencyId nchar(3) not null constraint FK_AMPayment_AMCurrency foreign key references AMCurrency(id),
serviceId int not null constraint FK_AMPayment_AMService foreign key references AMService(id),
userId int not null constraint FK_AMPayment_PMUser foreign key references PMUser(id),
amount money not null,

);

create table AMTransfer (
id int primary key identity(1, 1),
accountId int not null,
groupId smallint not null,
currencyId nchar(3) not null,
constraint FK_AMTransfer_AMBalance foreign key(groupId, accountId,currencyId) references AMBalance(groupId, accountId,currencyId),
paymentId int not null constraint FK_AMTransfer_AMPayment foreign key references AMPayment(id),
amount money not null,
);

create table PMUser (
id int primary key constraint FK_PMUser_PMAuth foreign key references PMAuth(id),
[status] tinyint not null default(0),

);

هل يمكنك كتابة كود اجراء مخزن يقوم بفحص اذا كان حالة المستخدم لا تساوي 1 يظهر رسالة خطأ بأن المستخدم غير شغال او محظور
مالم يقوم بالتحقق بأن حالة الخدمة لا تساوي 1 يظهر رسالة خطأ بأن الخدمة غير متاحة
مالم يقوم بأنشاء عملية دفع اذا كان مبلغ الدفع ليس اقل من تكلفة الخدمة ثم يقوم بالتاثير على الحسابات من خلال اضافة صفوف الى جدول التحويلات للتأثير على الحسابات المرتبطة بعملية الدفع؟
CREATE PROCEDURE ProcessPayment
@userId INT,
@serviceId INT,
@paymentAmount MONEY
AS
BEGIN
-- Check if the user status is not equal to 1 (active)
IF (SELECT [status] FROM PMUser WHERE id = @userId) <> 1
BEGIN
RAISERROR('المستخدم غير شغال أو محظور', 16, 1);
RETURN;
END

-- Check if the service status is not equal to 1 (available)
IF (SELECT [status] FROM AMService WHERE id = @serviceId) <> 1
BEGIN
RAISERROR('الخدمة غير متاحة', 16, 1);
RETURN;
END

-- Check if the payment amount is not less than the service cost
DECLARE @serviceCost MONEY;
SELECT @serviceCost = amount FROM AMService WHERE id = @serviceId;
IF @paymentAmount < @serviceCost
BEGIN
RAISERROR('مبلغ الدفع أقل من تكلفة الخدمة', 16, 1);
RETURN;
END

-- Proceed with creating a payment record
INSERT INTO AMPayment (currencyId, serviceId, userId, amount, [status], [denoscription])
VALUES ((SELECT currencyId FROM AMService WHERE id = @serviceId), @serviceId, @userId, @paymentAmount, 1, '{}');

DECLARE @paymentId INT;
SET @paymentId = SCOPE_IDENTITY();

-- Affect the accounts by adding rows to the AMTransfer table
-- This is a placeholder for the logic to affect the accounts
-- You will need to replace it with the actual logic based on your application's requirements
INSERT INTO AMTransfer (accountId, groupId, currencyId, paymentId, amount, [denoscription])
VALUES (/* accountId */, /* groupId */, (SELECT currencyId FROM AMService WHERE id = @serviceId), @paymentId, @paymentAmount, '{}');
END
هذه تجربة اخرى اعطيت الذكاء الاصطناعي كود انشاء جداولي ثم طلبت منه انشاء اجراء مفصل وكانت النتيجة كما طلبت تماما

تم قص جزء من اكواد الجداول
https://www.instagram.com/anwaralsaiary?igsh=ZGUzMzM3NWJiOQ==


اتمنى متابعة حسابي على الانستقرام
نبدء اختبار جديد مع الذكاء الاصطناعي
لقد قمت بمراجعة الجداول التي أرسلتها، وهنا بعض الملاحظات:

1. الأمان: استخدام نوع البيانات image لـ passwordHash و passwordSalt ليس مثاليًا. يُفضل استخدام نوع بيانات varbinary لتخزين الهاش والملح لأنه أكثر ملاءمة للبيانات الثنائية.

2. التحقق من الصحة: حقل email في جدول PMAuth محدود بـ 20 حرفًا فقط، وهذا قد لا يكون كافيًا لعناوين البريد الإلكتروني الطويلة. قد تحتاج إلى زيادة هذا الحد.

3. التنظيم: استخدام نوع البيانات text للوصف قد يكون مفرطًا وغير مُحسّن. يُفضل استخدام nvarchar(MAX) أو varchar(MAX) إذا كنت تحتاج إلى تخزين نصوص طويلة.

4. التعريفات: يُفضل تحديد العلاقات بين الجداول بشكل واضح، مثل العلاقة بين AMAccount و AMAccountGroup. تأكد من أن العلاقات تعكس الهيكل التنظيمي للبيانات بشكل صحيح.

5. الأداء: لجداول مثل `AMBalance`، قد تحتاج إلى فهرسة على الحقول التي ستستخدم بشكل متكرر في الاستعلامات لتحسين الأداء.

6. التدقيق: قد ترغب في إضافة حقول لتسجيل الأحداث مثل lastUpdatedAt لتتبع التغييرات في السجلات.

يمكنك إضافة المزيد من الكود، وسأقوم بمراجعته أيضًا.
شكرًا لمشاركة بقية الكود. إليك بعض الملاحظات الإضافية:

1. التناسق: تأكد من أن جميع الجداول تستخدم نفس نوع البيانات للحقول المتشابهة، مثل denoscription. إذا قررت استخدام nvarchar(MAX) بدلاً من `text`، فعليك تحديث جميع الجداول لتعكس هذا التغيير.

2. الفهرسة: لجدول AMTransfer`، قد تحتاج إلى فهرسة حقل `createAt إذا كنت تخطط لإجراء استعلامات تاريخية أو ترتيب السجلات بناءً على تاريخ الإنشاء.

3. العلاقات: تأكد من أن العلاقات بين الجداول تعكس بدقة العمليات التجارية والمنطقية لنظامك. على سبيل المثال، العلاقة بين AMTransfer و AMPayment يجب أن تعكس العملية التجارية للتحويلات المالية.

4. التحقق من الصحة: قد ترغب في إضافة قيود على الحقول مثل amount لضمان أن القيم المدخلة تتوافق مع القواعد المالية لتطبيقك.

5. التوثيق: من المهم توثيق الجداول والعلاقات بينها بشكل جيد، بما في ذلك القيود والقواعد المستخدمة. هذا سيساعد في الحفاظ على قابلية الصيانة والتوسع في المستقبل.

إذا كان لديك أي استفسارات أخرى أو تحتاج إلى مزيد من المساعدة، فلا تتردد في طرحها.
هذه كانت اجابته بعد ارسال كود قاعدة البيانات
اختبار

ما هي الجداول الناقصة لكي يكون تطبيقي متكامل ومميز ؟
لجعل تطبيق الدفع الإلكتروني متكاملًا ومميزًا، قد تحتاج إلى النظر في إضافة الجداول التالية:

1. جدول المعاملات (Transactions): لتسجيل كل عملية دفع أو تحويل تتم من خلال التطبيق.

2. جدول الإشعارات (Notifications): لإرسال تنبيهات للمستخدمين بشأن العمليات المهمة أو التغييرات في حالة الحساب.

3. جدول السجلات الأمنية (SecurityLogs): لتتبع محاولات الدخول الناجحة وغير الناجحة وأي تغييرات أمنية أخرى.

4. جدول الإعدادات (Settings): لتخزين إعدادات المستخدم وتفضيلات التطبيق.

5. جدول الرسائل (Messages): إذا كنت تخطط لتضمين ميزة الدردشة أو التواصل بين المستخدمين.

6. جدول الدعم الفني (SupportTickets): لإدارة طلبات الدعم والاستفسارات من المستخدمين.

7. جدول التقارير (Reports): لتوليد تقارير مالية وإحصائيات استخدام التطبيق.

8. جدول الأدوار والصلاحيات (Roles & Permissions): لتحديد مستويات الوصول والصلاحيات للمستخدمين داخل التطبيق.

9. جدول العروض الترويجية (Promotions): لإدارة الخصومات والعروض الترويجية للمستخدمين.

10. جدول التحقق من الهوية (IdentityVerification): لتخزين نتائج عمليات التحقق من هوية المستخدمين.

هذه بعض الأمثلة على الجداول التي قد تكون مفيدة لتطبيقك. من المهم أيضًا التفكير في كيفية تفاعل هذه الجداول مع بعضها البعض وكيفية تأثيرها على تجربة المستخدم النهائية. إذا كان لديك أي استفسارات أخرى أو تحتاج إلى مزيد من المساعدة، فلا تتردد في طرحها.
👍1
هل يمكنك كتابة اكواد انشاء الجداول التي نصحتني بها ؟
DataBase قواعد بيانات
Photo
-- جدول المعاملات
CREATE TABLE Transactions (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
accountId INT NOT NULL,
amount MONEY NOT NULL,
transactionType NVARCHAR(50) NOT NULL,
createAt DATETIME NOT NULL DEFAULT(GETDATE()),
[denoscription] NVARCHAR(MAX) NOT NULL DEFAULT('{}')
);

-- جدول الإشعارات
CREATE TABLE Notifications (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
noscript NVARCHAR(100) NOT NULL,
message NVARCHAR(MAX) NOT NULL,
isRead BIT NOT NULL DEFAULT(0),
createAt DATETIME NOT NULL DEFAULT(GETDATE())
);

-- جدول السجلات الأمنية
CREATE TABLE SecurityLogs (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
action NVARCHAR(100) NOT NULL,
result NVARCHAR(100) NOT NULL,
ipAddress NVARCHAR(20),
createAt DATETIME NOT NULL DEFAULT(GETDATE())
);

-- جدول الإعدادات
CREATE TABLE Settings (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
settingKey NVARCHAR(100) NOT NULL,
settingValue NVARCHAR(MAX) NOT NULL,
updateAt DATETIME NOT NULL DEFAULT(GETDATE())
);

-- جدول الرسائل
CREATE TABLE Messages (
id INT PRIMARY KEY IDENTITY(1,1),
senderId INT NOT NULL,
receiverId INT NOT NULL,
messageText NVARCHAR(MAX) NOT NULL,
isRead BIT NOT NULL DEFAULT(0),
sendAt DATETIME NOT NULL DEFAULT(GETDATE())
);

-- جدول الدعم الفني
CREATE TABLE SupportTickets (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
subject NVARCHAR(100) NOT NULL,
message NVARCHAR(MAX) NOT NULL,
status NVARCHAR(50) NOT NULL,
createAt DATETIME NOT NULL DEFAULT(GETDATE()),
updateAt DATETIME
);

-- جدول التقارير
CREATE TABLE Reports (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
reportType NVARCHAR(100) NOT NULL,
reportData NVARCHAR(MAX) NOT NULL,
createAt DATETIME NOT NULL DEFAULT(GETDATE())
);

-- جدول الأدوار والصلاحيات
CREATE TABLE Roles (
id INT PRIMARY KEY IDENTITY(1,1),
roleName NVARCHAR(100) NOT NULL
);

CREATE TABLE Permissions (
id INT PRIMARY KEY IDENTITY(1,1),
permissionName NVARCHAR(100) NOT NULL
);

CREATE TABLE RolePermissions (
roleId INT NOT NULL,
permissionId INT NOT NULL,
PRIMARY KEY (roleId, permissionId),
FOREIGN KEY (roleId) REFERENCES Roles(id),
FOREIGN KEY (permissionId) REFERENCES Permissions(id)
);

-- جدول العروض الترويجية
CREATE TABLE Promotions (
id INT PRIMARY KEY IDENTITY(1,1),
promotionCode NVARCHAR(50) NOT NULL,
denoscription NVARCHAR(MAX) NOT NULL,
discount DECIMAL(5,2) NOT NULL,
startAt DATETIME NOT NULL,
endAt DATETIME NOT NULL,
[status] TINYINT NOT NULL DEFAULT(1)
);

-- جدول التحقق من الهوية
CREATE TABLE IdentityVerification (
id INT PRIMARY KEY IDENTITY(1,1),
userId INT NOT NULL,
verificationType NVARCHAR(100) NOT NULL,
verificationStatus NVARCHAR(50) NOT NULL,
createAt DATETIME NOT NULL DEFAULT(GETDATE()),
verifiedAt DATETIME
);
5👍3
هل نستمر في متابعة الطلبات ؟؟؟
👍6