لا تزال الهياكل الشجرية شائعة جدًا في تطبيقاتنا، مثل أدلة الملفات وBBS وإعدادات الأذونات وإعدادات الأقسام وما إلى ذلك.
تعتمد جميع معلوماتالبيانات
هذه بنية هرمية، وهو أمر يصعب التعبير عنه بوضوح في قاعدة بياناتنا العلائقية الحالية.فكيف نتعامل
مع مشاكل بنية الشجرة في البرنامج
؟في الآونة الأخيرة، قام المؤلف بحل هذه المشكلة بسهولة من خلال برنامج إدارة حقوق ASP، والآن سأقوم بحلها للقراء.
أولاً، يجب تحويل نموذج البيانات الهرمي إلى نموذج بيانات علائقية. بمعنى آخر، كيفية تصميم بنية البيانات هذه في قواعد البيانات ACCESS وSQL SERVER
وORACLE وقواعد البيانات العلائقية الأخرى.
لنأخذ مثالا مثل البيانات التالية:
إدارة الوثائق 1
|----وثيقة جديدة 2
|----تعديل الوثيقة 3
|----أرشيف المستندات 4
|----عرض المعلومات المؤرشفة 5
|----حذف المعلومات المؤرشفة 6
|.|----حذف الوثائق التاريخية 7
|.|----حذف الوثيقة الرسمية 8
|----إدارة النظام 9
|----إدارة المستخدم 10
إدارة شؤون الموظفين 11
الإدارة 12
الإدارة المالية 13
هذه بيانات هيكل هرمي نموذجية للغاية، لذا فكر في الأمر، وكيفية التعبير عنها في شكل جدول ثنائي الأبعاد؟
يبدو الأمر صعبافي البداية
، أليس كذلك؟ ولكن بعد دراسة متأنية، لا تزال هناك طريقة لاستغلالها.
بهذه الطريقة، يمكن اعتبار جميع الأذونات المذكورة أعلاه بمثابة حقل إذن واحد، ثم يجب أن يكون لحقل الإذن هذا قيمة معرف.
نقوم
بعد ذلك بإضافة حقل آخر بالقوة إلى جدول البيانات الارتباطية هذا - حقل المعرف الثانوي، الذي يشير إلى مستوى الإذن الذي ينتمي إليه هذا الإذن
، أي قيمة المعرف التي تنتمي إليها قيمة المعرف هذه. على سبيل المثال: قيمة معرف إذن "عرض معلومات الأرشيف" هي "5"، وهي تابعة لإذن "أرشفة
المستندات
"، فيجب أن تكون قيمة حقل المعرف الفرعي الخاص بها "4".حسنًا، إذا كان من الممكن فهم ذلك، فهذا يعني
أن
عمل تحويل علاقتنا قد اكتمل بشكل أساسي.لنبدأ في تصميم جدول البيانات العلائقية هذا (مع أخذ Sql Server 7.0 كمثال):
+-----------+-----------+----- --- ---+----------+---------+
|. اسم الحقل |. معنى الحقل |. حجم الحقل |
+-----------+-------------+--------------------------------- ---------+
|. معرف الإذن |
|. PowerName |. اسم الإذن |. Varchar |
|.معلومات الإذن |.فارتشار 500 |
|. معرف ينتمي |
+-----------+-------------+--------------------------------- ---------+
حسنًا، بمجرد تصميم الهيكل، يمكنك بسهولة إدخال بيانات الاختبار الخاصة بك.
بعد ذلك، سنركز على كيفية تقليد البنية الهرمية في صفحة الويب لعرض برنامج ASP بهذه الوظيفة، وهذه أيضًا هي الخطوة الأكثر أهمية.
قائمة البرامج: powerlist.asp
<%
'اتصال بقاعدة البيانات
مجموعة conn=Server.CreateObject("ADODB.Connection")
conn.open "driver={SQL Server};server=chaiwei;DATABASE=chaiwei;UID=sa;PWD="
'فتح كافة بيانات الطبقة الأصلية
مجموعة rs=Server.CreateObject("ADODB.Recordset")
rs.Open "اختر * من الصلاحيات التي يكون فيها التابع خاليًا بترتيب powerid"، conn,1,3
'تعيين القيمة الأولية لمتغير تعبير رقم المستوى
format_i=1
'قائمة قسم البرنامج الرئيسي
افعل بينما لا rs.eof
'طباعة معلومات بيانات الطبقة الأصلية
Response.write "<a href='powerlist.asp?SelfID=" & rs("powerid") & "&BelongID=" & rs("belongid") & "'>" & rs("powername") & "< /أ>"
Response.write "<br>"
'استدعاء الروتين الفرعي، معالجة بيانات الطبقة الفرعية
استدعاء ListSubPower(rs("powerid"))
حلقة
rs.movenext
'أغلق مجموعة بيانات الطبقة الأصلية
rs. Close
تعيين RS=لا شيء
"الروتين الفرعي لمعالجة بيانات الطبقة الفرعية."
Sub ListSubPower(id)
'افتح جميع معلومات بيانات الطبقة الفرعية التابعة لمعرف الطاقة العلوي
تعيين rs_sub=Server.CreateObject("ADODB.Recordset")
rs_sub.Open "اختر * من الصلاحيات التي تنتمي إليها =" & id & "الترتيب حسب powerid"، conn,1,3
'بيانات الطبقة الفرعية للعمود
افعل بينما لا rs_sub.eof
'مستوى رقم التعبير متغير التراكم التدريجي
format_i=format_i+1
'التحكم في تنسيق المسافة البادئة للحلقة، لأن المستويين العلوي والثاني لا يتطلبان مسافة بادئة، لذلك يتم الرجوع إلى مقطع البرنامج هذا من المستوى الثالث
لـ i=format_i إلى الخطوة 3 -1
الرد.اكتب "|"
الرد.اكتب " "
التالي
"طباعة معلومات بيانات الطبقة الفرعية".
استجابة.كتابة " |----"
Response.write "<a href='powerlist.asp?SelfID=" & rs_sub("powerid") & "&BelongID=" & rs_sub("belongid") &"'>" & rs_sub("powername") & "< /أ>"
Response.write "<br>"
'استدعاء الروتين الفرعي نفسه بشكل متكرر لمعالجة بيانات الطبقة الفرعية تدريجيًا
ListSubPower(rs_sub("powerid"))
rs_sub.movenext
حلقة
'يشير عدد المستويات إلى أن المتغير يتناقص تدريجياً
format_i=format_i-1
'أغلق مجموعة بيانات الطبقة الفرعية
rs_sub.إغلاق
تعيين rs_sub=لا شيء
نهاية الفرعية
%>
في برنامج powerlist.asp، نقوم أولاً بفتح بيانات المستوى الأعلى وعرضها في الحلقة، ثم نقوم بتصميم روتين فرعي ListSubPower، والذي يتم استدعاؤه في الحلقة من خلال a تقوم الخوارزمية العودية بفتح معلومات بيانات طبقة الروتين الفرعي، وتستدعي نفسها بشكل متكرر في الحلقة الداخلية للروتين الفرعي لتوسيع طبقة البيانات العميقة بطبقة.
بالإضافة إلى ذلك، يتم استخدام متغير ثابت format_i في البرنامج للتحكم في تنسيق عرض المسافة البادئة.
تقوم هذه المقالة بمحاولة بسيطة لتصميم البيانات والتحكم في البرنامج في بنية الشجرة. والغرض من ذلك هو إلهام الآخرين. وآمل أن يحصل القراء على مزيد من الإلهام من هذه المقالة.