سؤال

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

1) إضافة حقل نص إلى الجدول، وتخزين قائمة متسلسلة من المفاتيح الأساسية هناك

2) الحفاظ على جدول رابط، مع كل صف كونه فرد إلى واحد.

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

ما هي الطريقة الأكثر كفاءة لتنفيذ مثل هذه العلاقة الواحدة في MySQL؟ أو، ربما، هناك حل مشرق للغاية حفظ البيانات مباشرة على نظام الملفات بطريقة أو بأخرى، وإلا بعض مشغل التخزين الآخر؟

هل كانت مفيدة؟

المحلول

فقط احتفظ بجدول "كثير"، مع عمود رئيسي للجدول الأساسي.

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

IMHO الخيار الثاني الأكثر احتمالا (مع العديد من المنتجات البديلة) هو استخدام ISAM.

نصائح أخرى

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

ليس الكثير من الإجابة ولكن بعض الأسئلة ونهج ممكن ....

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

من المحتمل أن ينظر أفضل حل في طبيعة البيانات والعلاقات؟ ما هي طبيعة البيانات والبحث؟ ما نوع العلاقة التي تحاول احتواءها؟ منظمة؟ متعلق ب؟ الوالد / الأطفال؟

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


CREATE  TABLE IF NOT EXISTS one_table (
  `one_id` INT UNSIGNED  NOT NULL AUTO_INCREMENT
           COMMENT 'The The ID of the items in the one table' ,
  ... other data
)

CREATE  TABLE IF NOT EXISTS many_table (
  `many_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
            COMMENT 'the id of the items in the many table',
  `one_id` INT UNSIGNED  NOT NULL
           COMMENT 'The ID of the item in the one table that this many item belongs to' ,
  ... other data
)

بالتأكيد، بالطبع، لإنشاء فهرس على One_ID في كلا الجدولين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top