تصميم قاعدة البيانات
بسم الله الرحمن الرحيم،
عذراً للتأخير …
اليوم سنقوم بتصميم قاعدة البيانات لقائمة المهام وقد استعرضنا في مرحلة التطوير:
سيكون لدينا الجداول التالية:
- جدول المهام: معلومات كل مهمة (اسم المهم – تاريخ الإنشاء – الحالة – تاريخ الانتهاء – إلخ إلخ)
- جدول المستخدمين: نضع فيه معلومات كل مستخدم
- جدول قوائم المهام: نضع فيه اسم القائمة ومعلوماتها وهذا الجدول مرتبط مع جدول المهام حتى نعرف كل مهمة لأي قائمة تتبع، ومرتبط مع جدول المستخدمين حتى نعرف كل قائمة تخص أي مستخدم.
وستكون هيكلية الجداول كما يلي:
- جدول المهام (tasks):
CREATE TABLE IF NOT EXISTS `tasks` ( `id` int(11) NOT NULL auto_increment, `title` varchar(255) collate utf8_unicode_ci default NULL, `status` int(3) default NULL, `priority` int(3) default NULL, `duedate` datetime NOT NULL, `created` datetime default NULL, `modified` datetime default NULL, `group_id` int(11) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- جدول المستخدمين (users):
users:
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL auto_increment, `username` varchar(64) collate utf8_unicode_ci default NULL, `password` varchar(64) collate utf8_unicode_ci default NULL, `name` varchar(64) collate utf8_unicode_ci default NULL, `email` varchar(128) collate utf8_unicode_ci default NULL, `status` int(3) default NULL, `activation` varchar(64) collate utf8_unicode_ci default NULL, `created` datetime default NULL, `modified` datetime default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- جدول القوائم (groups):
مهم: تم تحرير الكود في 10-9-2008 ويجب على كل المشتركين مسح جدول Groups أو Lists وإعادة تنفيذ هذا الكود في قاعدة البيانات. والتعديل عبارة عن تصميم الجدول من جديد وتفادي الأخطاء السابقة مثل listname. وغيرها.
CREATE TABLE IF NOT EXISTS `groups` ( `id` int(11) NOT NULL auto_increment, `groupname` varchar(255) collate utf8_unicode_ci default NULL, `created` datetime default NULL, `modified` datetime default NULL, `user_id` int(11), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
الآن بعض الشرح والتوضيح:
- يوجد في الكيك قواعد للمسميات سواء كانت في قاعدة البيانات أو بأسماء التوابع والأصناف لذلك سأذكرها:
- أسماء الجداول تكون بصيغة الجمع (lists – users)
- أسماء الحقول في الجداول تكون بصيغة المفرد (id – username)
- عند ربط جدول مع آخر (الربط يكون على مستوى PHP وليس على مستوى فاعدة البيانات)، يجب أن تكتب اسم الحقل من الجدول الثاني مسبوقاً باسم الجدول بالمفرد (user_id) لاحظ نريد الربط مع حقل id من جدول users.
- الحقول (created – modified) يجب أن تسميها بهذا الاسم بالضبط، حيث يقوم الكيك بالتعديل عليهم تلقائياً، فحقل (created) يقوم بالكتابة فيه عند إنشاء السجل، وحقل (modified) يقوم بتحديثه كل ما نقوم بتحديث هذا السجل لوحده! وهذا مايسميه الخبازين (الخباز هو كل اصطلاح لكل شخص يستعمل الكيك D:) بالـ automagic.
- بالنسبة لطول الحقول النصية فهي مسألة نسبية نوعاً ما تختلف بحسب كل موقع وكل مطور.
- حقول (stauts – priority) وضعت نوعهم كأرقام كي نوفر المساحة عوضاً عن محارف وهذا هو الأسلوب الأصح، ووضعت الطول 3 أرقام مما يعطينا 8 احتمالات وهذا جيد وكافي، وبرمجياً سنقوم بالموازنة بينهم (مثلاً رقم 0 يشير إلى مهمة عادية و 1 يشير إلى مهمة عاجلة وهكذا)
أرجو أن يكون الشرح واضحاً وكما ذكرت هذا الشرح ليس للمبتدئين في تطوير المواقع.












[...] التي يجب استخدامها (بالتأكيد من ضمنها الكيك). 6- تصميم قاعدة البيانات 7- البرمجة 8- التصميم 9- اختبار الموقع 10- تشغيل وحجز اسم [...]
السلام عليكم ورحمة الله وبركاته
فواضح أنها ستوفر الكثير من الجهد في التعامل مع قادعدة البيانات.
بدأت تضح ميزات استخدام الكيك
عندي اقتراحان:
الأول: ما رأيك في أن تعرض علينا البرامج التي تفضلها أو عموما البرامج الجيدة في التعامل مع mysql أنا أستخدم Navicat فهل هناك برنامج أفضل من ذلك مثلا أم لا.
الثاني: ما رأيك في كتابة الكود الذي ينشئ هذه الجداول أوتوماتيك، وهذه الفكرة ستساعدنا إن فكرنا أن نقوم بعمل صفحة setup لمشروعنا.
أرجو أن تكون الافكار واضحة.
وجزاك الله خيرا
السلام عليكم:
هذا هو الكود الذي استخدمته لإنشاء الثلاث جداول:
create table tasks
( id int(11),
title varchar(255),
status int(3),
priority int(3),
created datetime,
modified datetime,
list_id int(11) ,
PRIMARY KEY (id) );
create table users
( id int(11),
username varchar(64),
password varchar(64),
name varchar(64),
email varchar(128),
status int(3),
activation varchar(64),
created datetime,
modified datetime,
PRIMARY KEY (id) );
create table lists
( id int(11),
listname varchar(255),
created datetime,
modified datetime,
user_id int(11),
PRIMARY KEY (id) );
أرجو أن يكون مفيد.
ممتاز أخي أبو بكر سأقوم بنقلهم لهذه للتدوينة … وبالنسبة للبرامج لا أستخدم سوى PHPMyAdmin وأحياناً برنامج DB Visual Architect من حزمة VP Suite
[...] تصميم قاعدة البيانات [...]
اخي خالد فهمت من الـ sql اعلاه بان المستخدم الواحد يستطيع ان يملك اكثر من قائمة مهام لكل قائمة مهام مختلفة ؟ هل كلامي صحيح
والسؤال الثاني قمت حضرتك باضافة الحقل status في جدول المستخدم ما فائدته .
هل هو لتحديد الصلاحيات للمستخدمين ام ماذا ؟
واخيرا فما هي داينميكية الـ activation , ولماذا جعلته بالطول 64 ؟
وشكرا اخوك محمد العاني
1- نعم كلامك صحيح، يستطيع المستخدم إنشاء أي عدد من القوائم
2- الذي نريد عمله هو أنه عند التسجيل سنرسل للمستخدم رابط على بريده وعند الضغط عليه سيتفعل حسابه. فال status تعطينا حالة المستخدم هل هو مفعل أم لا حتى نسمح له بالدخول إن كان مفعلاً لحسابه.
3- هذا مايتطلبه الكيك وستعرف ذلك عندما نكمل بعملية التسجيل. فهو يولد شريط طوله 64 محرف لتفعيل التسجيل
عفواً
طيب اخي العزيز اذا كان الـ status للتفعيل – وهذا كما عهدت في تطبيقاتنا – فليس من المفروض ان نضع حقل نحدد فيه السوبر ادمن والذي يملك صلاحيات التحكم بالمستخدمين ؟
وبالنسبة لديناميكية التفعيل فانا اعرف تلك الديناميكية ولكني اريد ان اوضح اننا ممكن ان نستخدم الحقل activation نفسه للتفعيل وذلك من خلال ابدال سلسلة التفعيل البقيمة activated ولك مني تحية
لايوجد أدمن … المشروع للمستخدمين فقط ولايحق لأحد أن يرى قوائم المستخدمين، وبالنسبة لاقتراحك ممكن ذلك ولكن الأفضل فصلهم. يعني خلي كل حقل لوظيفته ولن يؤثر البايت الزائد شيئاً