"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية منع التصويت المتعدد دون تخزين المصفوفات في MySQL؟

كيفية منع التصويت المتعدد دون تخزين المصفوفات في MySQL؟

تم النشر بتاريخ 2024-11-22
تصفح:280

How to Prevent Multiple Voting without Storing Arrays in MySQL?

تخزين المصفوفات في MySQL: نهج بديل لمنع التصويت المتعدد

لا يدعم MySQL أصلاً تخزين المصفوفات داخل الحقول. ومع ذلك، يمكن استخدام تصميم قاعدة البيانات العلائقية لتحقيق نتيجة مماثلة.

تصميم قاعدة البيانات

خذ بعين الاعتبار مخطط قاعدة البيانات التالي:

CREATE TABLE comments (
    comment_id INT PRIMARY KEY,
    body VARCHAR(100)
);

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(20)
);

CREATE TABLE comments_votes (
    comment_id INT,
    user_id INT,
    vote_type INT,
    PRIMARY KEY (comment_id, user_id)
);

يستخدم جدول comments_votes مفتاحًا أساسيًا مركبًا للتأكد من أن كل مستخدم يمكنه التصويت مرة واحدة فقط على تعليق معين.

مثال للبيانات

-- Insert sample data
INSERT INTO comments VALUES (1, 'First comment');
INSERT INTO comments VALUES (2, 'Second comment');
INSERT INTO comments VALUES (3, 'Third comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');
INSERT INTO users VALUES (3, 'user_c');

-- Record user 1's votes
INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);

الفوائد

يتمتع هذا الأسلوب بالعديد من المزايا:

  • يمنع التصويت المتعدد: يفرض قيد المفتاح الأساسي في جدول comments_votes التكامل المرجعي ويضمن البيانات الاتساق.
  • نوع التصويت المرن: يسمح عمود نوع التصويت بأنواع مختلفة من الأصوات، مثل الإعجابات أو عدم الإعجاب.
  • سهل الاستعلام: يتيح النموذج العلائقي الاستعلام الفعال عن معلومات الناخبين وعدد الأصوات.

القيود الرئيسية الأجنبية (اختياري)

بالإضافة إلى ذلك، يمكن إضافة قيود المفاتيح الخارجية لفرض التكامل المرجعي بين الجداول:

CREATE TABLE comments (
    ...
) ENGINE=INNODB;

CREATE TABLE users (
    ...
) ENGINE=INNODB;

CREATE TABLE comments_votes (
    ...
    FOREIGN KEY (comment_id) REFERENCES comments (comment_id),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;

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

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3