سؤال

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

أنا أفكر ltree (أو شيء من مثل ذلك) سيكون من المفيد إذا كان مقرونا التقليدية قائمة الجوار ("comment_id"/"parent_comment_id").

قبل اتخاذ يغرق في استخدام ltree ، أنا أتساءل عدد قليل من الأشياء:

  1. هل أنت أو هل تستخدم ltree?هو ما يمكن أن نسميه "الإنتاج جاهزة" ؟
  2. إذا كان الأمر كذلك ، ما هي المشاكل هل استخدامه إلى حل ؟ فعلت بعمل جيد ؟
  3. هل تعتقد أنه جيد يصلح تعليق الخيوط النظام ؟
    1. إذا كنت تستخدم ذلك ، ماذا كنت تستخدم ل "النص" جزء من الطريق ؟ هل وضعت شيئا مثل DMOZ سبيل المثال يستخدمون "أعلى.علم الفلك.علم الكونيات" أو قاعدة على شيء مثل المفتاح الأساسي "1.403.29.5"?
    2. هل هناك طريقة أفضل للقيام بذلك ؟ أنا متوترة قليلا باستخدام قائمة متداخلة النهج--لقد قرأت كل شيء يشير إلى أنه ليس كل الساخن مع التحديثات أو إدراج (ليس لديك إلى إعادة ترتيب كل شيء؟).أنا أيضا لا CS الرئيسية و هذا النوع من بنية البيانات هو شيء قد تنسى في المستقبل.هو أي شخص باستخدام متداخلة قوائم تعليقات أو شيء مثل ذلك ؟

إذا كان من أي مساعدة هنا هو مخطط أفكر:

CREATE TABLE comments (
    comment_id SERIAL PRIMARY KEY,
    parent_comment_id int REFERENCES comments(comment_id) ON UPDATE CASCADE ON DELETE CASCADE,
    thread_id int NOT NULL  REFERENCES threads(thread_id) ON UPDATE CASCADE ON DELETE CASCADE,
    path ltree NOT NULL,
    comment_body text NOT NULL,
    hide boolean not null default false
);

"مسار" عمود المستخدمة من قبل ltree, سوف ننظر بشيء من مثل:

<thread_id>.<parent_comment_id_#1>.<parent_comment_id_#2>.<my_comment_id>

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

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

المحلول

  1. نعم و نعم ؛
  2. التسلسل الهرمي من المقاطع في "قاعدة المعارف" (واحدة من تطبيقات);
  3. نعم ؛

تعريف أحد الجداول في السؤال:

                                                   Table "knowledgebase.section"
           Column           |           Type           |                                  Modifiers
----------------------------+--------------------------+-----------------------------------------------------------------------------
 section_sid                | integer                  | not null default nextval('knowledgebase.section_section_sid_seq'::regclass)
 section                    | character varying        | not null
 description                | character varying        |
 path                       | ltree                    | not null
 is_active                  | boolean                  | not null default true
 role_sid                   | integer                  | not null
 last_modified_by           | integer                  | not null
 creation_datetime          | timestamp with time zone | not null default now()
 last_modification_datetime | timestamp with time zone | not null default now()
 is_expanded                | boolean                  | not null default false
 section_idx                | tsvector                 |
Indexes:
    "section_sid_pkey" PRIMARY KEY, btree (section_sid)
    "section_section_key" UNIQUE, btree (section)
    "idxsection_idx" gist (section_idx)
    "path_gist_idx" gist (path)
Foreign-key constraints:
    "last_modified_by_fkey" FOREIGN KEY (last_modified_by) REFERENCES "user"."role"(role_sid) ON UPDATE CASCADE ON DELETE RESTRICT
    "role_sid_fkey" FOREIGN KEY (role_sid) REFERENCES "user"."role"(role_sid) ON  UPDATE CASCADE ON DELETE RESTRICT
Triggers:
    section_idx_update BEFORE INSERT OR UPDATE ON knowledgebase.section FOR EACH ROW EXECUTE PROCEDURE tsearch2('section_idx', 'section')

"مسار" عمود يستخدم المفتاح الأساسي كتسمية.

عينة من محتويات الحالية التي الجدول (فيما يتعلق المفتاح الأساسي و "المسار" عمود):

  section_sid | path
 -------------+-------
           53 | 34.53
           56 | 56
           55 | 29.55
           35 | 35
           54 | 34.54
           37 | 30.37
          ... | ...

نصائح أخرى

أنا أنصح أي شخص تنفيذ العلاقات الهرمية في SQL قراءة جو Celko أشجار الهرمية في SQL على Smarties.

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

استراتيجية واحدة (وهو ما يحدث لاستخدام) يمكن أيضا أن تكون موجودة في هذه السلسلة من المقالات:

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

انظر أيضا:

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