أخي أبو ماجد ...
في الحقيقة، تصميم قاعدة البيانات بحيث لا يكون هناك أي تكرار في البيانات سوف يريحك من الكثير من الأخطاء و المشاكل، لاحظ أن تكرار البيانات هنا لا يعني تكرار الأرقام! يعني أنه بإمكانك وضع خانة Last Post ID في جدول المنتديات مثلا للحصول على تفاصيل آخر مشاركة بدون إجراء عمليات فرز و غير ذلك.
حسب ما ذكر الأخ Ghost، فأنا أقترح الشكل التالي لقاعدة البيانات:
كود:
DROP TABLE IF EXISTS forum;
CREATE TABLE forum (
forum_id SMALLINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
forum_pid SMALLINT(3) UNSIGNED NOT NULL,
forum_oid SMALLINT(3) UNSIGNED NOT NULL,
forum_name VARCHAR(120) NOT NULL,
forum_descr VARCHAR(250) NOT NULL,
forum_perm_start VARCHAR(250) NOT NULL,
forum_perm_reply VARCHAR(250) NOT NULL,
forum_perm_read VARCHAR(250) NOT NULL,
forum_lastpost_id INT(9) UNSIGNED NOT NULL,
PRIMARY KEY (forum_id),
KEY (forum_pid)
);
DROP TABLE IF EXISTS user;
CREATE TABLE user (
user_id MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT,
user_name VARCHAR(32) NOT NULL,
user_pass VARCHAR(32) NOT NULL,
user_group TINYINT(3) UNSIGNED NOT NULL,
user_email VARCHAR(64) NOT NULL,
PRIMARY KEY(user_id),
KEY (user_name, user_pass),
KEY (user_group)
);
DROP TABLE IF EXISTS users_group;
CREATE TABLE users_group (
group_id TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
group_name VARCHAR(32) NOT NULL,
group_canpost TINYINT(1) UNSIGNED NOT NULL,
group_canreply TINYINT(1) UNSIGNED NOT NULL,
group_canedit TINYINT(1) UNSIGNED NOT NULL,
group_caneditall TINYINT(1) UNSIGNED NOT NULL,
group_moderator TINYINT(1) UNSIGNED NOT NULL,
group_admin TINYINT(1) UNSIGNED NOT NULL,
PRIMARY KEY (group_id)
);
DROP TABLE IF EXISTS post;
CREATE TABLE post (
post_id INT(9) UNSIGNED NOT NULL AUTO_INCREMENT,
post_pid INT(9) UNSIGNED NOT NULL DEFAULT '0',
post_fid SMALLINT(3) UNSIGNED NOT NULL,
post_userid MEDIUMINT(8) UNSIGNED NOT NULL,
post_subject VARCHAR(120) NOT NULL,
post_body TEXT NOT NULL,
post_time TIMESTAMP(14) ,
post_update TIMESTAMP(14) ,
PRIMARY KEY (post_id),
KEY (post_pid),
KEY (post_fid),
KEY (post_userid),
KEY (post_time)
);
و يرجى من الإخوة التصحيح.