أكثر

كيف يمكنني تغيير نوع حقل جدول البيانات الجدولية من سلسلة إلى مزدوجة في QGIS؟


أنا أعمل على QGIS 2.2 ، ولا يمكنني تعديل جدول السمات الخاص بي لتغيير نوع الحقل من سلسلة إلى مزدوجة.

لقد مررت بالعديد من البرامج التعليمية. - لا يمكنني تشغيل البرنامج المساعد table manager ، ربما لأن أحدث إصدار له هو qgis 2.0 ، (حسنًا ، يبدو أنه معطل في واجهة مستخدم مدير الإضافات).

  • لا يمكنني تحرير الطبقة الخاصة بي حتى أتمكن من استخدام حاسبة المجال (كما هو منصوص عليه في العديد من البرامج التعليمية).

  • أنا لست على دراية بالبيثون لاستخدام وحدة التحكم في الثعبان


للقيام بذلك ، يفضل إنشاء حقل آخر بنوع مزدوج ونسخ حقل السلسلة فيه. على سبيل المثال ، في الصورة التالية ، قمت بإنشاء حقل السلسلة "myString" (جلسة التحرير) ووضعت فيه القيمة "5.78453". يمكنك التأكد من أن النوع عبارة عن سلسلة لأنه يتم محاذاته إلى اليسار.

في الصورة أدناه ، يمكن ملاحظة إنشاء الحقل "myDouble" (جلسة التحرير) واستنساخ قيمها من حقل "myString".

بعد إدخال ، يمكن ملاحظة أنه تم إنشاء حقل "myDouble" كما هو متوقع (ويمكن مسح حقل "myString").


باختصار: من الممكن باستخدام أمر تغيير العمود فقط إذا كان نوع البيانات المعدلة متوافقًا مع تعديل حديث. بالإضافة إلى ذلك ، فمن المستحسن أن يتم ذلك مع المعاملة.

على سبيل المثال: يمكنك تغيير عمود من varchar (50) إلى nvarchar (200) ، مع برنامج نصي أدناه.

يحرر: بخصوص الخطأ الذي تم نشره أثناء تغيير نوع العمود.

** خطأ في تحويل نوع البيانات nvarchar إلى عدد عشري. **

تتمثل إحدى الطرق في إنشاء عمود جديد وتحويل كل الأشياء الجيدة (قابلة للتحويل ومتوافقة) إلى العمود الجديد. بعد ذلك ، قد ترغب في تنظيف السجلات التالفة التي لا يتم تحويلها ، وحذف العمود القديم وإعادة تسمية العمود المضاف حديثًا والمعبأ مرة أخرى إلى الاسم الأصلي. مهم: استخدم بيئة الاختبار لجميع هذه التلاعبات أولاً. عادة ، يتحول اللعب بطاولات الإنتاج إلى ممارسة سيئة لإفساد الأمور.

مراجع للبحث عن مزيد من المناقشات حول منشورات SE مماثلة:


لإجراء بعض التغيير على db الموجود ، يمكنك تعديل نوع العمود باستخدام change () في الترحيل.

هذا ما يمكنك فعله

يرجى ملاحظة أنك بحاجة إلى إضافة مذهب / دبال الاعتماد على composer.json لمزيد من المعلومات يمكنك العثور عليها هنا http://laravel.com/docs/5.1/migrations#modifying-columns

لم يعمل الحل القياسي بالنسبة لي ، عند تغيير النوع من نص ل طويل.

قد تكون هذه مسألة عقيدة. مزيد من المعلومات هنا.

هناك طريقة أخرى للقيام بذلك وهي استخدام طريقة السلسلة () ، وتعيين القيمة على الحد الأقصى لطول نوع النص:

2018 الحل ، لا تزال الإجابات الأخرى صالحة ولكن أنت لا تحتاج إلى استخدام أي تبعية:

أولاً ، عليك إنشاء هجرة جديدة:

ثم في ملف الترحيل هذا () ، جرب:

إذا لم تقم بتغيير الحجم الافتراضي فسيكون varchar (191) ولكن إذا كنت تريد تغيير حجم الحقل:

جميع الإجابات الأخرى صحيحة لكن قبل الركض

تأكد من تشغيل هذا الرمز أولاً

RuntimeException: تغيير أعمدة "عناصر" الجدول يتطلب تثبيت Doctrine DBAL "العقيدة / dbal".

يتطلب الملحن أولاً عقيدة / dbal ، ثم:

ليست إجابة حقًا ، ولكنها مجرد ملاحظة حول - & gtchange ():

يمكن "تغيير" أنواع الأعمدة التالية فقط: bigInteger ، binary ، boolean ، date ، dateTime ، dateTimeTz ، decimal ، number الصحيح ، json ، longText ، mediumText ، smallInteger ، string ، text ، time ، unsignedBigInteger ، unsignedInteger and unsignedSmallInteger.

إذا لم يكن عمودك واحدًا من هؤلاء ، فستحتاج إما إلى إسقاط العمود أو استخدام العبارة البديلة كما هو مذكور في الإجابات الأخرى.


هل يمكنني تغيير حقل خاص للقراءة فقط في C # باستخدام الانعكاس؟

أنا أتفق مع الإجابات الأخرى في أنه يعمل عموما ولا سيما مع تعليق E. Lippert أن هذا ليس سلوكًا موثقًا وبالتالي ليس رمزًا مقاومًا للمستقبل.

ومع ذلك ، لاحظنا أيضًا مشكلة أخرى. إذا كنت تقوم بتشغيل التعليمات البرمجية الخاصة بك في بيئة ذات أذونات مقيدة ، فقد تحصل على استثناء.

لقد كان لدينا للتو حالة يعمل فيها الكود الخاص بنا بشكل جيد على أجهزتنا ، لكننا تلقينا VerificationException عندما تم تشغيل الكود في بيئة مقيدة. كان الجاني بمثابة دعوة للتفكير لمُصمم حقل للقراءة فقط. لقد نجحت عندما أزلنا تقييد القراءة فقط لهذا الحقل.

لقد سألت لماذا تريد كسر التغليف بهذا الشكل.

أستخدم فئة مساعد الكيان لترطيب الكيانات. يستخدم هذا الانعكاس للحصول على جميع خصائص الكيان الفارغ الجديد ، ويطابق اسم الخاصية / الحقل مع العمود في مجموعة النتائج ، ويعينها باستخدام propertyinfo.setvalue ().

لا أريد أن يتمكن أي شخص آخر من تغيير القيمة ، لكنني لا أريد بذل كل الجهود لتخصيص طرق ترطيب الكود لكل كيان أيضًا.

العديد من عملياتي المخزنة ترجع مجموعات نتائج لا تتوافق مباشرة مع الجداول أو طرق العرض ، لذا فإن الكود العام لـ ORM لا يفعل شيئًا من أجلي.

لقد أمضيت يومًا للتو في إصلاح خطأ سريالي حيث لا يمكن أن تكون الكائنات من النوع المعلن.

نجح تعديل حقل القراءة فقط مرة واحدة. ولكن إذا حاولت تعديله مرة أخرى ، فستواجه مثل هذه المواقف:

كان هذا في وقت تشغيل Mono (محرك لعبة Unity).

طريقة أخرى بسيطة للقيام بذلك باستخدام غير آمن (أو يمكنك تمرير الحقل إلى طريقة C عبر DLLImport وتعيينه هناك).

الجواب نعم ولكن الأهم:

لماذا تريد؟ يبدو أن كسر التغليف المتعمد فكرة سيئة للغاية بالنسبة لي.

إن استخدام التفكير لتغيير حقل للقراءة فقط أو ثابت يشبه الجمع بين قانون النتائج غير المقصودة وقانون مورفي.

أريد فقط أن أضيف أنه إذا كنت بحاجة إلى القيام بهذه الأشياء لاختبار الوحدة ، فيمكنك استخدام:

ب) ستظل بحاجة إلى مثيل PrivateObject ، ولكن يمكنك إنشاء كائنات "Accessor" باستخدام Visual Studio. الكيفية: إعادة إنشاء الموصّلات الخاصة

إذا كنت تقوم بتعيين حقول خاصة لكائن في التعليمات البرمجية الخاصة بك خارج اختبار الوحدة ، فسيكون ذلك مثالاً على "رائحة الكود" أعتقد أنه ربما يكون السبب الآخر الوحيد الذي قد ترغب في القيام بذلك هو إذا كنت تتعامل مع طرف ثالث مكتبة ولا يمكنك تغيير رمز الفئة المستهدفة. حتى مع ذلك ، ربما ترغب في الاتصال بالطرف الثالث ، وشرح موقفك ومعرفة ما إذا كانوا لن يمضيوا قدمًا ويغيروا الكود الخاص بهم لتلبية احتياجاتك.


6 أجوبة 6

باستخدام "إضافة ملف محدد بفاصلة" بدلاً من زر طبقة المتجهات ، سوف يقرأه QGIS مع أعمدة الأرقام كأعمدة.
سيتم فتح نافذة حوار حيث يمكنك تغيير حرف التحديد إلى نقطتين أو فاصلة منقوطة أو علامة تبويب أو غيرها.
إذا كان المقصود استخدام csv كجدول (وليس طبقة س ص أو حدث) ، فيجب عليك طلب عدم وجود هندسة.
هنا لديك مثال (آسف على اللغة الغريبة).

لقد فعلت ذلك (qgis 2.6) ، وعمل كل شيء بسلاسة.
أتمنى أن يساعدك هذا.
عسير

شكرا للمشكلة - يعمل!

& # 8211 & # 160robert tuw
25 نوفمبر 2014 الساعة 14:58

المشكلة لا تزال موجودة في 2.18 لتر وكذلك في 3.4 لتر. ولا تزال الإجابة سارية (@ Asier). استخدم فتح "مدير مصدر البيانات / نص محدد" وحدد الإعدادات وفقًا لخصائص ملفك! لكن (!) انتبه إلى ملف csv نظيف. لقد حصلت للتو على جلسة مدتها ساعتان لأن 1. صف واحد من حقول الأرقام الخاصة بي يحتوي على قيمة فارغة (أي NoData) 2. أضاف روتين تصدير csv حقلين فارغين إلى ملف csv الخاص بي في نهاية الجدول. . ينتج عنه ملف csv بقيم سلسلة بدلاً من أرقام داخل الحقول الرقمية

& # 8211 & # 160robert tuw
8 نوفمبر 2018 الساعة 16:46

قم أولاً بحفظ ملف / بيانات Excel كملف CSV.
افتح QGIS ثم قم بتحميل خريطة طبقة المتجهات التي تريد ضمها إلى ملف .csv.
ثم قم بتحميل ملف .csv على هيئة Text Delimited Layer.
ثم حدد مربع تنسيق الملف كقيم مفصولة بفواصل (CSV)
ثم حدد المربع كـ No Geometry (بيانات السمات فقط) ، انقر فوق OK
سيؤدي هذا إلى إضافة ملف CSV الخاص بك. انقر نقرًا مزدوجًا فوق ملف CSV ، وانقر فوق حقل ويمكنك رؤية البيانات كأرقام صحيحة ، وليس كسلسلة. هذا ما تريده.

يمكنك الآن ضم ملف CSV إلى بيانات طبقة المتجه عن طريق تحديد طبقة الإدخال ، وربط الطبقة والطبقة المستهدفة.
عند النقر فوق "موافق" ، يتم ضم بياناتك ويمكنك التحقق مرة أخرى من الحقل وسترى الأعمدة المقصودة على أنها أعداد صحيحة. لقد فعلت هذا الإصدار 2.6 من QGIS

في الواقع ، تحويل ملف خيط المجال ل حقيقة لا يبدو أنه يعمل بعد الآن. هل هذا خطأ؟

ولكن يمكنك إنشاء حقل آخر بناءً على حقل موجود. تعيين نوع و الاحكام (إذا كان حقيقيًا) وحدد التنسيق مع الوظيفة المناسبة (هنا toreal ()). انظر اللقطة في الاسفل :

قيمة السلسلة الخاصة بي في اختبار المجال وأنا أقوم بتحويله إلى حقيقي بلدي الحقيقي مجال.

حسنًا - بالطبع لقد وجدت بعض "الحلول العملية". وتمكنت أخيرًا من إجراء استيراد ، وهذا يعمل (thx للمدخلات للجميع!!! - خطأي كان له عائد / فاصل رئيسي في ملف csvt: :(). & # 60br & # 62 ولكن لا يزال - هذا ليس بالضبط سؤالي الأولي. أنتج qgis إخراج csv عبر "مصفوفة المسافة" وسأكون سعيدًا حقًا إذا كان بإمكانه كتابة csvt أيضًا. وإلا يجب أن أعلم طلابي كيفية التعامل مع الحلول المذكورة أعلاه. وهو أمر جيد - ولكن ليست أسهل طريقة بالفعل.

& # 8211 & # 160robert tuw
11 مارس 2014 الساعة 12:10

roberttuw ، ربما يمكنك تعديل سؤالك الأصلي بهذه المعلومات ، و / أو تحديد أفضل إجابة على النحو المقبول؟

& # 8211 & # 160Simbamangu
15 فبراير 2015 الساعة 10:17

اذا أنت السحب والإفلات ملف csv في لوحة Layers ، كل شيء يعمل كما هو متوقع! (تم اختباره بواسطة QGIS 2.2.0 و 2.0.1 و 1.8.0 و 1.7.4)

تعمل إجابة سورين (الاستيراد كملف نصي محدد ، بدون إحداثيات X / Y) بشكل جيد في QGIS 2.8 (ربما لاحقًا أيضًا) ولكن ليس في QGIS 2.16. لا تزال القيم الرقمية تعامل بشكل خاطئ كنص. الحلول البديلة التي رأيتها (إنشاء ملف CSVT أو استخدام أداة Defactor) معقدة للغاية ومن المحتمل أن تستغرق وقتًا طويلاً (على سبيل المثال ، لدي جدول للصحة العامة يحتوي على مائة عمود - على فترات متفاوتة - هل سأجلس حقًا واكتب رأس CSVT مع تسمية كل عنوان بشكل صحيح على أنه "نص" أو "int" أو أيا كان؟).

يعد استيراد البيانات المجدولة عملية أساسية ويجب أن تكون بسيطة قدر الإمكان للحفاظ على قابلية استخدام QGIS وجاذبيته للمستخدم غير المطور الذي يريد ببساطة قضاء أكبر وقت ممكن مع البيانات الفعلية ، وليس مع الحلول اللازمة للوصول إلى تلك البيانات.

لذا ، هل يمكنني مناشدة مجتمع تطوير QGIS لجعل تبسيط هذه العملية أولوية؟

لا أعرف كيفية "رفع التذكرة" ، لذلك ، إذا كان ذلك ضروريًا ، سأكون ممتنًا لبعض المساعدة.

صحيح - لا يزال لا يعمل بشكل صحيح في 2.18 و 3.4 (!). إذا كان لديك برنامج Excel على جهازك ، فيمكنك فتح ملف csv باستخدام Excel وحفظه بتنسيق xls أو xlsx. إذا لم يكن هناك أي نوع من عدم التطابق (مثل txt أو NoData أو الفراغات داخل الحقول الرقمية أو الحقول الفارغة أو الصفوف) ، فستحصل على xls (x) الذي سيعمل كمدخل في 2.18 و 3.4. وإذا كنت حقًا بحاجة إلى csv + csvt ، فيمكنك تصدير هذا الجدول باستخدام تصدير qgis وإنشاء ملف csvt صالح عن طريق تعيين خيار التصدير المقابل)

& # 8211 & # 160robert tuw
9 نوفمبر 2018 الساعة 7:43

يجب أن يكون التنسيق الصحيح لملف csv هو المحدد ، مع ، كمحدد لملف csvt. يبدو أن هذا هو الخطأ في مثالك.


BOOL و BOOLEAN هما مرادفان لـ TINYINT في MySQL. راجع مستندات MySQL: نظرة عامة على النوع الرقمي

ربما تريد استخدام نوع بيانات BIT.

لا تدعم MySQL القيم المنطقية الحقيقية وفقًا لـ SQL القياسي. يستخدم القيم الصحيحة 1 و 0 على التوالي للصواب والخطأ. إنه يدعم الكلمات الرئيسية صواب وخطأ ، ولكن يتم تعيينها إلى قيم الأعداد الصحيحة.

لقد تم بالفعل تعيينهم على الأعداد الصحيحة:

هذا يعني أن بعض التعبيرات أبسط في MySQL ، مثل حساب الصفوف التي تكون فيها قيمة معينة صحيحة أمرًا سهلاً مثل SUM () للتعبير المنطقي ، والذي سيكون 1 عندما يكون الشرط صحيحًا و 0 بخلاف ذلك.

لا يدعم SQL القياسي استخدام القيم المنطقية كأعداد صحيحة ، وسيتطلب المزيد من الإسهاب:

كما لاحظت الإجابات الأخرى بالفعل ، يمكنك استخدام اسم مستعار لنوع البيانات BOOL ولكن يتم استبداله على الفور بـ TINYINT (1) (تقوم MySQL بشيء مماثل مع أنواع البيانات الأخرى ، مثل REAL و SERIAL).


كيف يمكنني تغيير نوع حقل جدول البيانات الجدولية من سلسلة إلى مزدوجة في QGIS؟ - نظم المعلومات الجغرافية

يقدم هذا الفصل مقدمة لكائنات المخطط ويناقش الجداول ، وهي أكثر أنواع كائنات المخطط شيوعًا.

يحتوي هذا الفصل على الأقسام التالية:

مقدمة إلى كائنات المخطط

مخطط قاعدة البيانات هو حاوية منطقية لهياكل البيانات ، تسمى كائنات المخطط. أمثلة على كائنات المخطط هي الجداول والفهارس. يمكنك إنشاء كائنات المخطط ومعالجتها باستخدام SQL.

يحتوي حساب مستخدم قاعدة البيانات على كلمة مرور وامتيازات قاعدة بيانات محددة. يمتلك كل حساب مستخدم مخططًا واحدًا له نفس اسم المستخدم. يحتوي المخطط على البيانات الخاصة بالمستخدم الذي يمتلك المخطط. على سبيل المثال ، يمتلك حساب مستخدم hr مخطط hr الذي يحتوي على كائنات مخطط مثل جدول الموظفين. في قاعدة بيانات الإنتاج ، يمثل مالك المخطط عادةً تطبيق قاعدة بيانات بدلاً من شخص.

داخل المخطط ، يكون لكل كائن مخطط من نوع معين اسم فريد. على سبيل المثال ، يشير hr. Employees إلى موظفي الجدول في مخطط الموارد البشرية. يصور الشكل 2-1 مالك المخطط المسمى hr وكائنات المخطط داخل مخطط hr.

يحتوي هذا القسم على المواضيع التالية:

"نظرة عامة على أمان قاعدة البيانات" لمعرفة المزيد حول المستخدمين والامتيازات

أنواع كائنات المخطط

يمكّنك Oracle SQL من تكوين العديد من الأنواع الأخرى من كائنات المخطط ومعالجتها.

يتم عرض الأنواع الرئيسية لكائنات المخطط في الجدول التالي.

الجدول يخزن البيانات في صفوف. الجداول هي أهم كائنات المخطط في قاعدة البيانات العلائقية.

الفهارس هي كائنات مخطط تحتوي على إدخال لكل صف مفهرس من الجدول أو كتلة الجدول وتوفر وصولاً مباشرًا وسريعًا إلى الصفوف. تدعم Oracle Database عدة أنواع من الفهرس. الجدول المُنظم بالفهرس هو جدول يتم فيه تخزين البيانات في بنية فهرس.

الأقسام عبارة عن أجزاء من جداول وفهارس كبيرة. كل قسم له اسمه الخاص وقد يكون له خصائص التخزين الخاصة به اختياريًا.

طرق العرض هي عروض تقديمية مخصصة للبيانات في جدول واحد أو أكثر أو طرق عرض أخرى. يمكنك التفكير فيها على أنها استعلامات مخزنة. طرق العرض لا تحتوي في الواقع على بيانات.

التسلسل هو كائن أنشأه المستخدم ويمكن مشاركته من قبل عدة مستخدمين لتوليد أعداد صحيحة. عادةً ما تستخدم التسلسلات لتوليد قيم المفاتيح الأساسية.

يعرّف البعد العلاقة الأصل - الفرعي بين أزواج مجموعات الأعمدة ، حيث يجب أن تأتي كل أعمدة مجموعة الأعمدة من نفس الجدول. تُستخدم الأبعاد بشكل شائع لتصنيف البيانات مثل العملاء والمنتجات والوقت.

المرادف هو اسم مستعار لكائن مخطط آخر. نظرًا لأن المرادف هو مجرد اسم مستعار ، فإنه لا يتطلب أي مساحة تخزين بخلاف تعريفه في قاموس البيانات.

حزم وحزم PL / SQL

PL / SQL هو الامتداد الإجرائي لـ Oracle لـ SQL. البرنامج الفرعي PL / SQL هو كتلة PL / SQL مسماة يمكن استدعاؤها بمجموعة من المعلمات. تقوم حزمة PL / SQL بتجميع أنواع PL / SQL والمتغيرات والبرامج الفرعية المرتبطة منطقيًا.

يتم أيضًا تخزين أنواع أخرى من الكائنات في قاعدة البيانات ويمكن إنشاؤها ومعالجتها باستخدام عبارات SQL ولكن لا يتم تضمينها في مخطط. تتضمن هذه الكائنات حساب مستخدم قاعدة البيانات والأدوار والسياقات وكائنات القاموس.

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية إدارة كائنات المخطط

مرجع لغة Oracle Database SQL لمزيد من المعلومات حول كائنات المخطط وكائنات قاعدة البيانات

تخزين كائن المخطط

تقوم بعض كائنات المخطط بتخزين البيانات في نوع من بنية التخزين المنطقية تسمى المقطع. على سبيل المثال ، يقوم جدول أو فهرس غير مقسم أو فهرس بإنشاء مقطع.

تتكون كائنات المخطط الأخرى ، مثل طرق العرض والتسلسلات ، من بيانات وصفية فقط. يصف هذا الموضوع فقط كائنات المخطط التي تحتوي على مقاطع.

يخزن Oracle Database كائن مخطط منطقيًا داخل مساحة جدول. لا توجد علاقة بين المخططات ومساحات الجداول: يمكن أن تحتوي مساحة الجدول على كائنات من مخططات مختلفة ، ويمكن احتواء كائنات المخطط في مساحات جداول مختلفة. يتم تضمين بيانات كل كائن ماديًا في ملف بيانات واحد أو أكثر.

يوضح الشكل التالي التكوين المحتمل لأجزاء الجدول والفهرس ومساحات الجداول وملفات البيانات. يمتد مقطع البيانات لجدول واحد على ملفي بيانات ، وكلاهما جزء من نفس مساحة الجدول. لا يمكن أن يمتد المقطع إلى مسافات جداول متعددة.

الشكل 2-2 المقاطع ومساحات الجداول وملفات البيانات

"هياكل التخزين المنطقية" للتعرف على مساحات الجداول والأجزاء

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية إدارة التخزين لكائنات المخطط

تبعيات كائن المخطط

تشير بعض كائنات المخطط إلى كائنات أخرى ، مما يؤدي إلى إنشاء تبعية لكائن المخطط.

على سبيل المثال ، تحتوي طريقة العرض على استعلام يشير إلى جداول أو طرق عرض ، بينما يستدعي البرنامج الفرعي PL / SQL البرامج الفرعية الأخرى. إذا كان تعريف الكائن A يشير إلى الكائن B ، فإن A هو كائن تابع على B ، و B هو كائن مرجعي لـ A.

توفر Oracle Database آلية تلقائية لضمان تحديث الكائن التابع دائمًا فيما يتعلق بالكائنات المشار إليها. عند إنشاء كائن تابع ، تتعقب قاعدة البيانات التبعيات بين الكائن التابع والكائنات المشار إليها. عندما يتغير كائن مرجعي بطريقة قد تؤثر على كائن تابع ، فإن قاعدة البيانات تضع علامة على الكائن التابع غير صالح. على سبيل المثال ، إذا أسقط مستخدم جدولاً ، فلن يكون أي عرض يعتمد على الجدول الذي تم إسقاطه قابلاً للاستخدام.

يجب إعادة ترجمة كائن تابع غير صالح مقابل التعريف الجديد للكائن المشار إليه قبل أن يصبح الكائن التابع قابلاً للاستخدام. تحدث إعادة التحويل البرمجي تلقائيًا عند الإشارة إلى كائن تابع غير صالح.

كتوضيح لكيفية إنشاء كائنات المخطط للتبعيات ، يقوم البرنامج النصي النموذجي التالي بإنشاء جدول test_table ثم إجراء يستعلم عن هذا الجدول:

يوضح الاستعلام التالي عن حالة الإجراء test_proc أنها صالحة:

بعد إضافة العمود col3 إلى test_table ، يظل الإجراء صالحًا لأن الإجراء لا يحتوي على تبعيات على هذا العمود:

ومع ذلك ، يؤدي تغيير نوع بيانات العمود col1 ، الذي يعتمد عليه إجراء test_proc ، إلى إبطال الإجراء:

تشغيل الإجراء أو إعادة تجميعه يجعله صالحًا مرة أخرى ، كما هو موضح في المثال التالي:

مخططات النظم والنظام

تتضمن جميع قواعد بيانات Oracle حسابات إدارية افتراضية.

تتمتع الحسابات الإدارية بامتيازات عالية وهي مخصصة فقط لمسؤولي قواعد البيانات المصرح لهم بأداء مهام مثل بدء قاعدة البيانات وإيقافها ، وإدارة الذاكرة والتخزين ، وإنشاء مستخدمي قاعدة البيانات وإدارتها ، وما إلى ذلك.

يتم إنشاء حساب SYS الإداري تلقائيًا عند إنشاء قاعدة بيانات. يمكن لهذا الحساب أداء جميع الوظائف الإدارية لقاعدة البيانات. يخزن مخطط SYS الجداول الأساسية وطرق العرض الخاصة بقاموس البيانات. تعد هذه الجداول الأساسية وطرق العرض ضرورية لتشغيل Oracle Database.يتم التعامل مع الجداول الموجودة في مخطط SYS بواسطة قاعدة البيانات فقط ويجب ألا يتم تعديلها من قبل أي مستخدم.

يتم أيضًا إنشاء حساب SYSTEM الإداري تلقائيًا عند إنشاء قاعدة بيانات. يخزن مخطط النظام جداول وطرق عرض إضافية تعرض المعلومات الإدارية والجداول الداخلية وطرق العرض المستخدمة بواسطة خيارات وأدوات Oracle Database المتنوعة. لا تستخدم مخطط النظام مطلقًا لتخزين الجداول التي تهم المستخدمين غير الإداريين.

دليل مسؤول قاعدة بيانات Oracle للتعرف على SYS و SYSTEM والحسابات الإدارية الأخرى

نماذج المخططات

قد تتضمن قاعدة بيانات Oracle مخططات العينة، وهي مجموعة من المخططات المترابطة التي تمكن توثيق Oracle والمواد التعليمية من Oracle لتوضيح مهام قاعدة البيانات المشتركة.

يحتوي مخطط نموذج hr على معلومات حول الموظفين والإدارات والمواقع وتاريخ العمل وما إلى ذلك. يوضح الرسم التوضيحي التالي مخطط علاقة كيان للجداول بالساعة. تستخدم معظم الأمثلة في هذا الدليل كائنات من هذا المخطط.

نماذج مخططات قاعدة بيانات Oracle لمعرفة كيفية تثبيت نماذج المخططات

نظرة عامة على الجداول

الجدول هو الوحدة الأساسية لتنظيم البيانات في قاعدة بيانات Oracle.

يصف الجدول كيانًا ، وهو أمر مهم بشأن المعلومات التي يجب تسجيلها. على سبيل المثال ، يمكن أن يكون الموظف كيانًا.

تقع جداول Oracle Database ضمن الفئات الأساسية التالية:

تحتوي الجداول الارتباطية على أعمدة بسيطة وهي أكثر أنواع الجداول شيوعًا. يظهر المثال 2-1 عبارة CREATE TABLE لجدول علائقي.

تتوافق الأعمدة مع سمات المستوى الأعلى لنوع كائن. راجع "نظرة عامة على جداول الكائنات".

يمكنك إنشاء جدول علائقي بالخصائص التنظيمية التالية:

لا يخزن الجدول المنظم الكومة الصفوف بأي ترتيب معين. تنشئ عبارة CREATE TABLE جدولًا منظمًا بشكل افتراضي.

يقوم الجدول المنظم بالفهرس بترتيب الصفوف وفقًا لقيم المفتاح الأساسي. بالنسبة لبعض التطبيقات ، تعمل الجداول المنظمة على أساس الفهرس على تحسين الأداء واستخدام مساحة القرص بشكل أكثر كفاءة. راجع "نظرة عامة على الجداول المنظمة بواسطة الفهرس".

الجدول الخارجي هو جدول للقراءة فقط يتم تخزين بيانات التعريف الخاصة به في قاعدة البيانات ولكن يتم تخزين بياناته خارج قاعدة البيانات. راجع "نظرة عامة على الجداول الخارجية".

الجدول إما دائم أو مؤقت. يستمر تعريف الجدول الدائم والبيانات عبر الجلسات. يستمر تعريف الجدول المؤقت بنفس طريقة تعريف الجدول الدائم ، لكن البيانات موجودة فقط لمدة المعاملة أو الجلسة. تعد الجداول المؤقتة مفيدة في التطبيقات التي يجب أن يتم فيها تعليق مجموعة النتائج مؤقتًا ، ربما لأن النتيجة يتم إنشاؤها عن طريق تشغيل عمليات متعددة.

يحتوي هذا الموضوع على المواضيع التالية:

الأعمدة

يتضمن تعريف الجدول اسم جدول ومجموعة من الأعمدة.

يحدد العمود سمة الكيان الموصوف في الجدول. على سبيل المثال ، يشير العمود معرف_الموظف في جدول الموظفين إلى سمة معرف الموظف لكيان الموظف.

بشكل عام ، تقوم بتسمية كل عمود باسم عمود ونوع بيانات وعرض عند إنشاء جدول. على سبيل المثال ، نوع بيانات معرف_الموظف هو NUMBER (6) ، مما يشير إلى أن هذا العمود يمكن أن يحتوي فقط على بيانات رقمية يصل عرضها إلى 6 أرقام. يمكن تحديد العرض مسبقًا بواسطة نوع البيانات ، كما هو الحال مع DATE.

أعمدة افتراضية

يمكن أن يحتوي الجدول على ملف العمود الافتراضي، والتي على عكس العمود غير الظاهري لا تستهلك مساحة على القرص.

تستمد قاعدة البيانات القيم في عمود افتراضي عند الطلب عن طريق حساب مجموعة من التعبيرات أو الوظائف المحددة من قبل المستخدم. على سبيل المثال ، يمكن أن يكون دخل العمود الافتراضي دالة في أعمدة الراتب والعمولة.

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية إدارة الأعمدة الافتراضية

أعمدة غير مرئية

العمود غير المرئي هو عمود يحدده المستخدم وتكون قيمه مرئية فقط عندما يتم تحديد العمود بشكل صريح بالاسم. يمكنك إضافة عمود غير مرئي إلى جدول دون التأثير على التطبيقات الحالية ، وجعل العمود مرئيًا إذا لزم الأمر.

بشكل عام ، تساعد الأعمدة غير المرئية في ترحيل التطبيقات عبر الإنترنت وتطويرها. قد تكون حالة الاستخدام تطبيقًا يستعلم عن جدول مكون من ثلاثة أعمدة باستخدام عبارة SELECT *. قد تؤدي إضافة عمود رابع إلى الجدول إلى كسر التطبيق الذي يتوقع ثلاثة أعمدة من البيانات. إضافة عمود رابع غير مرئي يجعل التطبيق يعمل بشكل طبيعي. يمكن للمطور بعد ذلك تعديل التطبيق للتعامل مع العمود الرابع ، وجعل العمود مرئيًا عند تشغيل التطبيق.

ينشئ المثال التالي منتجات جدول مع عدد أعمدة غير مرئي ، ثم يجعل العمود غير المرئي مرئيًا:

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية إدارة الأعمدة غير المرئية

مرجع لغة Oracle Database SQL لمزيد من المعلومات حول الأعمدة غير المرئية

الصف عبارة عن مجموعة من معلومات العمود المقابلة لسجل في جدول.

على سبيل المثال ، يصف صف في جدول الموظفين سمات موظف معين: معرف الموظف واسم العائلة والاسم الأول وما إلى ذلك. بعد إنشاء جدول ، يمكنك إدراج الصفوف والاستعلام عنها وحذفها وتحديثها باستخدام SQL.

مثال: إنشاء جدول وتعديل بيانات الجدول

عبارة Oracle SQL لإنشاء جدول هي CREATE TABLE.

مثال 2-1 إنشاء موظفين في الجدول

يُظهر المثال التالي عبارة CREATE TABLE لجدول الموظفين في مخطط نموذج hr. تحدد العبارة أعمدة مثل معرف_الموظف والاسم_الأول وما إلى ذلك ، مع تحديد نوع بيانات مثل NUMBER أو DATE لكل عمود.

مثال 2-2 تغيير موظفي الجدول

يوضح المثال التالي عبارة ALTER TABLE التي تضيف قيود التكامل إلى جدول الموظفين. تفرض قيود النزاهة قواعد العمل وتمنع إدخال المعلومات غير الصالحة في الجداول.

مثال 2-3 صفوف في جدول الموظفين

يُظهر الناتج النموذجي التالي 8 صفوف و 6 أعمدة من جدول الموظفين hr.

يوضح الإخراج السابق بعض الخصائص الهامة التالية للجداول والأعمدة والصفوف:

يصف صف الجدول سمات موظف واحد: الاسم والراتب والقسم وما إلى ذلك. على سبيل المثال ، يُظهر الصف الأول في الإخراج سجل الموظف المسمى ستيفن كينج.

يصف العمود سمة الموظف. في المثال ، العمود معرف_الموظف هو المفتاح الأساسي ، مما يعني أن كل موظف يتم تعريفه بشكل فريد من خلال معرف الموظف. نضمن عدم وجود نفس رقم تعريف الموظف لأي موظفين اثنين.

يمكن أن يحتوي العمود بدون مفتاح على صفوف ذات قيم متطابقة. في المثال ، قيمة الراتب للموظفين 101 و 102 هي نفسها: 17000.

يشير عمود المفتاح الخارجي إلى مفتاح أساسي أو فريد في نفس الجدول أو في جدول مختلف. في هذا المثال ، تتوافق قيمة 90 في department_id مع عمود department_id في جدول الأقسام.

الحقل هو تقاطع صف وعمود. يمكن أن تحتوي على قيمة واحدة فقط. على سبيل المثال ، يحتوي حقل معرف القسم للموظف 103 على القيمة 60.

يمكن أن يفتقر الحقل إلى قيمة. في هذه الحالة ، يُقال أن الحقل يحتوي على قيمة فارغة. قيمة العمود Commission_pct للموظف 100 خالية ، بينما القيمة في الحقل للموظف 149 هي .2. يسمح العمود بالقيم الخالية إلا إذا تم تعريف "NOT NULL" أو قيد تكامل المفتاح الأساسي في هذا العمود ، وفي هذه الحالة لا يمكن إدراج أي صف بدون قيمة لهذا العمود.

مرجع لغة Oracle Database SQL من أجل إنشاء بنية الجدول ودلالاته

أنواع بيانات أوراكل

يحتوي كل عمود على نوع بيانات مرتبط بتنسيق تخزين محدد وقيود ونطاق صالح من القيم. نوع بيانات القيمة يقرن مجموعة ثابتة من الخصائص بالقيمة.

تتسبب هذه الخصائص في معالجة Oracle Database لقيم أحد أنواع البيانات بشكل مختلف عن قيم نوع آخر. على سبيل المثال ، يمكنك مضاعفة قيم نوع البيانات NUMBER ، لكن ليس قيم نوع بيانات RAW.

عند إنشاء جدول ، يجب تحديد نوع بيانات لكل عمود من أعمدته. كل قيمة يتم إدراجها لاحقًا في عمود تفترض نوع بيانات العمود.

توفر Oracle Database العديد من أنواع البيانات المضمنة. تندرج أنواع البيانات الأكثر استخدامًا في الفئات التالية:

تشمل الفئات المهمة الأخرى للأنواع المضمنة الكائنات الخام والكبيرة (LOBs) والمجموعات. يحتوي PL / SQL على أنواع بيانات للثوابت والمتغيرات ، والتي تشمل BOOLEAN وأنواع المراجع والأنواع المركبة (السجلات) والأنواع المعرفة من قبل المستخدم.

مرجع لغة Oracle Database SQL للتعرف على أنواع بيانات SQL المضمنة

دليل تطوير قاعدة بيانات أوراكل لمعرفة كيفية استخدام أنواع البيانات المضمنة

أنواع بيانات الأحرف

تخزن أنواع بيانات الأحرف البيانات الأبجدية الرقمية في سلاسل. أكثر أنواع بيانات الأحرف شيوعًا هو VARCHAR2 ، وهو الخيار الأكثر فعالية لتخزين بيانات الأحرف.

تتوافق قيم البايت مع نظام ترميز الأحرف ، والذي يُطلق عليه عمومًا مجموعة الأحرف. يتم إنشاء مجموعة أحرف قاعدة البيانات عند إنشاء قاعدة البيانات. من أمثلة مجموعات الأحرف 7 بت ASCII و EBCDIC و Unicode UTF-8.

يمكن قياس دلالات طول أنواع بيانات الأحرف بالبايت أو الأحرف. تسمى معالجة السلاسل كسلسلة من البايت دلالات البايت. هذا هو الإعداد الافتراضي لأنواع بيانات الأحرف. يُطلق على معالجة السلاسل كسلسلة من الأحرف اسم دلالات الأحرف. الحرف هو نقطة رمز لمجموعة أحرف قاعدة البيانات.

دليل مطوري Oracle Database 2 Day للحصول على مقدمة موجزة عن أنواع البيانات

دليل تطوير قاعدة بيانات أوراكل لمعرفة كيفية اختيار نوع بيانات الحرف

أنواع بيانات VARCHAR2 و CHAR

على سبيل المثال ، يمكنك استخدام "LILA" و "St. George Island '، و' 101 'كلها أحرف حرفية 5001 عبارة عن حرف رقمي. يتم وضع القيم الحرفية للأحرف ضمن علامات اقتباس مفردة حتى تتمكن قاعدة البيانات من تمييزها عن أسماء كائنات المخطط.

يستخدم هذا الدليل مصطلحات النص الحرفي والحرف الحرفي والسلسلة بالتبادل.

عندما تقوم بإنشاء جدول بعمود VARCHAR2 ، فإنك تحدد الحد الأقصى لطول السلسلة. في المثال 2-1 ، يحتوي العمود last_name على نوع بيانات VARCHAR2 (25) ، مما يعني أن أي اسم مخزن في العمود يحتوي على 25 بايت كحد أقصى.

لكل صف ، تخزن Oracle Database كل قيمة في العمود كحقل متغير الطول ما لم تتجاوز القيمة الحد الأقصى للطول ، وفي هذه الحالة ترجع قاعدة البيانات خطأ. على سبيل المثال ، في مجموعة أحرف أحادية البايت ، إذا أدخلت 10 أحرف لقيمة العمود last_name في صف ، فسيخزن العمود الموجود في قطعة الصف 10 أحرف فقط (10 بايت) ، وليس 25. يؤدي استخدام VARCHAR2 إلى تقليل استهلاك المساحة.

على عكس VARCHAR2 ، يقوم CHAR بتخزين سلاسل أحرف ثابتة الطول. عند إنشاء جدول بعمود CHAR ، يتطلب العمود طول سلسلة. الافتراضي هو 1 بايت. تستخدم قاعدة البيانات الفراغات لتضمين القيمة إلى الطول المحدد.

تقارن Oracle Database قيم VARCHAR2 باستخدام دلالات المقارنة غير المبطنة وتقارن قيم CHAR باستخدام دلالات المقارنة المبطنة الفارغة.

مرجع لغة Oracle Database SQL للحصول على تفاصيل حول دلالات المقارنة الفارغة وغير المبطنة

أنواع بيانات NCHAR و NVARCHAR2

Unicode هو مجموعة أحرف عالمية مشفرة يمكنها تخزين المعلومات بأي لغة باستخدام مجموعة أحرف مفردة. يقوم NCHAR بتخزين سلاسل أحرف ثابتة الطول تتوافق مع مجموعة الأحرف الوطنية ، بينما يقوم NVARCHAR2 بتخزين سلاسل أحرف متغيرة الطول.

يمكنك تحديد مجموعة أحرف وطنية عند إنشاء قاعدة بيانات. يجب أن تكون مجموعة الأحرف لأنواع بيانات NCHAR و NVARCHAR2 إما AL16UTF16 أو UTF8. تستخدم كلتا مجموعتي الأحرف ترميز Unicode.

عند إنشاء جدول بعمود NCHAR أو NVARCHAR2 ، يكون الحد الأقصى للحجم دائمًا في دلالات طول الأحرف. دلالات طول الأحرف هي دلالات الطول الافتراضية والوحيدة لـ NCHAR أو NVARCHAR2.

دليل دعم عولمة Oracle Database للحصول على معلومات حول ميزة دعم العولمة من Oracle

أنواع البيانات الرقمية

تخزن أنواع البيانات الرقمية في Oracle Database أرقام الفاصلة الثابتة والعائمة والصفر واللانهاية. تقوم بعض الأنواع الرقمية أيضًا بتخزين القيم التي تكون نتيجة غير محددة لعملية ما ، والتي تُعرف باسم "ليس رقمًا" أو NaN.

يقوم Oracle Database بتخزين البيانات الرقمية بتنسيق متغير الطول. يتم تخزين كل قيمة في رمز علمي ، مع استخدام بايت واحد لتخزين الأس. تستخدم قاعدة البيانات ما يصل إلى 20 بايت لتخزين الجزء العشري ، وهو جزء من رقم الفاصلة العائمة الذي يحتوي على أرقامه المهمة. لا تقوم Oracle Database بتخزين الأصفار البادئة والتالية.

NUMBER نوع البيانات

يخزن نوع البيانات NUMBER أرقام الفاصلة الثابتة والعائمة. يمكن لقاعدة البيانات تخزين الأرقام بأي حجم تقريبًا. هذه البيانات مضمونة لتكون محمولة بين أنظمة التشغيل المختلفة التي تشغل Oracle Database. يوصى باستخدام نوع البيانات NUMBER في معظم الحالات التي يجب عليك فيها تخزين البيانات الرقمية.

يمكنك تحديد رقم ذي نقطة ثابتة في الشكل NUMBER (p ، s) ، حيث تشير p و s إلى الخصائص التالية:

تحدد الدقة العدد الإجمالي للأرقام. إذا لم يتم تحديد الدقة ، فسيقوم العمود بتخزين القيم تمامًا كما تم توفيرها بواسطة التطبيق دون أي تقريب.

يحدد المقياس عدد الأرقام من الفاصلة العشرية إلى أقل رقم ذي دلالة. يقوم المقياس الموجب بحساب الأرقام الموجودة على يمين العلامة العشرية حتى أصغر رقم ذي دلالة. يحسب المقياس السالب الأرقام الموجودة على يسار الفاصلة العشرية حتى أقل رقم ذي دلالة ولكن لا يشمله. إذا حددت دقة بدون مقياس ، كما في NUMBER (6) ، فإن المقياس يكون 0.

في المثال 2-1 ، يكون عمود المرتب من النوع NUMBER (8،2) ، وبالتالي فإن الدقة هي 8 والمقياس هو 2. وبالتالي ، تخزن قاعدة البيانات راتبًا قدره 100000 على أنه 100000.00.

أرقام النقطة العائمة

توفر Oracle Database نوعين من أنواع البيانات الرقمية حصريًا لأرقام الفاصلة العائمة: BINARY_FLOAT و BINARY_DOUBLE.

تدعم هذه الأنواع كافة الوظائف الأساسية التي يوفرها نوع البيانات NUMBER. ومع ذلك ، بينما يستخدم الرقم NUMBER الدقة العشرية ، يستخدم BINARY_FLOAT و BINARY_DOUBLE الدقة الثنائية ، مما يتيح إجراء عمليات حسابية أسرع ويقلل عادةً من متطلبات التخزين.

BINARY_FLOAT و BINARY_DOUBLE أنواع بيانات رقمية تقريبية. يقومون بتخزين تمثيلات تقريبية للقيم العشرية ، بدلاً من التمثيلات الدقيقة. على سبيل المثال ، لا يمكن تمثيل القيمة 0.1 تمامًا بواسطة BINARY_DOUBLE أو BINARY_FLOAT. كثيرا ما تستخدم في الحسابات العلمية. سلوكهم مشابه لأنواع البيانات FLOAT و DOUBLE في Java و XMLSchema.

مرجع لغة Oracle Database SQL للتعرف على الدقة والمقياس والخصائص الأخرى للأنواع الرقمية

أنواع بيانات التاريخ والوقت

أنواع بيانات التاريخ والوقت هي DATE و TIMESTAMP. توفر Oracle Database دعمًا شاملاً للمناطق الزمنية للطوابع الزمنية.

نوع بيانات التاريخ

يخزن نوع البيانات DATE التاريخ والوقت. على الرغم من أنه يمكن تمثيل Datetimes في أنواع بيانات الأحرف أو الأرقام ، إلا أن DATE لها خصائص مرتبطة خاصة.

تقوم قاعدة البيانات بتخزين التواريخ داخليًا كأرقام. يتم تخزين التواريخ في حقول ذات طول ثابت يبلغ كل منها 7 بايت ، بما يتوافق مع القرن والسنة والشهر واليوم والساعة والدقيقة والثانية.

تدعم التواريخ العمليات الحسابية بشكل كامل ، لذا يمكنك الجمع والطرح من التواريخ تمامًا كما يمكنك باستخدام الأرقام.

تعرض قاعدة البيانات التواريخ وفقًا لنموذج التنسيق المحدد. نموذج التنسيق هو حرف حرفي يصف تنسيق تاريخ ووقت في سلسلة أحرف. تنسيق التاريخ القياسي هو DD-MON-RR ، والذي يعرض التواريخ بالصيغة 01-JAN-11.

RR مشابه لـ YY (آخر رقمين من السنة) ، لكن قرن القيمة المرجعة يختلف وفقًا للسنة المحددة المكونة من رقمين وآخر رقمين من السنة الحالية. افترض أنه في عام 1999 تعرض قاعدة البيانات 01-JAN-11. إذا كان تنسيق التاريخ يستخدم RR ، فإن 11 تحدد 2011 ، بينما إذا كان التنسيق يستخدم YY ، فإن 11 تحدد 1911. يمكنك تغيير تنسيق التاريخ الافتراضي في كل من طبعة قاعدة البيانات ومستوى الجلسة.

يقوم Oracle Database بتخزين الوقت بتنسيق 24 ساعة - HH: MI: SS. إذا لم يتم إدخال جزء الوقت ، فسيكون الوقت افتراضيًا في حقل التاريخ هو 00:00:00 صباحًا. في إدخال الوقت فقط ، يتم تعيين جزء التاريخ افتراضيًا على اليوم الأول من الشهر الحالي.

دليل تطوير قاعدة بيانات Oracle للحصول على مزيد من المعلومات حول القرون وأقنعة تنسيق التاريخ

مرجع لغة Oracle Database SQL للحصول على معلومات حول رموز تنسيق التاريخ والوقت

دليل تطوير Oracle Database لمعرفة كيفية إجراء عمليات حسابية باستخدام أنواع بيانات التاريخ والوقت

نوع بيانات TIMESTAMP

نوع البيانات TIMESTAMP هو امتداد لنوع بيانات التاريخ.

TIMESTAMP يخزن أجزاء من الثواني بالإضافة إلى المعلومات المخزنة في نوع البيانات DATE. يعتبر نوع بيانات TIMESTAMP مفيدًا لتخزين قيم الوقت الدقيقة ، كما هو الحال في التطبيقات التي يجب أن تتبع ترتيب الأحداث.

أنواع البيانات DATETIME TIMESTAMP WITH TIME ZONE و TIMESTAMP WITH LOCAL TIME ZONE تدرك المنطقة الزمنية. عندما يختار المستخدم البيانات ، يتم تعديل القيمة حسب المنطقة الزمنية لجلسة المستخدم. يعتبر نوع البيانات هذا مفيدًا في تجميع معلومات التاريخ وتقييمها عبر المناطق الجغرافية.

مرجع لغة Oracle Database SQL للحصول على تفاصيل حول بنية تكوين البيانات وإدخالها في أعمدة الطابع الزمني

أنواع بيانات Rowid

كل صف مخزن في قاعدة البيانات له عنوان. تستخدم Oracle Database نوع بيانات ROWID لتخزين العنوان (rowid) لكل صف في قاعدة البيانات.

تقع Rowids في الفئات التالية:

تقوم الصفوف الفعلية بتخزين عناوين الصفوف في جداول منظمة كومة ، ومجموعات الجداول ، وأقسام الجدول والفهرس.

تقوم وحدات الصفوف المنطقية بتخزين عناوين الصفوف في جداول منظمة حسب الفهرس.

معرفات الصفوف الخارجية هي معرفات في جداول خارجية ، مثل جداول DB2 التي يتم الوصول إليها من خلال بوابة. فهي ليست خوادم قياسية في Oracle Database.

نوع بيانات يسمى عالمي rowid ، أو urowid ، يدعم جميع أنواع الصفوف.

استخدام Rowids

يحتوي فهرس B-tree ، وهو النوع الأكثر شيوعًا ، على قائمة مرتبة من المفاتيح مقسمة إلى نطاقات. يرتبط كل مفتاح برمز يشير إلى عنوان الصف المرتبط للوصول السريع.

يمكن للمستخدمين ومطوري التطبيقات أيضًا استخدام Rowids للعديد من الوظائف المهمة:

الصفوف هي أسرع وسيلة للوصول إلى صفوف معينة.

توفر Rowids القدرة على رؤية كيفية تنظيم الجدول.

الصفوف هي معرفات فريدة للصفوف في جدول معين.

يمكنك أيضًا إنشاء جداول بأعمدة محددة باستخدام نوع بيانات ROWID. على سبيل المثال ، يمكنك تحديد جدول استثناء بعمود من نوع البيانات ROWID لتخزين صفوف الصفوف التي تنتهك قيود التكامل. الأعمدة المعرفة باستخدام نوع بيانات ROWID تتصرف مثل أعمدة الجدول الأخرى: يمكن تحديث القيم ، وهكذا.

ROWID Pseudocolumn

يحتوي كل جدول في قاعدة بيانات Oracle على عمود pseudocolumn المسمى ROWID.

يتصرف العمود الزائف مثل عمود الجدول ، ولكن لا يتم تخزينه بالفعل في الجدول. يمكنك التحديد من الأعمدة الزائفة ، لكن لا يمكنك إدراج قيمها أو تحديثها أو حذفها. يشبه العمود الزائف أيضًا وظيفة SQL بدون وسيطات. عادةً ما تُرجع الدالات التي لا تحتوي على وسيطات نفس القيمة لكل صف في مجموعة النتائج ، بينما تُرجع الأعمدة الزائفة عادةً قيمة مختلفة لكل صف.

قيم ROWID pseudocolumn هي سلاسل تمثل عنوان كل صف.هذه السلاسل لها نوع البيانات ROWID. لا يتضح هذا العمود الزائف عند سرد بنية الجدول عن طريق تنفيذ SELECT أو DESCRIBE ، ولا يستهلك العمود الزائف مساحة. ومع ذلك ، يمكن استرداد معرف كل صف باستخدام استعلام SQL باستخدام الكلمة المحجوزة ROWID كاسم عمود.

يستعلم المثال التالي عن العمود الزائف ROWID لإظهار معرف الصف في جدول الموظفين للموظف 100:

دليل تطوير Oracle Database لمعرفة كيفية تحديد الصفوف حسب العنوان

نماذج التنسيق وأنواع البيانات

نموذج التنسيق هو حرف حرفي يصف تنسيق التاريخ والوقت أو البيانات الرقمية المخزنة في سلسلة أحرف. لا يغير نموذج التنسيق التمثيل الداخلي للقيمة في قاعدة البيانات.

عندما تقوم بتحويل سلسلة أحرف إلى تاريخ أو رقم ، يحدد نموذج التنسيق كيفية تفسير قاعدة البيانات للسلسلة. في SQL ، يمكنك استخدام نموذج التنسيق كوسيطة لوظائف TO_CHAR و TO_DATE لتنسيق قيمة يتم إرجاعها من قاعدة البيانات أو لتنسيق قيمة يتم تخزينها في قاعدة البيانات.

تحدد العبارة التالية رواتب الموظفين في القسم 80 وتستخدم الدالة TO_CHAR لتحويل هذه الرواتب إلى قيم شخصية بالتنسيق المحدد بواسطة نموذج تنسيق الأرقام "99،990.99 دولارًا أمريكيًا":

يقوم المثال التالي بتحديث تاريخ الاستئجار باستخدام الدالة TO_DATE مع قناع التنسيق "YYYY MM DD" لتحويل السلسلة "1998 05 20" إلى قيمة DATE:

قيود التكامل

ان قيد التكامل هي قاعدة مسماة تقيد قيم عمود واحد أو أكثر في جدول.

تمنع قواعد تكامل البيانات إدخال البيانات غير الصالحة في الجداول. أيضًا ، يمكن أن تمنع القيود حذف الجدول عند وجود تبعيات معينة.

إذا تم تمكين القيد ، فإن قاعدة البيانات تتحقق من البيانات عند إدخالها أو تحديثها. تمنع Oracle Database إدخال البيانات التي لا تتوافق مع القيد. إذا تم تعطيل أحد القيود ، فإن Oracle Database تسمح للبيانات التي لا تتوافق مع القيد بإدخال قاعدة البيانات.

في المثال 2-1 ، تحدد عبارة CREATE TABLE قيود NOT NULL لأعمدة الاسم الأخير والبريد الإلكتروني وتاريخ الاستئجار و job_id. تحدد جمل القيد الأعمدة وشروط القيد. تضمن هذه القيود أن الأعمدة المحددة لا تحتوي على قيم خالية. على سبيل المثال ، تؤدي محاولة إدراج موظف جديد بدون معرف الوظيفة إلى حدوث خطأ.

يمكنك إنشاء قيد عندما تقوم بإنشاء جدول أو بعده. يمكنك تعطيل القيود مؤقتًا إذا لزم الأمر. تخزن قاعدة البيانات القيود في قاموس البيانات.

"تكامل البيانات" للتعرف على قيود التكامل

"نظرة عامة على قاموس البيانات" للتعرف على قاموس البيانات

مرجع لغة Oracle Database SQL للتعرف على عبارات قيود SQL

تخزين الجدول

تستخدم Oracle Database ملف مقطع البيانات في مساحة الجدول للاحتفاظ ببيانات الجدول.

يحتوي المقطع على نطاقات مكونة من كتل بيانات. يقع مقطع البيانات للجدول (أو مقطع بيانات الكتلة ، بالنسبة لكتلة الجدول) إما في مساحة الجدول الافتراضية لمالك الجدول أو في مساحة الجدول المسماة في عبارة CREATE TABLE.

"شرائح المستخدم" للتعرف على أنواع الشرائح وكيفية إنشائها

تنظيم الجدول

بشكل افتراضي ، يتم تنظيم الجدول على هيئة كومة ، مما يعني أن قاعدة البيانات تضع الصفوف في المكان المناسب لها بدلاً من الترتيب الذي يحدده المستخدم. وبالتالي ، فإن الجدول المنظم كومة عبارة عن مجموعة غير مرتبة من الصفوف.

تستخدم الجداول المُنظّمة بواسطة الفهرس مبدأ تنظيمًا مختلفًا.

بينما يضيف المستخدمون صفوفًا ، تضع قاعدة البيانات الصفوف في أول مساحة خالية متوفرة في مقطع البيانات. لا يمكن ضمان استرداد الصفوف بالترتيب الذي تم إدخالها به.

جدول hr.departments عبارة عن جدول منظم كومة. يحتوي على أعمدة لمعرف القسم والاسم ومعرف المدير ومعرف الموقع. أثناء إدراج الصفوف ، تقوم قاعدة البيانات بتخزينها أينما كانت مناسبة. قد تحتوي كتلة البيانات في مقطع الجدول على الصفوف غير المرتبة الموضحة في المثال التالي:

ترتيب العمود هو نفسه لجميع الصفوف في الجدول. عادةً ما تخزن قاعدة البيانات الأعمدة بالترتيب الذي تم إدراجها به في عبارة CREATE TABLE ، ولكن هذا الترتيب غير مضمون. على سبيل المثال ، إذا كان الجدول يحتوي على عمود من النوع LONG ، فحينئذٍ تخزن Oracle Database هذا العمود دائمًا في الصف الأخير. أيضًا ، إذا أضفت عمودًا جديدًا إلى جدول ، فسيصبح العمود الجديد هو آخر عمود تم تخزينه.

يمكن أن يحتوي الجدول على عمود افتراضي ، والذي على عكس الأعمدة العادية لا يستهلك مساحة على القرص. تستمد قاعدة البيانات القيم في عمود افتراضي عند الطلب عن طريق حساب مجموعة من التعبيرات أو الوظائف المحددة من قبل المستخدم. يمكنك فهرسة الأعمدة الافتراضية ، وجمع الإحصائيات عنها ، وإنشاء قيود تكاملية. وبالتالي ، فإن الأعمدة الافتراضية تشبه إلى حد كبير الأعمدة غير الافتراضية.

تخزين الصف

تخزن قاعدة البيانات الصفوف في كتل البيانات. يتم تضمين كل صف في الجدول الذي يحتوي على بيانات أقل من 256 عمودًا في قطعة صفوف واحدة أو أكثر.

إذا أمكن ، تقوم Oracle Database بتخزين كل صف كقطعة صف واحدة. ومع ذلك ، إذا تعذر إدراج جميع بيانات الصف في كتلة بيانات واحدة ، أو إذا تسبب تحديث لصف موجود في تجاوز الصف كتلة البيانات الخاصة به ، فإن قاعدة البيانات تخزن الصف باستخدام أجزاء صفوف متعددة.

تحتوي الصفوف الموجودة في كتلة جدول على نفس المعلومات مثل الصفوف الموجودة في الجداول غير المجمعة. بالإضافة إلى ذلك ، تحتوي الصفوف الموجودة في كتلة جدول على معلومات تشير إلى مفتاح الكتلة الذي تنتمي إليه.

"تنسيق كتلة البيانات" للتعرف على مكونات كتلة البيانات

الصفوف من قطع الصف

أ رويد هو عنوان فعلي لصف مكون من 10 بايت.

يحتوي كل صف في جدول منظم كومة على صفيف فريد لهذا الجدول يتوافق مع العنوان الفعلي لقطعة الصف. بالنسبة لمجموعات الجدول ، يمكن أن تحتوي الصفوف الموجودة في الجداول المختلفة الموجودة في نفس كتلة البيانات على معرف الصف نفسه.

تستخدم Oracle Database خوادم الصفوف داخليًا لبناء الفهارس. على سبيل المثال ، يرتبط كل مفتاح في فهرس B-tree بمعرّف صف يشير إلى عنوان الصف المرتبط للوصول السريع. توفر الصفوف المادية أسرع وصول ممكن إلى صف الجدول ، مما يتيح لقاعدة البيانات استرداد صف في أقل من إدخال / إخراج واحد.

"تنسيق Rowid" للتعرف على بنية الصفيد

"نظرة عامة على فهارس B-Tree" للتعرف على أنواع وهيكل فهارس B-tree

تخزين Null Values

القيمة الفارغة هي عدم وجود قيمة في العمود. تشير القيم الخالية إلى بيانات مفقودة أو غير معروفة أو غير قابلة للتطبيق.

يتم تخزين القيم الخالية في قاعدة البيانات إذا كانت تقع بين أعمدة ذات قيم بيانات. في هذه الحالات ، تتطلب 1 بايت لتخزين طول العمود (صفر). لا تتطلب القيم الفارغة اللاحقة في صف أي مساحة تخزين لأن رأس صف جديد يشير إلى أن الأعمدة المتبقية في الصف السابق فارغة. على سبيل المثال ، إذا كانت الأعمدة الثلاثة الأخيرة من الجدول فارغة ، فلن يتم تخزين أي بيانات لهذه الأعمدة.

ضغط الجدول

يمكن لقاعدة البيانات استخدام ضغط الجدول لتقليل كمية التخزين المطلوبة للجدول.

يوفر الضغط مساحة القرص ، ويقلل من استخدام الذاكرة في ذاكرة التخزين المؤقت لقاعدة البيانات ، وفي بعض الحالات يسرع تنفيذ الاستعلام. ضغط الجدول شفاف لتطبيقات قواعد البيانات.

ضغط الجدول الأساسي وضغط الصف المتقدم

يوفر ضغط الجدول المستند إلى القاموس نسب ضغط جيدة للجداول المنظمة كومة.

تدعم Oracle Database الأنواع التالية من ضغط الجدول المستند إلى القاموس:

هذا النوع من الضغط مخصص لعمليات التحميل بالجملة. لا تضغط قاعدة البيانات البيانات المعدلة باستخدام DML التقليدي. يجب عليك استخدام عمليات INSERT المسار المباشر ، ALTER TABLE. . . عمليات MOVE ، أو إعادة تعريف الجدول عبر الإنترنت لتحقيق ضغط الجدول الأساسي.

هذا النوع من الضغط مخصص لتطبيقات OLTP ويقوم بضغط البيانات التي تتم معالجتها بواسطة أي عملية SQL. تحقق قاعدة البيانات نسبة ضغط تنافسية مع تمكين التطبيق من أداء DML في نفس مقدار الوقت تقريبًا مثل DML على جدول غير مضغوط.

بالنسبة لأنواع الضغط السابقة ، تخزن قاعدة البيانات الصفوف المضغوطة بتنسيق الصف الرئيسي. يتم تخزين جميع الأعمدة في صف واحد معًا ، متبوعة بجميع أعمدة الصف التالي ، وهكذا. تستبدل قاعدة البيانات القيم المكررة بمرجع قصير إلى جدول الرموز المخزن في بداية الكتلة. وبالتالي ، يتم تخزين المعلومات التي تحتاجها قاعدة البيانات لإعادة إنشاء البيانات غير المضغوطة في كتلة البيانات نفسها.

تبدو كتل البيانات المضغوطة مثل كتل البيانات العادية. تعمل معظم ميزات ووظائف قاعدة البيانات التي تعمل على كتل البيانات العادية أيضًا على الكتل المضغوطة.

يمكنك إعلان الضغط على مساحة الجدول أو الجدول أو القسم أو مستوى القسم الفرعي. إذا تم تحديده على مستوى مساحة الجدول ، فسيتم ضغط جميع الجداول التي تم إنشاؤها في مساحة الجدول افتراضيًا.

مثال 2-4 ضغط على مستوى الجدول

تطبق العبارة التالية ضغط الصف المتقدم على جدول الطلبات:

مثال 2-5 ضغط على مستوى التقسيم

يحدد المثال التالي لعبارة CREATE TABLE الجزئية ضغط الصف المتقدم لقسم واحد وضغط الجدول الأساسي للقسم الآخر:

"تنسيق الصف" لمعرفة كيفية تخزين القيم في صف واحد

"ضغط كتلة البيانات" للتعرف على تنسيق كتل البيانات المضغوطة

"SQL * Loader" للتعرف على استخدام SQL * Loader لأحمال المسار المباشر

ضغط عمودي هجين

باستخدام Hybrid Columnar Compression ، تخزن قاعدة البيانات نفس العمود لمجموعة من الصفوف معًا. لا تخزن كتلة البيانات البيانات بتنسيق الصف الرئيسي ، ولكنها تستخدم مجموعة من أساليب الصفوف والعمودية.

يؤدي تخزين بيانات العمود معًا ، باستخدام نفس نوع البيانات والخصائص المماثلة ، إلى زيادة توفير التخزين الناتج عن الضغط بشكل كبير. تضغط قاعدة البيانات البيانات التي تتم معالجتها بواسطة أي عملية SQL ، على الرغم من أن مستويات الضغط أعلى بالنسبة لأحمال المسار المباشر. تعمل عمليات قاعدة البيانات بشفافية ضد الكائنات المضغوطة ، لذلك لا يلزم إجراء تغييرات في التطبيق.

يرتبط ضغط العمود الهجين ومخزن الأعمدة في الذاكرة (مخزن أعمدة الرسائل الفورية) ارتباطًا وثيقًا. الاختلاف الأساسي هو أن Hybrid Column Compression يحسن تخزين القرص ، بينما يعمل مخزن أعمدة IM على تحسين تخزين الذاكرة.

"منطقة داخل الذاكرة" لمعرفة المزيد حول مخزن أعمدة الرسائل الفورية

أنواع الضغط العمودي الهجين

إذا كانت وحدة التخزين الأساسية لديك تدعم ضغط عمودي مختلط ، فيمكنك حينئذٍ تحديد أنواع مختلفة من الضغط ، وفقًا لمتطلباتك.

خيارات الضغط هي:

تم تحسين هذا النوع من الضغط لتوفير مساحة التخزين ، وهو مخصص لتطبيقات مستودع البيانات.

تم تحسين هذا النوع من الضغط لأقصى مستويات الضغط ، وهو مخصص للبيانات التاريخية والبيانات التي لا تتغير.

تم تحسين Hybrid Columnar Compression لتخزين البيانات وتطبيقات دعم القرار على تخزين Oracle Exadata. يعمل Oracle Exadata على زيادة أداء الاستعلامات على الجداول التي يتم ضغطها باستخدام الضغط العمودي المختلط ، مع الاستفادة من قوة المعالجة والذاكرة وعرض النطاق الترددي لشبكة Infiniband التي تعد جزءًا لا يتجزأ من خادم تخزين Oracle Exadata.

تدعم أنظمة تخزين Oracle الأخرى ضغط عمودي مختلط ، وتوفر نفس توفير المساحة كما هو الحال في تخزين Oracle Exadata ، ولكنها لا تقدم نفس المستوى من أداء الاستعلام. بالنسبة لأنظمة التخزين هذه ، يعد Hybrid Columnar Compression مثاليًا للأرشفة في قاعدة البيانات للبيانات القديمة التي لا يتم الوصول إليها بشكل متكرر.

وحدات الضغط

يستخدم Hybrid Columnar Compression بنية منطقية تسمى a وحدة الضغط لتخزين مجموعة من الصفوف.

عند تحميل البيانات في جدول ، تخزن قاعدة البيانات مجموعات من الصفوف بتنسيق عمودي ، مع تخزين قيم كل عمود وضغطها معًا. بعد أن تقوم قاعدة البيانات بضغط بيانات العمود لمجموعة من الصفوف ، تلائم قاعدة البيانات البيانات في وحدة الضغط.

على سبيل المثال ، يمكنك تطبيق ضغط عمودي مختلط على جدول daily_sales. في نهاية كل يوم ، تقوم بملء الجدول بالعناصر والرقم المباع ، مع تكوين معرف العنصر والتاريخ مفتاحًا أساسيًا مركبًا. يعرض الجدول التالي مجموعة فرعية من الصفوف في daily_sales.

الجدول 2-2 نموذج الجدول daily_sales

افترض أن هذه المجموعة الفرعية من الصفوف مخزنة في وحدة ضغط واحدة. يقوم Hybrid Columnar Compression بتخزين قيم كل عمود معًا ، ثم يستخدم خوارزميات متعددة لضغط كل عمود. تختار قاعدة البيانات الخوارزميات بناءً على مجموعة متنوعة من العوامل ، بما في ذلك نوع بيانات العمود ، والعلاقة الأساسية للقيم الفعلية في العمود ، ومستوى الضغط الذي يختاره المستخدم.

كما هو موضح في الرسم التالي ، يمكن لكل وحدة ضغط أن تمتد على كتل بيانات متعددة. قد تمتد أو لا تمتد قيم عمود معين إلى كتل متعددة.

شكل 2-4 وحدة الضغط

إذا لم يؤد الضغط العمودي المختلط إلى توفير المساحة ، فإن قاعدة البيانات تخزن البيانات بتنسيق DBMS_COMPRESSION.COMP_BLOCK. في هذه الحالة ، تطبق قاعدة البيانات ضغط OLTP على الكتل الموجودة في مقطع ضغط عمودي مختلط.

دليل مستخدم معلومات ترخيص قاعدة بيانات Oracle للتعرف على متطلبات الترخيص للضغط العمودي المختلط

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية استخدام الضغط العمودي المختلط

مرجع لغة Oracle Database SQL من أجل إنشاء بنية الجدول ودلالاته

DML والضغط العمودي الهجين

الضغط العمودي المختلط له آثار على قفل الصف في أنواع مختلفة من عمليات DML.

أحمال المسار المباشر والإدخالات التقليدية

عند تحميل البيانات في جدول يستخدم الضغط العمودي المختلط ، يمكنك استخدام الإدخالات التقليدية أو تحميل المسار المباشر. تقوم أحمال المسار المباشر بإغلاق الجدول بأكمله ، مما يقلل من التزامن.

يضيف الإصدار 2 من Oracle Database 12c (12.2) دعمًا لإدراجات الصفيف التقليدية في تنسيق الضغط العمودي المختلط. مزايا إدراج المصفوفة التقليدية هي:

تستخدم الصفوف المدرجة أقفالًا على مستوى الصفوف ، مما يزيد من التزامن.

يدعم التحسين التلقائي للبيانات (ADO) والخريطة الحرارية الضغط العمودي المختلط للنُهج على مستوى الصف. وبالتالي ، يمكن لقاعدة البيانات استخدام ضغط عمودي مختلط للكتل المؤهلة حتى عند حدوث نشاط DML في أجزاء أخرى من المقطع.

عندما يستخدم التطبيق إدخالات الصفيف التقليدية ، يقوم Oracle Database بتخزين الصفوف في وحدات الضغط عند استيفاء الشروط التالية:

يتم تخزين الجدول في مساحة جدول ASSM.

مستوى التوافق هو 12.2.0.1 أو أحدث.

يلبي تعريف الجدول قيود جدول الضغط العمودي المختلط الحالية ، بما في ذلك عدم وجود أعمدة من النوع LONG وعدم وجود تبعيات للصفوف.

تولد الإدخالات التقليدية الإعادة والتراجع. وبالتالي ، يتم إرجاع وحدات الضغط التي تم إنشاؤها بواسطة بيان DML التقليدي أو الالتزام بها مع DML. تقوم قاعدة البيانات تلقائيًا بصيانة الفهرس ، تمامًا كما هو الحال بالنسبة للصفوف المخزنة في كتل البيانات التقليدية.

بشكل افتراضي ، تقوم قاعدة البيانات بتأمين جميع الصفوف في وحدة الضغط إذا تم تطبيق تحديث أو حذف على أي صف في الوحدة. لتجنب هذه المشكلة ، يمكنك اختيار تمكين التأمين على مستوى الصف لجدول. في هذه الحالة ، تقوم قاعدة البيانات بتأمين الصفوف المتأثرة بعملية التحديث أو الحذف فقط.

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية تنفيذ الإدخالات التقليدية

نظرة عامة على مجموعات الجدول

أ كتلة الجدول هي مجموعة من الجداول التي تشترك في أعمدة مشتركة وتخزن البيانات ذات الصلة في نفس الكتل.

عندما يتم تجميع الجداول ، يمكن أن تحتوي كتلة بيانات واحدة على صفوف من جداول متعددة. على سبيل المثال ، يمكن للكتلة تخزين صفوف من جداول الموظفين والأقسام بدلاً من جدول واحد فقط.

مفتاح المجموعة هو العمود أو الأعمدة التي تشترك فيها الجداول المجمعة. على سبيل المثال ، تشترك جداول الموظفين والأقسام في العمود معرف القسم. يمكنك تحديد مفتاح الكتلة عند إنشاء كتلة الجدول وعند إنشاء كل جدول مضاف إلى كتلة الجدول.

قيمة مفتاح الكتلة هي قيمة أعمدة مفتاح الكتلة لمجموعة معينة من الصفوف. جميع البيانات التي تحتوي على نفس قيمة مفتاح المجموعة ، مثل department_id = 20 ، يتم تخزينها فعليًا معًا. يتم تخزين كل قيمة مفتاح مجموعة مرة واحدة فقط في الكتلة وفهرس الكتلة ، بغض النظر عن عدد صفوف الجداول المختلفة التي تحتوي على القيمة.

للتشابه ، افترض أن مدير الموارد البشرية لديه حالتان من الكتب: واحدة بها صناديق لمجلدات الموظفين والأخرى بها صناديق لمجلدات القسم. غالبًا ما يطلب المستخدمون المجلدات لجميع الموظفين في قسم معين. لتسهيل الاسترجاع ، يقوم المدير بإعادة ترتيب كل الصناديق في حقيبة كتاب واحدة. تقوم بتقسيم الصناديق حسب معرف القسم. وبالتالي ، فإن جميع مجلدات الموظفين في القسم 20 ومجلد القسم 20 نفسه موجود في مربع واحد ، مجلدات الموظفين في القسم 100 ومجلد القسم 100 في مربع آخر ، وهكذا.

ضع في اعتبارك جداول المجموعات عندما يتم الاستعلام عنها بشكل أساسي (ولكن لم يتم تعديلها) ويتم الاستعلام عن السجلات من الجداول معًا أو ضمها بشكل متكرر. نظرًا لأن مجموعات الجدول تخزن الصفوف ذات الصلة بجداول مختلفة في نفس كتل البيانات ، فإن مجموعات الجدول المستخدمة بشكل صحيح تقدم الفوائد التالية على الجداول غير المجمعة:

يتم تقليل إدخال / إخراج القرص لوصلات الجداول المجمعة.

يتم تحسين وقت الوصول لوصلات الجداول المجمعة.

مطلوب مساحة تخزين أقل لتخزين بيانات الجدول والفهرس ذات الصلة لأن قيمة مفتاح الكتلة لا يتم تخزينها بشكل متكرر لكل صف.

عادةً ما تكون جداول التجميع غير مناسبة في المواقف التالية:

يتم تحديث الجداول بشكل متكرر.

تتطلب الجداول في كثير من الأحيان فحص جدول كامل.

الجداول تتطلب اقتطاع.

نظرة عامة على الكتل المفهرسة

كتلة الفهرس هي كتلة جدول تستخدم فهرسًا لتحديد موقع البيانات. فهرس الكتلة هو فهرس B-tree على مفتاح الكتلة. يجب إنشاء فهرس نظام المجموعة قبل إدراج أي صفوف في جداول مجمعة.

مثال 2-6 تكوين كتلة الجدول والفهرس المرتبط

افترض أنك قمت بإنشاء مجموعة staff_departments_cluster باستخدام مفتاح الكتلة department_id ، كما هو موضح في المثال التالي:

لأنه لم يتم تحديد جملة HASHKEYS ، فإن staff_departments_cluster كتلة مفهرسة. ينشئ المثال السابق فهرسًا باسم idx_emp_dept_cluster على مفتاح الكتلة department_id.

مثال 2-7 تكوين جداول في نظام مجموعة مفهرس

يمكنك إنشاء جداول الموظفين والأقسام في نظام المجموعة ، وتحديد عمود معرف القسم باعتباره مفتاح المجموعة ، على النحو التالي (تحدد علامات الحذف المكان الذي تنتقل إليه مواصفات العمود):

افترض أنك تضيف صفوفًا إلى جداول الموظفين والأقسام. تخزن قاعدة البيانات فعليًا جميع الصفوف لكل قسم من جداول الموظفين والأقسام في نفس كتل البيانات. تقوم قاعدة البيانات بتخزين الصفوف في كومة وتحديد موقعها مع الفهرس.

يوضح الشكل 2-5 مجموعة جدول المجموعة "staff_departments_cluster" التي تحتوي على الموظفين والأقسام. تخزن قاعدة البيانات صفوفًا للموظفين في القسم 20 معًا ، والقسم 110 معًا ، وهكذا. إذا لم يتم تجميع الجداول ، فلن تضمن قاعدة البيانات تخزين الصفوف ذات الصلة معًا.

بيانات جدول مجمعة الشكل 2-5

يربط فهرس مجموعة B-tree قيمة مفتاح الكتلة بعنوان كتلة قاعدة البيانات (DBA) للكتلة التي تحتوي على البيانات.على سبيل المثال ، يُظهر إدخال الفهرس للمفتاح 20 عنوان الكتلة التي تحتوي على بيانات للموظفين في القسم 20:

تتم إدارة فهرس الكتلة بشكل منفصل ، تمامًا مثل فهرس في جدول غير مترابط ، ويمكن أن يوجد في مساحة جدول منفصلة عن كتلة الجدول.

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية تكوين وإدارة المجموعات المفهرسة

مرجع لغة Oracle Database SQL من أجل بناء الجملة ودلالات إنشاء CLUSTER

نظرة عامة على Hash Clusters

كتلة التجزئة مثل الكتلة المفهرسة ، باستثناء استبدال مفتاح الفهرس بوظيفة التجزئة. لا يوجد فهرس كتلة منفصل موجود. في كتلة التجزئة ، تكون البيانات هي الفهرس.

باستخدام جدول مفهرس أو مجموعة مفهرسة ، تحدد Oracle Database صفوف الجدول باستخدام القيم الأساسية المخزنة في فهرس منفصل. للبحث عن صف أو تخزينه في جدول مفهرس أو كتلة جدول ، يجب أن تقوم قاعدة البيانات بتنفيذ عمليتي إدخال / إخراج على الأقل:

إدخال / إخراج واحد أو أكثر للبحث عن القيمة الأساسية أو تخزينها في الفهرس

إدخال / إخراج آخر لقراءة الصف أو كتابته في الجدول أو كتلة الجدول

للبحث عن صف أو تخزينه في كتلة تجزئة ، تطبق Oracle Database وظيفة التجزئة على قيمة مفتاح الكتلة للصف. تتوافق قيمة التجزئة الناتجة مع كتلة البيانات في الكتلة ، والتي تقرأها قاعدة البيانات أو تكتبها نيابة عن البيان الصادر.

التجزئة هي طريقة اختيارية لتخزين بيانات الجدول لتحسين أداء استرجاع البيانات. قد تكون مجموعات التجزئة مفيدة عند استيفاء الشروط التالية:

يتم الاستعلام عن الجدول أكثر من تعديله.

يتم الاستعلام عن عمود مفتاح التجزئة بشكل متكرر بشروط المساواة ، على سبيل المثال ، WHERE department_id = 20. بالنسبة لمثل هذه الاستعلامات ، يتم تجزئة قيمة مفتاح المجموعة. تشير قيمة مفتاح التجزئة مباشرة إلى منطقة القرص التي تخزن الصفوف.

يمكنك تخمين عدد مفاتيح التجزئة وحجم البيانات المخزنة مع كل قيمة مفتاح بشكل معقول.

إنشاء مجموعة تجزئة

لإنشاء مجموعة تجزئة ، يمكنك استخدام نفس عبارة CREATE CLUSTER كما في مجموعة مفهرسة ، مع إضافة مفتاح تجزئة. يعتمد عدد قيم التجزئة للمجموعة على مفتاح التجزئة.

مفتاح الكتلة ، مثل مفتاح الكتلة المفهرسة ، هو عمود واحد أو مفتاح مركب تشترك فيه الجداول الموجودة في المجموعة. قيمة مفتاح التجزئة هي قيمة فعلية أو محتملة يتم إدراجها في عمود مفتاح الكتلة. على سبيل المثال ، إذا كان مفتاح المجموعة هو department_id ، فيمكن أن تكون قيم مفتاح التجزئة 10 و 20 و 30 وهكذا.

تستخدم Oracle Database دالة تجزئة تقبل عددًا لا حصر له من قيم مفاتيح التجزئة كمدخلات وتفرزها في عدد محدود من المجموعات. تحتوي كل مجموعة على معرّف رقمي فريد يُعرف بقيمة التجزئة. يتم تعيين كل قيمة تجزئة لعنوان كتلة قاعدة البيانات للكتلة التي تخزن الصفوف المقابلة لقيمة مفتاح التجزئة (القسم 10 و 20 و 30 وما إلى ذلك).

في المثال التالي ، عدد الأقسام المحتمل وجودها هو 100 ، لذلك تم تعيين HASHKEYS على 100:

بعد إنشاء staff_departments_cluster ، يمكنك إنشاء جداول الموظفين والأقسام في نظام المجموعة. يمكنك بعد ذلك تحميل البيانات في كتلة التجزئة تمامًا كما هو الحال في المجموعة المفهرسة.

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية إنشاء مجموعات التجزئة وإدارتها

استعلامات كتلة التجزئة

في استعلامات كتلة التجزئة ، تحدد قاعدة البيانات كيفية تجزئة إدخال القيم الأساسية بواسطة المستخدم.

على سبيل المثال ، يقوم المستخدمون بشكل متكرر بتنفيذ استعلامات مثل ما يلي ، وإدخال أرقام معرف قسم مختلفة لـ p_id:

إذا استعلم المستخدم عن موظفين في department_id = 20 ، فقد تقوم قاعدة البيانات بتجزئة هذه القيمة إلى الحاوية 77. إذا استفسر المستخدم عن موظفين في department_id = 10 ، فقد تقوم قاعدة البيانات بتجزئة هذه القيمة إلى المجموعة 15. تستخدم قاعدة البيانات قيمة التجزئة المُنشأة داخليًا لتحديد موقع الكتلة التي تحتوي على صفوف الموظف للقسم المطلوب.

يصور الرسم التوضيحي التالي مقطع كتلة التجزئة كصف أفقي من الكتل. كما هو موضح في الرسم ، يمكن للاستعلام استرداد البيانات في إدخال / إخراج واحد.

الشكل 2-6 استرداد البيانات من مجموعة تجزئة

يتمثل أحد قيود مجموعات التجزئة في عدم توفر عمليات مسح النطاق على مفاتيح المجموعة غير المفهرسة. افترض عدم وجود فهرس منفصل لمجموعة التجزئة التي تم إنشاؤها في Hash Cluster Creation. لا يمكن لاستعلام الأقسام ذات المعرفات بين 20 و 100 استخدام خوارزمية التجزئة لأنه لا يمكنه تجزئة كل قيمة ممكنة بين 20 و 100. نظرًا لعدم وجود فهرس ، يجب أن تقوم قاعدة البيانات بإجراء فحص كامل.

تنويعات كتلة الهاش

كتلة التجزئة أحادية الجدول هي نسخة محسّنة من مجموعة التجزئة التي تدعم جدولًا واحدًا فقط في كل مرة. يوجد تعيين واحد لواحد بين مفاتيح التجزئة والصفوف.

يمكن أن تكون مجموعة التجزئة أحادية الجدول مفيدة عندما يحتاج المستخدمون إلى وصول سريع إلى جدول بواسطة المفتاح الأساسي. على سبيل المثال ، غالبًا ما يبحث المستخدمون عن سجل موظف في جدول الموظفين حسب معرف الموظف.

تقوم مجموعة التجزئة المصنفة بتخزين الصفوف المقابلة لكل قيمة دالة التجزئة بطريقة تمكن قاعدة البيانات من إرجاعها بكفاءة بترتيب مرتبة. تقوم قاعدة البيانات بالفرز الأمثل داخليًا. بالنسبة للتطبيقات التي تستهلك البيانات دائمًا بالترتيب الفرز ، يمكن أن تعني هذه التقنية استردادًا أسرع للبيانات. على سبيل المثال ، قد يقوم التطبيق دائمًا بالفرز في عمود Order_date في جدول الطلبات.

دليل مسؤول قاعدة بيانات Oracle للتعرف على كيفية إنشاء مجموعات تجزئة ذات جدول فردي وفرز

تخزين الكتلة الهاش

تخصص Oracle Database مساحة لمجموعة التجزئة بشكل مختلف عن الكتلة المفهرسة.

في المثال في Hash Cluster Creation ، تحدد HASHKEYS عدد الأقسام المحتمل وجودها ، بينما يحدد SIZE حجم البيانات المرتبطة بكل قسم. تحسب قاعدة البيانات قيمة مساحة التخزين بناءً على الصيغة التالية:

وبالتالي ، إذا كان حجم الكتلة هو 4096 بايت في المثال الموضح في Hash Cluster Creation ، فإن قاعدة البيانات تخصص 200 كتلة على الأقل لمجموعة التجزئة.

لا تحد Oracle Database من عدد قيم مفاتيح التجزئة التي يمكنك إدراجها في المجموعة. على سبيل المثال ، على الرغم من أن HASHKEYS هي 100 ، فلا شيء يمنعك من إدراج 200 قسم فريد في جدول الأقسام. ومع ذلك ، تتضاءل كفاءة استرداد مجموعة التجزئة عندما يتجاوز عدد قيم التجزئة عدد مفاتيح التجزئة.

لتوضيح مشكلات الاسترجاع ، افترض أن الكتلة 100 في الشكل 2-6 ممتلئة تمامًا بالصفوف للقسم 20. يقوم المستخدم بإدراج قسم جديد مع معرف القسم 43 في جدول الأقسام. يتجاوز عدد الأقسام قيمة HASHKEYS ، لذلك تجزئ قاعدة البيانات معرّف القسم 43 إلى قيمة التجزئة 77 ، وهي نفس قيمة التجزئة المستخدمة لـ department_id 20. تجزئة قيم الإدخال المتعددة إلى نفس قيمة الإخراج تسمى تضارب التجزئة.

عندما يقوم المستخدمون بإدراج صفوف في الكتلة للقسم 43 ، لا يمكن لقاعدة البيانات تخزين هذه الصفوف في الكتلة 100 ، وهي ممتلئة. تقوم قاعدة البيانات بربط الكتلة 100 بكتلة تجاوز سعة جديدة ، على سبيل المثال الكتلة 200 ، وتخزن الصفوف المدرجة في الكتلة الجديدة. كلا المربعين 100 و 200 مؤهلين الآن لتخزين البيانات لأي قسم. كما هو مبين في الشكل 2-7 ، يتطلب استعلام أي من القسم 20 أو 43 الآن إدخالين / إدخالين لاسترداد البيانات: الكتلة 100 والكتلة المرتبطة بها 200. يمكنك حل هذه المشكلة عن طريق إعادة إنشاء المجموعة باستخدام HASHKEYS مختلفة القيمة.

الشكل 2-7 استرداد البيانات من مجموعة تجزئة عند حدوث تصادم تجزئة

دليل مسؤول قاعدة بيانات Oracle لمعرفة كيفية إدارة المساحة في مجموعات التجزئة

نظرة عامة على جداول السمات المجمعة

جدول مجموعة السمات هو جدول منظم كومة يخزن البيانات على مقربة شديدة على القرص بناءً على توجيهات التجميع المحددة من قبل المستخدم. تحدد التوجيهات أعمدة في جداول مفردة أو متعددة.

التوجيهات هي كما يلي:

التكتل. حسب طلب التوجيه الخطي بيانات الطلبات في جدول وفقًا للأعمدة المحددة.

ضع في اعتبارك استخدام نظام المجموعات حسب الترتيب الخطي ، وهو الإعداد الافتراضي ، عندما تؤهل الاستعلامات بادئة الأعمدة المحددة في عبارة نظام المجموعات. على سبيل المثال ، إذا كانت استعلامات sh.sales غالبًا ما تحدد إما معرّف العميل أو معرّف العميل ومعرّف المنتج معًا ، فيمكنك تجميع البيانات في الجدول باستخدام Cust_id لطلب العمود الخطي ، prod_id.

التكتل. حسب بيانات أوامر التوجيه المتداخلة ORDER في جدول واحد أو أكثر باستخدام خوارزمية خاصة ، على غرار وظيفة Z-order ، والتي تسمح بتقليل الإدخال / الإخراج متعدد الأعمدة.

ضع في اعتبارك استخدام نظام المجموعات BY INTERLEAVED ORDER عندما تحدد الاستعلامات مجموعة متنوعة من مجموعات الأعمدة. على سبيل المثال ، إذا حددت استعلامات sh.sales أبعادًا مختلفة في أوامر مختلفة ، فيمكنك تجميع البيانات في جدول المبيعات وفقًا للأعمدة الموجودة في هذه الأبعاد.

لا يتوفر تجميع السمات إلا لعمليات إدراج المسار المباشر. يتم تجاهله في DML التقليدي.

يحتوي هذا القسم على المواضيع التالية:

مزايا جداول السمات المجمعة

تتمثل الفائدة الأساسية للجداول المجمعة بالسمات في تقليل الإدخال / الإخراج ، والذي يمكن أن يقلل بشكل كبير من تكلفة الإدخال / الإخراج وتكلفة وحدة المعالجة المركزية لعمليات فحص الجدول. يحدث تقليل الإدخال / الإخراج إما مع المناطق أو عن طريق تقليل الإدخال / الإخراج المادي من خلال التقارب المادي الأقرب على القرص للقيم المجمعة.

يحتوي الجدول مجمع السمات الميزات التالية:

يمكنك تجميع جداول الحقائق بناءً على أعمدة الأبعاد في المخططات النجمية.

في المخططات النجمية ، تؤهل معظم الاستعلامات جداول الأبعاد وليس جداول البيانات الفعلية ، لذا فإن التجميع حسب أعمدة جدول البيانات الفعلية ليس فعالاً. تدعم Oracle Database التجميع على أعمدة في جداول الأبعاد.

يمكن أن يحدث تقليل الإدخال / الإخراج في عدة سيناريوهات مختلفة:

عند استخدامها مع فهارس Oracle Exadata Storage أو Oracle In-Memory min / max pruning أو خرائط المنطقة

في تطبيقات OLTP للاستعلامات التي تؤهل بادئة وتستخدم تجميع السمة بترتيب خطي

في مجموعة فرعية من أعمدة التجميع لـ By INTERLEAVED ORDER Clustering

يمكن أن يؤدي تجميع السمات إلى تحسين ضغط البيانات ، وبهذه الطريقة يؤدي بشكل غير مباشر إلى تحسين تكاليف فحص الجدول.

عندما تكون نفس القيم قريبة من بعضها البعض على القرص ، يمكن لقاعدة البيانات ضغطها بسهولة أكبر.

لا تتحمل Oracle Database تكلفة تخزين الفهرس وصيانته.

دليل تخزين بيانات Oracle Database لمزيد من مزايا الجداول المجمعة بالسمات

الانضمام إلى جداول السمات المجمعة

يسمى تجميع السمات الذي يستند إلى الأعمدة المرتبطة تجميع السمة الصلة. على النقيض من مجموعات الجدول ، لا تخزن جداول ربط السمات المجمعة البيانات من مجموعة من الجداول في نفس كتل قاعدة البيانات.

على سبيل المثال ، ضع في اعتبارك جدول مجمع السمات ، والمبيعات ، المرتبطة بجدول أبعاد ، والمنتجات. يحتوي جدول المبيعات على صفوف من جدول المبيعات فقط ، لكن ترتيب الصفوف يعتمد على قيم الأعمدة المنضمة من جدول المنتجات. يتم تنفيذ الصلة المناسبة أثناء نقل البيانات ، وإدخال المسار المباشر ، وعمليات إنشاء الجدول AS SELECT. في المقابل ، إذا كانت المبيعات والمنتجات في كتلة جدول قياسية ، فستحتوي كتل البيانات على صفوف من كلا الجدولين.

دليل تخزين بيانات Oracle Database لمعرفة المزيد حول تجميع السمات

تقليل الإدخال / الإخراج باستخدام المناطق

أ منطقة هي مجموعة من كتل البيانات المتجاورة التي تخزن الحد الأدنى والحد الأقصى لقيم الأعمدة ذات الصلة.

عندما تحتوي جملة SQL على مسندات على أعمدة مخزنة في منطقة ما ، تقارن قاعدة البيانات القيم الأصلية بالحد الأدنى والحد الأقصى المخزنين في المنطقة. بهذه الطريقة ، تحدد قاعدة البيانات المناطق التي يجب قراءتها أثناء تنفيذ SQL.

تقليل الإدخال / الإخراج هو القدرة على تخطي كتل الجدول أو الفهرس التي لا تحتوي على البيانات التي تحتاجها قاعدة البيانات لتلبية استعلام. يمكن أن يقلل هذا التخفيض بشكل كبير من تكلفة الإدخال / الإخراج ووحدة المعالجة المركزية لعمليات مسح الجدول.

خرائط المنطقة

خريطة المنطقة هي بنية وصول مستقلة تقسم كتل البيانات إلى مناطق. تنفذ Oracle Database كل خريطة منطقة كنوع من العرض الفعلي.

عندما يتم تحديد CLUSTERING في جدول ، تقوم قاعدة البيانات تلقائيًا بإنشاء خريطة منطقة على أعمدة التجميع المحددة. تربط خريطة المنطقة الحد الأدنى والحد الأقصى لقيم الأعمدة بكتل بيانات متتالية في جدول مجمع السمات. تستخدم الجداول التي تم تجميعها بواسطة السمات خرائط المنطقة لإجراء تقليل الإدخال / الإخراج.

يمكنك إنشاء جداول مجمعة حسب السمات لا تستخدم خرائط المنطقة. يمكنك أيضًا إنشاء خرائط منطقة بدون جداول مجمعة بالسمات. على سبيل المثال ، يمكنك إنشاء خريطة منطقة على جدول يتم ترتيب صفوفه بشكل طبيعي على مجموعة من الأعمدة ، مثل جدول تداول الأسهم الذي يتم ترتيب تداولاته حسب الوقت. يمكنك تنفيذ عبارات DDL لإنشاء خرائط المنطقة وإفلاتها والاحتفاظ بها.

الغرض من المناطق

للحصول على تشبيه فضفاض للمناطق ، ضع في اعتبارك مدير المبيعات الذي يستخدم خزانة كتب من pigeonholes ، والتي تشبه كتل البيانات.

يحتوي كل حمام على إيصالات (صفوف) تصف القمصان المباعة للعميل ، مرتبة حسب تاريخ الشحن. في هذا القياس ، تشبه خريطة المنطقة كومة من بطاقات الفهرسة. تتوافق كل بطاقة مع "منطقة" (نطاق متجاور) من فتحات الحمام ، مثل فتحات الحمام 1-10. لكل منطقة ، تسرد البطاقة الحد الأدنى والحد الأقصى لتواريخ الشحن للإيصالات المخزنة في المنطقة.

عندما يريد شخص ما معرفة القمصان التي تم شحنها في تاريخ معين ، يقوم المدير بقلب البطاقات حتى تصل إلى النطاق الزمني الذي يحتوي على التاريخ المطلوب ، ويلاحظ منطقة الحمام ، ثم يبحث فقط في ثقوب الحمام في هذه المنطقة عن الإيصالات المطلوبة. بهذه الطريقة ، يتجنب المدير البحث في كل حفرة في خزانة الكتب عن الإيصالات.

كيف تعمل خريطة المنطقة: مثال

يوضح هذا المثال كيف يمكن لخريطة المنطقة تقليم البيانات في استعلام يحتوي المسند على ثابت.

افترض أنك قمت بإنشاء جدول عناصر السطر التالي:

يحتوي عنصر سطر الجدول على 4 كتل بيانات مع صفين لكل كتلة. يوضح الجدول 2-3 الصفوف الثمانية في الجدول.


دعم Impala DML لجداول Kudu (إدراج ، تحديث ، حذف ، UPSERT)

تدعم Impala عبارات DML معينة لجداول Kudu فقط. تتيح لك عبارتا UPDATE و DELETE تعديل البيانات داخل جداول Kudu دون إعادة كتابة كميات كبيرة من بيانات الجدول. تعمل جملة UPSERT كمزيج من INSERT و UPDATE ، وإدراج صفوف حيث لا يوجد المفتاح الأساسي بالفعل ، وتحديث أعمدة المفاتيح غير الأساسية حيث يوجد المفتاح الأساسي بالفعل في الجدول.

يكرم بيان INSERT لجداول Kudu المتطلبات الفريدة وليس NULL لأعمدة المفاتيح الأساسية.

نظرًا لأن Impala و Kudu لا يدعمان المعاملات ، فإن تأثيرات أي عبارة INSERT أو UPDATE أو DELETE تظهر على الفور. على سبيل المثال ، لا يمكنك عمل تسلسل من عبارات UPDATE وتجعل التغييرات مرئية فقط بعد الانتهاء من جميع العبارات. أيضًا ، إذا فشلت عبارة DML جزئيًا ، فإن أي صفوف تم إدراجها بالفعل أو حذفها أو تغييرها تظل في الجدول ، فلا توجد آلية تراجع للتراجع عن التغييرات.

على وجه الخصوص ، إدراج. قد تُدرج عبارة SELECT التي تشير إلى الجدول الذي يتم إدراجه في صفوف أكثر مما هو متوقع ، لأن جزء SELECT من العبارة يرى بعض الصفوف الجديدة يتم إدراجها ويعالجها مرة أخرى.

لا ينطبق بيان LOAD DATA ، الذي يتضمن معالجة ملفات بيانات HDFS ، على جداول Kudu.

بدءًا من Impala 2.9 ، تضيف عمليات INSERT أو UPSERT في جداول Kudu تلقائيًا تبادلًا وعقدة فرز إلى الخطة التي تقسم الصفوف وتفرزها وفقًا لنظام التقسيم / المفتاح الأساسي للجدول الهدف (ما لم يكن عدد الصفوف المراد تغييرها) المدرجة صغيرة بما يكفي لبدء تنفيذ عقدة واحدة). نظرًا لأن أقسام Kudu وفرز الصفوف عند الكتابة ، فإن التقسيم المسبق والفرز يزيل بعض الحمل من Kudu ويساعد عمليات INSERT الكبيرة على الإكمال دون مهلة. ومع ذلك ، قد يؤدي هذا السلوك الافتراضي إلى إبطاء الأداء الشامل لعمليات INSERT أو UPSERT. بدءًا من Impala 2.10 ، يمكنك استخدام / * + NOCLUSTERED * / و / * + NOSHUFFLE * / تلميحات معًا لتعطيل التقسيم والفرز قبل إرسال الصفوف إلى Kudu. بالإضافة إلى ذلك ، نظرًا لأن الفرز قد يستهلك قدرًا كبيرًا من الذاكرة ، ضع في اعتبارك تعيين خيار الاستعلام MEM_LIMIT لتلك الاستعلامات.


الشيء الوحيد الذي قفز إلي على الفور هو هذا:

يفترض التصميم الخاص بك أن كل طالب سيكون له أم واحدة وأب واحد بالضبط. أستطيع أن أخبرك الآن أن الأمر لن يكون كذلك. قد يكون لدى الطلاب ذوي الوالدين المطلقين والدتان ووالدان ، سيرغب جميعهم في إدراج معلومات الاتصال الخاصة بهم. قد يكون لبعض الطلاب آباء مثليين أو سحاقيات ، وبالتالي أبان أو أمتان. قد يكون لدى بعض الطلاب لا هذا ولا ذاك، وبدلاً من ذلك قد يكون لديهم وصي قانوني ليس والدهم أو والدتهم.

قد يكون أحد الحلول لهذا هو أن يكون لديك جدول لـ "شخص" ، وربط الأشخاص بكل طالب. حدد ما إذا كان هذا الشخص أبًا أو أمًا (أو وصيًا من غير الوالدين). سيؤدي هذا أيضًا إلى تبسيط وجود الأشقاء: يمكن أن يكون لديك نفس الأم ، والأب ، وما إلى ذلك للعديد من الطلاب.

بالنسبة لغالبية الطلاب ، لن تكون هذه مشكلة ، ولكن لأكثر مما تعتقد ، ستكون كذلك. قدم معروفًا لتلك العائلات وإدارتك من خلال تسهيل التعامل مع سيناريوهات عائلية مختلفة!

بعض الأشياء التي قفزت

خذ اقتراح مارتن يورك وكن متسقًا قدر الإمكان ، حيث يقوم المستخدم بتحديد أسماء المفاتيح الأساسية مثل user_id بدلاً من id لكل جدول لأنه سيجعل الأمر أقل إرباكًا لمن يكتبون / يحتفظون بـ SQL. بالنسبة للمفاتيح الخارجية ، أود أن أقترح الجدول أولاً ، على سبيل المثال area_id على عكس IdArea لأنه يتدفق بشكل أفضل مع اللغة الطبيعية.

بالنظر إلى ERD الخاص بك ، هناك أماكن يفشل فيها الوصول إلى 3NF (وهو مستوى من تطبيع قاعدة البيانات يجب أن تسعى إليه عندما يكون ذلك ممكنًا)

استخدم أنواع الحقول المناسبة ، يبدو أنك تستخدم سلسلة كثيرًا ، يجب أن تكون أشياء مثل تاريخ التوظيف عمودًا فعليًا للطابع الزمني / التاريخ والوقت ، ويمكن تعداد الجنس ، وما إلى ذلك.

يمكن أن تكون جميع معلومات جهة الاتصال / الهاتف في جداول الموظفين والطلاب أماكن في جداول هاتف / جهات اتصال أكثر ملاءمة لأن تلك هي علاقة لعلاقات عديدة.

جدول الحضور الخاص بك. يبدو أنه ينص إما على أن الطالب التحق بالمدرسة في يوم معين أم لا. يبدو أن هذا سيكون شيئًا أكثر على مستوى الفصل ، حيث يمكن للطالب حضور نصف يوم وما شابه.

هل من الممكن أن يكون لدى الموظف أكثر من نوع واحد من الموظفين ، إذا كان الأمر كذلك ، فيجب أن يكون لديك جدول ارتباط لربط الموظفين بأنواع الموظفين

بدلاً من سنوات الخدمة في الموظفين ، لا يمكنك فقط استخدام عمود تاريخ التوظيف لمعرفة ذلك بدلاً من تحديث عمود سنة الخدمة كل عام.

هذه بعض الأشياء التي لاحظتها ، وآمل أن تساعد.

تسمى كل المعرفات الخاصة بك (المعرفات الفريدة) بالمعرف (هذا جيد وهو يعمل من أجلك)
لكنني وجدت أنه عندما تبدأ في عمل الصلات ، قد يصبح من الصعب قراءته. وبالتالي أود تسمية المفتاح الفريد بعد الجدول. على سبيل المثال User_ID في جدول المستخدم وما إلى ذلك.

لتسهيل قراءة المعرفات ، استخدم حالة الجمل أو افصل الكلمات بعلامة _
تعمل المعرفات مثل IDArea معًا كثيرًا. لذا IdArea أو ID_Area أو Id_Area (تذكر اختيار نمط وكن متسقًا بالرغم من ذلك).

يحتوي جدول الموظفين على الكثير من المعلومات التي يمكن أن يكون الكثير منها NULL.
أفضل أن يكون لدي جدول شخص ليحتوي على معلومات الأشخاص. ثم جدول علاقة لعقد سفن العلاقات بين الناس. بهذه الطريقة عندما يتم توسيع قاعدة البيانات الخاصة بك (وسيحدث هذا في بيئة الأعمال) يمكنك التعبير عن العلاقات الأخرى بين الموظفين.

المتعلقة بالموظفين. مثل طاقم العمل ، سأحتفظ بالتفاصيل الشخصية للطالب في جدول الأشخاص. ملحوظة.سأحتفظ بجدول منفصل (أو عرض) للموظفين / الطالب الذي لديه ارتباط في جدول الأشخاص.

أتفق مع جميع ملاحظات الطرف الآخر أعلاه ، لكنني سأتطرق إلى بعض النقاط المحددة:

يمكنك بالتأكيد القيام ببعض التطبيع الإضافي. هناك أماكن قد يؤدي فيها ذلك إلى اتخاذ قرار واع بعدم التطبيع تمامًا (قد يكون هناك بعض الأسباب لعدم القيام بذلك.. اعتمادًا على مساحة مشكلتك) ، ولكن بشكل عام ، عندما أبدأ في رؤية نفس أسماء الحقول تظهر في جداول متعددة (بخلاف علاقات PK / FK) ، أصبحت مرتابًا. أحد الأمثلة (الذي يتطرق إليه مارتن يورك ، لكنني سأتقدم خطوة أخرى) هو جميع حقول "الأشخاص". لاحظ مستوى الازدواجية بين جدول "طاقم العمل" وجدول "الطالب" فيما يتعلق بالأم / الآباء / أماكن العمل / المهن. الأمهات والآباء بشر. الموظفين هم أيضا الناس. الطلاب أناس.

ألاحظ أن لديك حقل "ملاحظات" في جدول الطالب. أوصي بشدة بتعريف جدول "ملاحظات" بمفتاح خارجي لجدول "الطلاب" مع الحقول التالية (يقوم Staff_ID بتسجيل من قام بالملاحظة). بمرور الوقت ، ستتراكم الملاحظات ، وسيكون من المفيد معرفة متى ومن قام بها:

جدول الملاحظات: Observation_ID، Student_ID، Observation_Date، Observation، Staff_ID

أوافق على فكرة أنه يجب أن يكون هناك جدول منفصل "Contact_Info". علاوة على ذلك ، أراهن أنك سترغب في إرسال بريد للطالب (أو والديه) من وقت لآخر. أود أن أدرج جدول "عناوين" لهذا الغرض. لن أتظاهر بمعرفة كيفية عملها في بوليفيا ، لكن في الولايات المتحدة ، تفضل المدارس إرسال بطاقات التقارير بالبريد (على الرغم من أنه يمكن للآباء أيضًا تتبع تقدم طلابهم عبر الإنترنت هذه الأيام).

رواتب الموظفين يمكن أن تتغير. بينما قد تقرر أنه من المقبول استبدال هذه القيمة ، فهذه منطقة أخرى حيث يشير التطبيع الصحيح إلى جدول رواتب الموظفين ، والذي يتضمن حقول المعرف والراتب والتاريخ الفعال.

يمكن أن يكون المدى الذي تستغرقه في عملية التطبيع أمرًا صعبًا ، ولكن كما لاحظ واحد أو أكثر من المعلقين الآخرين ، يجب عليك دائمًا التصوير لـ 3NF. أعدك ، من واقع تجربتي المؤلمة ، أنه عندما يقرر رئيسك في العمل أنه يريد تقريرًا يوضح زيادة رواتب الموظفين على مدى خمس سنوات ، فسوف تكون سعيدًا لأنك فعلت ذلك.

بينما يحدث غالبًا أن هناك قرارًا واعًا قائمًا على التصميم لـ "إلغاء تطبيع" الجدول ، يجب توثيق القرار لأولئك الذين قد يحتاجون إلى الحفاظ على قاعدة البيانات الخاصة بك في المستقبل ، عندما لا تكون هناك.


2 إجابات 2

للإجابة على السؤال مباشرة ، هناك طريقتان لتنفيذ العملية.

  • إذا كان عدد أعمدة varchar المتضمنة في الجدول صغيرًا (واحد أو اثنان) ، فمن العملي إنشاء أعمدة زائفة مؤقتة
  • إذا كان عدد أعمدة varchar أكبر ، فإن الطريقة أعلاه ليست عملية جدًا - لذلك تقوم بإنشاء جدول زائف. هذا هو الأكثر استخدامًا في البرامج النصية لتحديثات البيانات الوصفية لبعض أدوات قاعدة البيانات مثل ErWin أو ER / Studio (لقد استخدمت كلتا الأداتين ، وراجعت البرامج النصية التي تم إنشاؤها قبل التقديم)

ملاحظة على الطاولات الكبيرة: إذا كان الجدول يحتوي على بضعة آلاف من السجلات أو أقل ، يمكنك إجراء العملية مرة واحدة. في حالة جداول المليون سجل ، يكون الأداء على دفعات أكثر عملية (لنفترض أن 1000 أو 100 من السجلات في كل مرة).

الأعمدة المؤقتة الزائفة (لقد نسيت ما إذا كان هناك اسم آخر أكثر ملاءمة) هي أعمدة تستخدم لتخزين نتيجة التحويل. في هذه الحالة ، ستكون أيضًا الأعمدة الأخيرة بعد العملية.

  1. قم بإنشاء أعمدة جديدة بالطول المطلوب. لا تنسَ تضمين أي قيود تحقق أو افتراضات في التعريف الجديد
  2. قم بإجراء تحديث (أو تحديثات ، انظر الملاحظة أعلاه) لتخزين بيانات العمود القديم في العمود الجديد.
  3. قم بإجراء النسخ الاحتياطي للسجل وقم بعمل نقطة التفتيش ، حتى لا تسمح للسجل بالنمو بشكل سخيف.
  4. إذا كان العمود القديم يحتوي على أي قيد (قيود) مرتبطة به ، فقم بإسقاطها.
  5. قم بإسقاط العمود القديم.
  6. أعد تسمية العمود الجديد باسم العمود القديم
  7. أعد بناء الفهارس المتأثرة (أو الكل ، إذا كان العمود المتأثر أيضًا جزءًا من قيد مفتاح أساسي متفاوت - نادرًا ما يستخدم شخص (n) varchar كـ PK ، لكنني رأيت بعضًا).

هذه هي نفس العملية المفصلة في إجابة هارون.

عندما يكون التعديل في أكثر من حفنة من الأعمدة ، يكون إنشاء جدول جديد أكثر عملية ، بناءً على مخطط الجدول القديم.

  1. قم بإنشاء جدول جديد ، بدون أي قيود على الجدول (PK ، FK ، إلخ). أحضر فقط الأعمدة في هذا الوقت (NOT NULL ، DEFAULT ، CHECK ، إلخ)
  2. أدخل البيانات في الجدول القديم في الجدول الجديد (انظر ملف ملاحظة على الطاولات الكبيرة في الاعلى). SET IDENTITY_INSERT هنا أمر لا بد منه.
  3. الآن ، قم بإسقاط جميع قيود الجدول (PK ، FKs ، الشيكات) وتشغيلها على الجدول القديم. أعد إنشاء تلك القيود والمشغلات في الجدول الجديد.
  4. أعد إنشاء كافة الفهارس الأخرى (كلها مرة واحدة أو واحدة في كل مرة ، بناءً على نافذة الصيانة) من الجدول القديم ، في الجدول الجديد. ما لم يكن الجدول لا يحتوي على فهرس متفاوت ، يجب القيام بذلك بعد الخطوة 3. أو ، على الأقل ، بعد إنشاء قيد PK.
  5. تحقق مما إذا كان كل شيء يسير على ما يرام (إذا لم تنسَ أحد المشغلات أو القيود في العملية) ، وإذا كان كل شيء على ما يرام ، فقم بإسقاط الجدول القديم.
  6. أعد تسمية الجدول الجديد بالاسم الموجود في الجدول القديم

ملاحظة في الخطوة 4: إذا كان لديك أي فهارس مكررة تم اكتشافها (اكتشاف الفهارس المكررة موضوع طويل جدًا ، راجع مدونة Kimberly Tripp على SQLSkills.com) ، فهذه هي فرصتك للتخلص منها إذا كان الأمر كذلك.

التغيير من VARCHAR إلى NVARCHAR له بعض الآثار على الأداء ، لأي خادم SQL أقل من 2008R2 ، على الأقل. بالنسبة لـ SQL 2008 R2 ، يحتوي Aaron Bertrand على بعض منشورات المدونة حول ميزة ضغط Unicode - والتي يمكنها موازنة التوازن عند استخدام أعمدة NVarchar لتخزين المحتوى الذي يمكن تخزينه على أعمدة VARCHAR. لم أقرأها بالكامل كما تستحق المقالات ، لكن الموضوع مثير للاهتمام.

تخزن أعمدة NVARCHAR رأسياً (IOW ، قبل 2008R2) جميع الأحرف في الأعمدة مع 2 بايت لكل حرف. على سبيل المثال ، سيتم تخزين السلسلة "MSSQL" في 5 بايت على عمود VARCHAR و 10 على NVARCHAR واحد. نظرًا لأن أعمدة السلسلة غير LOB تقتصر على تخزين 8000 كحد أقصى بايت، فهذا يعني أن VARCHAR يمكنه تخزين 8000 حرف ، بينما NVARCHR يقتصر على 4000 حرف.

دلالات تلك الحقائق:

  • نظرًا لأن مفاتيح الفهرس تقتصر على 900 بايت (انظر المستندات في CREATE INDEX) ، إذا حاولت فهرسة عمود NVARCHAR (500) ، فلن يفشل الأمر (إذا كان هذا هو العمود الوحيد في مفتاح الفهرس) ، ولكن إذا قمت بالتحديث أو أدخل صفًا يحتوي على أكثر من 450 حرفًا - (الحجم الإجمالي للأعمدة الأخرى في مفتاح الفهرس ، إذا كان الأمر كذلك) ستفشل العملية.
  • كلما زاد عدد وحدات البايت المراد تشغيلها ، زاد العمل المطلوب. تقرأ / تكتب / تقارن / تخزن ضعف البايت.
  • اعتمادًا على حجم الجدول ، وتأثير أعمدة السلسلة على الحجم المخزن للجدول وكيفية مشاركة الجدول في حجم قاعدة البيانات ، يمكنك توقع زيادة حجم قاعدة البيانات (المستخدمة) وجميع المتغيرات التي تؤثر عليها بشكل مباشر أم لا (مثل وقت النسخ الاحتياطي / الاستعادة ، وصيانة الفهرس ، وما إلى ذلك).

تحرير: كما ذكر gbn ، لا يستحق إنشاء شيء لمجرد استخدام VARCHARs عندما يكون لديك متطلب واضح يحتاج إلى ملء أعمدة NVARCHAR.


3 إجابات 3

كما صرح دوج ، بدأت في البحث في هذا الأمر ، وانتهى بي الأمر باختبار / عرض توضيحي أكبر / إلخ. مما خططت له أصلاً. لقد اتبعت منهج فئة "المجمع" ، بدءًا بإصدار AuraEnabled من FieldSetMember في FieldSetMember.apx:

يستخدم هذا في FieldSetController.apxc ، والذي يمكنه القيام بأشياء مثل أ) الحصول على أسماء أنواع الكائنات التي تحتوي على مجموعات حقول و ب) الحصول على الحقول لمجموعة الحقول كقائمة من FieldSetMember:

يتم استخدام وحدة التحكم في fsTest.cmp

وحدة التحكم المرتبطة ، fsTesdtController.js ، تتعامل بشكل أساسي مع الأحداث:

ينشئ المساعد ، fsTestHelper.js ، واجهة المستخدم لعرض الكائنات بمجموعات الحقول ومجموعات الحقول للكائن المحدد والنموذج المُنشأ ومنطقة الاختبار لإثبات ربط البيانات:

وقليلًا من CSS لجعلها أفضل قليلاً في fsTest.css:

ينفذ المكون Force: appHostable ، بحيث يمكن استخدامه في تطبيق S1 Mobile. لاستخدامه بشكل مستقل ، إليك fsTestApp.app:

عند التشغيل ، تبدو واجهة المستخدم كما يلي:

لاستخدامه ، انقر فوق رمز التحديث / إعادة التحميل في الجزء العلوي الأيسر. قد يستغرق هذا بضع ثوانٍ لأن عدد الكائنات الموجودة في مؤسسة نموذجية ضخم. إذا لم يكن لديك أي مجموعات حقول ، فلن ترى أي شيء في القائمة. إذا قمت بذلك ، فسيتم سرد أي أنواع كائنات مع مجموعات حقول. سيؤدي النقر فوق الارتباط الخاص بنوع الكائن إلى جلب مجموعات الحقول من الخادم وعرضها في القائمة الموجودة في الجزء العلوي الأيمن. سيؤدي النقر فوق ارتباط مجموعة الحقول إلى إنشاء النموذج وقائمة الاختبار. أدخل القيم وعلامة تبويب / اضغط على رجوع لرؤية تغيير القيم. انقر فوق الزر "إرسال اختبار" لمشاهدة القيم.

لاحظ أن هناك خطأ في ui: inputDate يمكن أن يحدث عند استخدام الإنشاء الديناميكي. ستحصل على دوّار وسيتم حظره.

يمكنك تغيير DisplayType-> تعيين المكون في configMap في fsTestHelper.js. يمكنك إجراء التعيين بطريقة أخرى ، عبر التعليمات البرمجية والبيانات الوصفية وما إلى ذلك ، إذا رغبت في ذلك.

اسمحوا لي أن أعرف إذا كان لديك أي أسئلة. إنه ليس تطبيقًا قويًا ، ولكنه قد يوفر بعض الأفكار حول كيفية التعامل مع هذا.


شاهد الفيديو: كورس QGIS 3. التعامل مع جدول البيانات الوصفية Attribute Table (شهر اكتوبر 2021).