تخزين المصفوفات في 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);
الفوائد
يتمتع هذا الأسلوب بالعديد من المزايا:
القيود الرئيسية الأجنبية (اختياري)
بالإضافة إلى ذلك، يمكن إضافة قيود المفاتيح الخارجية لفرض التكامل المرجعي بين الجداول:
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