سجل (علوم الحاسوب)
في علوم الحاسوب ، السجل (ويسمى أيضاً بنية ، أو نوع معرف من قبل المستخدم، أو نوع بيانات مركب ) هو بنية بيانات مركبة - مجموعة من الحقول ، ربما من أنواع بيانات مختلفة ، وعادة ما تكون ثابتة في العدد والتسلسل. [ 1 ]
على سبيل المثال، يمكن تخزين التاريخ كسجل يحتوي على حقل السنة الرقمي ، وحقل الشهر ممثلاً كنص، وحقل يوم الشهر الرقمي . وقد يحتوي سجل الدائرة على نصف قطر رقمي ومركز عبارة عن سجل نقطة يحتوي على إحداثيات س و ص .
تشمل التطبيقات البارزة نوع السجل في لغات البرمجة ، أما بالنسبة للتخزين القائم على الصفوف، فتُستخدم البيانات المنظمة كسلسلة من السجلات، مثل جداول قواعد البيانات ، أو جداول البيانات الإلكترونية ، أو ملفات القيم المفصولة بفواصل (CSV). وبشكل عام، تُخزن قيمة نوع السجل في الذاكرة ، بينما يُخزن التخزين القائم على الصفوف في وحدة تخزين خارجية .
نوع السجل هو نوع بيانات يصف هذه القيم والمتغيرات. تسمح معظم لغات البرمجة الحديثة للمبرمج بتعريف أنواع سجلات جديدة. يتضمن التعريف تحديد نوع بيانات كل حقل ومعرّف ( اسم أو تسمية) يمكن من خلاله الوصول إليه. في نظرية الأنواع ، تُفضّل أنواع المنتجات (بدون أسماء حقول) عمومًا لبساطتها، ولكن تُدرس أنواع السجلات المناسبة في لغات مثل System F-sub . بما أن السجلات النظرية للأنواع قد تحتوي على حقول من نوع دالة من الدرجة الأولى بالإضافة إلى البيانات، فإنها تستطيع التعبير عن العديد من خصائص البرمجة كائنية التوجه .
مصطلحات
في سياق التخزين، كما هو الحال في قواعد البيانات أو جداول البيانات، يُطلق على السجل غالبًا اسم صف ، ويُطلق على كل حقل اسم عمود . [ 2 ] [ 3 ] [ 4 ] [ 5 ]
في البرمجة الكائنية التوجه ، الكائن هو سجل يحتوي على حقول الحالة والطريقة.
يُشبه السجلّ المجموعة الرياضية ، مع العلم أن المجموعة قد تُعتبر سجلاً أو لا، والعكس صحيح، وذلك تبعاً للاصطلاحات ولغة البرمجة. وبالمثل، يُمكن اعتبار نوع السجلّ بمثابة نظير لغة الحاسوب للضرب الديكارتي لمجموعتين رياضيتين أو أكثر ، أو تجسيداً لنوع ضرب مجرد في لغة برمجة مُحددة.
يختلف السجل عن المصفوفة في أن عناصر السجل (حقوله) يتم تحديدها من خلال تعريف السجل، وقد تكون غير متجانسة، بينما المصفوفة عبارة عن مجموعة من العناصر من نفس النوع. [ 6 ]
يمكن اعتبار معلمات الدالة مجتمعةً بمثابة حقول سجل، ويمكن اعتبار تمرير الوسائط إلى الدالة بمثابة تعيين معلمات الإدخال لحقول السجل. على مستوى أدنى، يتضمن استدعاء الدالة سجل تفعيل أو إطار استدعاء ، يحتوي على المعلمات بالإضافة إلى حقول أخرى مثل المتغيرات المحلية وعنوان الإرجاع.
تاريخ

يمكن تتبع مفهوم السجل إلى أنواع مختلفة من الجداول والدفاتر المستخدمة في المحاسبة منذ القدم. أما المفهوم الحديث للسجلات في علوم الحاسوب، بحقول ذات نوع وحجم محددين بدقة، فقد كان موجودًا ضمنيًا في الآلات الحاسبة الميكانيكية في القرن التاسع عشر، مثل محرك باباج التحليلي . [ 7 ] [ 8 ]

كانت البطاقة المثقبة، المستخدمة في تعداد الولايات المتحدة لعام 1890 ، الوسيلة الأصلية القابلة للقراءة آليًا لتخزين البيانات (وليس للتحكم) : حيث كانت كل بطاقة مثقبة تمثل سجلًا واحدًا. قارن بين مدخلات دفتر اليومية من عام 1880 والبطاقة المثقبة من عام 1895. كانت السجلات راسخة في النصف الأول من القرن العشرين، عندما كانت معظم عمليات معالجة البيانات تتم باستخدام البطاقات المثقبة. عادةً، كان يُسجل كل سجل من ملف البيانات على بطاقة مثقبة واحدة، مع تخصيص أعمدة محددة لحقول معينة. بشكل عام، كان السجل هو أصغر وحدة يمكن قراءتها من وحدة تخزين خارجية (مثل قارئ البطاقات أو الشريط أو القرص). كانت محتويات السجلات المصممة على غرار البطاقات المثقبة تُسمى في الأصل "سجلات الوحدة" لأن البطاقات المثقبة كانت ذات أطوال محددة مسبقًا. [ 9 ] عندما تطورت أنظمة التخزين مع استخدام محركات الأقراص الصلبة والشريط المغناطيسي ، أصبحت السجلات ذات الطول المتغير هي المعيار. السجل ذو الطول المتغير هو سجل يكون حجمه بالبايت مساويًا تقريبًا لمجموع أحجام حقوله. لم يكن هذا ممكناً قبل اختراع أجهزة التخزين الأكثر تطوراً لأن جميع البطاقات المثقبة كان يجب أن تتوافق مع أطوال المستندات المحددة مسبقاً والتي يمكن للكمبيوتر قراءتها، حيث كان يجب في ذلك الوقت إدخال البطاقات فعلياً في آلة.
لم تكن معظم تطبيقات لغات الآلة ولغات التجميع المبكرة تحتوي على صيغة خاصة للسجلات، ولكن المفهوم كان متاحًا (ومستخدمًا على نطاق واسع) من خلال استخدام سجلات الفهرسة ، والعنونة غير المباشرة ، والتعليمات البرمجية ذاتية التعديل . بعض الحواسيب المبكرة، مثل IBM 1620 ، كانت تدعم عتاديًا تحديد السجلات والحقول، بالإضافة إلى تعليمات خاصة لنسخ هذه السجلات.
كان مفهوم السجلات والحقول محورياً في بعض أدوات فرز الملفات وجدولتها المبكرة ، مثل مولد برنامج التقارير (RPG) من شركة IBM .
كانت لغة كوبول أوللغة برمجةتدعم أنواع السجلات، [ 10 ] وكانت إمكانيات تعريف السجلات فيها متطورة للغاية في ذلك الوقت. تسمح اللغة بتعريف سجلات متداخلة بحقول أبجدية رقمية، وأعداد صحيحة، وكسرية ذات حجم ودقة غير محدودين، وحقول تُنسق تلقائيًا أي قيمة تُسند إليها (مثل إدراج رموز العملات، والفاصلة العشرية، وفواصل مجموعات الأرقام). يرتبط كل ملف بمتغير سجل تُقرأ منه البيانات أو تُكتب إليه. كما توفر كوبولMOVECORRESPONDINGعبارة تُسند الحقول المتناظرة لسجلين وفقًا لأسمائهما.
لم تدعم اللغات البرمجية الأولى المُصممة للحوسبة العددية، مثل فورتران (حتى فورتران 4 ) وألغول 60 ، أنواع السجلات؛ لكن الإصدارات اللاحقة منها، مثل فورتران 90 وألغول 68، أضافتها. كما افتقرت لغة البرمجة ليسب الأصلية إلى السجلات (باستثناء خلية cons المدمجة )، لكن تعبيراتها S وفرت بديلاً مناسباً. وكانت لغة البرمجة باسكال من أوائل اللغات التي دمجت أنواع السجلات بشكل كامل مع الأنواع الأساسية الأخرى في نظام أنواع متسق منطقياً. ووفرت لغة PL/I سجلات على نمط كوبول. وتوفر لغة C مفهوم السجلات باستخدام الهياكل . كما دعمت معظم اللغات المصممة بعد باسكال (مثل آدا ، وموديولا ، وجافا ) السجلات. وقدمت جافا السجلات في الإصدار 17، وقدمت سي شارب السجلات في الإصدار 17. تم إدخال السجلات إلى لغة جافا لتبسيط فئات تجميع البيانات وتقليل التعليمات البرمجية المتكررة، مما يجعل جميع الحقول والبيانات قابلة للتغيير ، ويقوم تلقائيًا بإنشاء مُنشئات ودوال جلب وأساليب تتضمن جميع الوسائط . جميع سجلات جافا ترث ضمنيًا من فئة .finalprivatebooleanequals()inthashCode()StringtoString()java.lang.Record
على الرغم من أن السجلات لم تعد تُستخدم في سياقها الأصلي (أي استخدامها فقط لتخزين البيانات)، إلا أنها أثرت في لغات البرمجة الكائنية الحديثة وأنظمة إدارة قواعد البيانات العلائقية . ولأن السجلات وفرت مرونة أكبر في طريقة تخزين البيانات ومعالجتها، فهي أنسب لتمثيل المفاهيم المعقدة في العالم الحقيقي من أنواع البيانات الأولية التي توفرها اللغات افتراضيًا. وقد أثر ذلك في لغات لاحقة مثل C++ و Python و JavaScript و Objective-C التي تلبي نفس احتياجات البرمجة من حيث المرونة. [11] الكائنات في هذه اللغات هي في الأساس سجلات مع إضافة الدوال والوراثة ، مما يسمح للمبرمجين بالتحكم في سلوك البيانات بدلاً من محتويات السجل فقط. يعتبر العديد من المبرمجين السجلات قديمة الآن لأن اللغات الكائنية تتمتع بميزات تتجاوز بكثير إمكانيات السجلات. من ناحية أخرى، يجادل العديد من المبرمجين بأن انخفاض الحمل الزائد وإمكانية استخدام السجلات في لغة التجميع يجعلانها لا تزال ذات صلة عند البرمجة بمستويات تجريد منخفضة . اليوم، تأثرت لغات البرمجة الأكثر شيوعًا على مؤشر TIOBE ، وهو مؤشر على شعبية لغات البرمجة، بشكل أو بآخر بمفهوم السجلات نظرًا لكونها لغات كائنية التوجه. [ 12 ] كما تأثرت لغات الاستعلام مثل SQL ولغة استعلام الكائنات بمفهوم السجلات. تسمح هذه اللغات للمبرمج بتخزين مجموعات من البيانات، وهي في جوهرها سجلات، في جداول. [ 13 ] ويمكن استرجاع هذه البيانات باستخدام مفتاح أساسي . الجداول نفسها هي أيضًا سجلات قد تحتوي على مفتاح خارجي : وهو مفتاح يشير إلى بيانات في جدول آخر.
نوع السجل
العمليات
تشمل العمليات الخاصة بنوع السجل ما يلي:
- تعريف نوع السجل، بما في ذلك موضع ونوع واسم كل حقل (إن وجد).
- تعريف سجل؛ متغير من نوع سجل
- إنشاء قيمة سجل؛ ربما مع تهيئة قيمة الحقل
- قراءة وكتابة قيمة حقل السجل
- مقارنة سجلين لتحديد التساوي
- حساب قيمة التجزئة القياسية للسجل
تُوفّر بعض لغات البرمجة أدواتٍ لحصر حقول السجل. هذه الأداة ضرورية لتنفيذ خدماتٍ مُحدّدة مثل تصحيح الأخطاء ، وجمع البيانات المهملة ، والتسلسل . وهي تتطلّب درجةً من تعدد أشكال الأنواع .
في السياقات التي تدعم تصنيف السجلات الفرعية، تشمل العمليات إضافة حقول السجل وحذفها. يشير نوع السجل المحدد إلى وجود مجموعة محددة من الحقول، ولكن قد تحتوي قيم هذا النوع على حقول إضافية. وبالتالي، ينتمي السجل الذي يحتوي على الحقول x و y و z إلى نوع السجلات التي تحتوي على الحقلين x و y ، وكذلك السجل الذي يحتوي على الحقول x و y و r . ويكمن الأساس المنطقي في أن تمرير سجل ( x , y , z ) إلى دالة تتوقع سجل ( x , y ) كوسيط يجب أن ينجح، لأن هذه الدالة ستجد جميع الحقول التي تحتاجها داخل السجل. قد تواجه العديد من طرق التنفيذ العملي للسجلات في لغات البرمجة صعوبة في السماح بهذا التباين، لكن هذه المسألة تُعد سمة أساسية لأنواع السجلات في السياقات النظرية.
التعيين والمقارنة
تسمح معظم لغات البرمجة بالربط بين السجلات التي لها نفس نوع السجل تمامًا (بما في ذلك أنواع الحقول وأسمائها، وبالترتيب نفسه). ومع ذلك، وبحسب اللغة، قد يُعتبر نوعان من بيانات السجلات مُعرّفان بشكل منفصل نوعين مختلفين حتى لو كان لهما نفس الحقول تمامًا.
قد تسمح بعض اللغات أيضًا بالربط بين السجلات التي تحمل حقولها أسماءً مختلفة، وذلك بمطابقة قيمة كل حقل مع متغير الحقل المقابل له بناءً على موقعه داخل السجل؛ فعلى سبيل المثال، يمكن ربط عدد مركب ذي حقول تُسمى realو بمتغير سجل نقطة ثنائية الأبعاد ذي حقول و . في هذه الحالة، لا يزال من الضروري أن يكون للمعاملين نفس تسلسل أنواع الحقول. قد تشترط بعض اللغات أيضًا أن يكون للأنواع المتناظرة نفس الحجم والترميز، بحيث يمكن ربط السجل بأكمله كسلسلة بتات غير مُفسَّرة . بينما قد تكون لغات أخرى أكثر مرونة في هذا الصدد، وتشترط فقط إمكانية ربط كل حقل قيمة بشكل صحيح بحقل المتغير المقابل له؛ فعلى سبيل المثال، يمكن ربط حقل عدد صحيح قصير بحقل عدد صحيح طويل ، أو العكس.imagXY
قد تقوم لغات أخرى (مثل COBOL ) بمطابقة الحقول والقيم من خلال أسمائها، بدلاً من مواقعها.
تنطبق هذه الاحتمالات نفسها على مقارنة قيمتين من سجلات البيانات للتأكد من تساويهما. وقد تسمح بعض اللغات أيضًا بمقارنة الترتيب (' < و' > ')، باستخدام الترتيب المعجمي بناءً على مقارنة الحقول الفردية.
يسمح PL/I بكلا النوعين السابقين من التعيين، كما يسمح أيضًا بتعبيرات البنية ، مثل a = a+1;حيث يكون "a" سجلًا، أو بنية في مصطلحات PL/I.
اختيار الحقل التوزيعي في Algol 68
في لغة Algol 68، إذا Ptsكانت لدينا مصفوفة من السجلات، كل منها يحتوي على حقول عددية صحيحة X، Yفيمكن كتابة للحصول على مصفوفة من الأعداد الصحيحة، تتكون من حقول جميع عناصر المصفوفة . ونتيجة لذلك، فإن العبارتين و سيكون لهما نفس التأثير.Y of PtsYPtsY of Pts[3] := 7(Y of Pts)[3] := 7
عبارة باسكال "مع"
في لغة باسكال ، with R do Sيُنفّذ الأمر تسلسل الأوامر Sكما لو أن جميع حقول السجل Rمُعرّفة كمتغيرات. على غرار إدخال مساحة اسم مختلفة في لغة كائنية التوجه مثل C# ، لم يعد من الضروري استخدام اسم السجل كبادئة للوصول إلى الحقول. لذا، بدلاً من كتابة يمكن كتابة .Pt.X := 5; Pt.Y := Pt.X + 3withPtdobeginX:=5;Y:=X+3end
التمثيل في الذاكرة
يختلف تمثيل السجل في الذاكرة باختلاف لغة البرمجة. غالبًا ما تُخزَّن الحقول في مواقع ذاكرة متتالية، بنفس ترتيب تعريفها في نوع السجل. قد ينتج عن ذلك تخزين حقلين أو أكثر في نفس كلمة الذاكرة؛ في الواقع، تُستخدم هذه الخاصية بكثرة في برمجة الأنظمة للوصول إلى بتات محددة من كلمة الذاكرة. من جهة أخرى، تُضيف معظم المترجمات حقول حشو، غير مرئية في الغالب للمبرمج، للامتثال لقيود المحاذاة التي يفرضها الجهاز - على سبيل المثال، أن حقل الفاصلة العائمة يجب أن يشغل كلمة واحدة.
قد تُنفذ بعض اللغات السجل على شكل مصفوفة من العناوين التي تشير إلى الحقول (وربما إلى أسمائها و/أو أنواعها). غالبًا ما تُنفذ الكائنات في اللغات الموجهة للكائنات بطرق معقدة نوعًا ما، لا سيما في اللغات التي تسمح بتوريث فئات متعددة .
سجلات ذاتية التعريف
السجل المُعرِّف ذاتيًا هو نوع من السجلات يحتوي على معلومات لتحديد نوع السجل وتحديد موقع المعلومات داخله. قد يحتوي على إزاحات العناصر؛ وبالتالي، يمكن تخزين العناصر بأي ترتيب أو حذفها. [ 14 ] يمكن تفسير المعلومات المخزنة في السجل المُعرِّف ذاتيًا على أنها بيانات وصفية للسجل، وهي مشابهة لما يُتوقع وجوده في بيانات يونكس الوصفية المتعلقة بملف، والتي تحتوي على معلومات مثل وقت إنشاء السجل وحجمه بالبايت . بدلاً من ذلك، يمكن أن تتبع عناصر السجل المختلفة، التي يتضمن كل منها مُعرِّفًا خاصًا به، بعضها بعضًا بأي ترتيب.
حقل رئيسي
قد يتضمن السجل، خاصةً في سياق التخزين القائم على الصفوف، حقولًا رئيسية تسمح بفهرسة سجلات المجموعة. المفتاح الأساسي فريد في جميع السجلات المخزنة؛ إذ لا يوجد منه سوى نسخة واحدة. [ 15 ] بعبارة أخرى، لا يمكن أن يوجد تكرار لأي مفتاح أساسي. على سبيل المثال، قد يحتوي ملف الموظف على رقم الموظف واسمه وقسمه وراتبه. سيكون رقم الموظف فريدًا في المؤسسة وسيكون هو المفتاح الأساسي. اعتمادًا على وسيط التخزين وتنظيم الملفات، قد يكون رقم الموظف مفهرسًا - أي يُخزن أيضًا في ملف منفصل لتسريع عملية البحث. رمز القسم ليس بالضرورة فريدًا؛ فقد يكون مفهرسًا أيضًا، وفي هذه الحالة يُعتبر مفتاحًا ثانويًا أو مفتاحًا بديلًا . [ 16 ] إذا لم يكن مفهرسًا، فسيتعين فحص ملف الموظف بالكامل لإنتاج قائمة بجميع الموظفين في قسم معين. عادةً ما تُختار المفاتيح بطريقة تقلل من احتمالية ربط قيم متعددة بمفتاح واحد. على سبيل المثال، لا يُعتبر حقل الراتب عادةً قابلاً للاستخدام كمفتاح لأن العديد من الموظفين من المحتمل أن يكون لديهم نفس الراتب.
انظر أيضاً
- الكتلة (تخزين البيانات) - سلسلة من البتات أو البايتات ذات حجم ثابت
- نوع البيانات المركب – بنية لغة البرمجة
- التسلسل الهرمي للبيانات – التنظيم المنهجي للبيانات
- تركيب الكائنات – طريقة في برمجة الحاسوب لتكوين أنواع الكائنات ذات المستوى الأعلى
- بنية البيانات السلبية – مصطلح آخر للسجل
- نوع الاتحاد – نوع بيانات يسمح بقيم تنتمي إلى أنواع بيانات متعددة مختلفة
مراجع
- ^ ماتياس فيليسن (2001). كيفية تصميم البرامج . مطبعة معهد ماساتشوستس للتكنولوجيا. ص 53 ، 60. ردمك 978-0262062183.
- ↑ "تعريفات قاموس علوم الحاسوب" . طلاب الحوسبة . تم الاطلاع عليه بتاريخ 22 يناير 2018 .
- ^ رادفاني ، تيبور (2014). نظم إدارة قواعد البيانات . كلية Eszterházy كارولي. ص. 19. مؤرشفة من الأصلي بتاريخ 23-09-2018 . تم الاسترجاع في 23 سبتمبر 2018 .
- ↑ كاهات، أتول (2006). مقدمة في أنظمة إدارة قواعد البيانات . بيرسون. ص 3. ISBN 978-81-317-0078-5تم الاطلاع عليه بتاريخ 23 سبتمبر 2018 .
- ↑ كونولي ، توماس (2004). حلول قواعد البيانات: دليل خطوة بخطوة لبناء قواعد البيانات ( الطبعة الثانية). بيرسون. ص 7. ISBN 978-0-321-17350-8.
- ↑ باب، توبياس؛ كيريلتشيف، فاسيلي؛ بولز، كارل فريدريش؛ هيرشفيلد، روبرت (13 يناير 2017). "هياكل بيانات السجلات في Racket: تحليل الاستخدام والتحسين" . مجلة ACM SIGAPP للحوسبة التطبيقية . 16 (4): 25-37 . doi : 10.1145/3040575.3040578 . ISSN 1559-6915 . S2CID 14306162 .
- ↑ بروملي، آلان (أكتوبر 1998). "المحرك التحليلي لتشارلز باباج، 1838" . حوليات معهد مهندسي الكهرباء والإلكترونيات لتاريخ الحوسبة . 20 (4): 29-45 . doi : 10.1109/85.728228 . S2CID 2285332. تاريخ الاسترجاع: 23 سبتمبر 2018 .
- ↑ سويد، دورون. "الحوسبة الآلية: تشارلز باباج والطريقة الحسابية" . مجلة رذرفورد . تم الاطلاع عليه بتاريخ 23 سبتمبر 2018 .
- ↑ إدوين د. رايلي؛ أنتوني رالستون؛ ديفيد هيمندينجر، محرران (2003). موسوعة علوم الحاسوب ( الطبعة الرابعة). تشيتشستر، المملكة المتحدة: وايلي. ISBN 978-1-84972-160-8. OCLC 436846454 .
- ↑ سيبستا ، روبرت و. (1996). مفاهيم لغات البرمجة ( الطبعة الثالثة). شركة أديسون-ويسلي للنشر، ص 218. ISBN 0-8053-7133-8.
- ↑ ليفنز، غاري ت.؛ وويل، ويليام إي. (1990). "الاستدلال حول البرامج الموجهة للكائنات التي تستخدم الأنواع الفرعية" . وقائع المؤتمر الأوروبي حول البرمجة الموجهة للكائنات حول أنظمة ولغات وتطبيقات البرمجة الموجهة للكائنات - OOPSLA/ECOOP '90 . نيويورك، نيويورك، الولايات المتحدة الأمريكية: مطبعة ACM. الصفحات 212-223 . doi : 10.1145/97945.97970 . ISBN 0-201-52430-9. S2CID 46526 .
- ↑ "فهرس: شركة جودة البرمجيات" . TIOBE.com . تم الاطلاع عليه بتاريخ 1 مارس 2022 .
- ↑ "ما هي قاعدة البيانات العلائقية (RDBMS)؟" . أوراكل . تم الاطلاع عليه بتاريخ 28 فبراير 2022 .
- ↑ كرايمر، مارتن ر. "دليل مطور تطبيقات وحدة التحكم في الإدخال/الإخراج (IOC) لنظام EPICS" . مختبر أرغون الوطني . تم الاطلاع عليه بتاريخ 25 نوفمبر 2015 .
- ↑ "إضافة أو تغيير المفتاح الأساسي لجدول في Access" . support.microsoft.com . تم الاطلاع عليه بتاريخ 1 مارس 2022 .
- ↑ "المفتاح البديل - الأسئلة الشائعة حول أوراكل" . www.orafaq.com . تم الاطلاع عليه بتاريخ 1 مارس 2022 .
- أنواع البيانات
- أنواع البيانات المركبة
