سؤال

أريد تزلج بين الزوج (TAG1، TAG2) و TAG_ID.

CREATE TABLE tags (
         question_id INTEGER NOT NULL,
         tag_id SERIAL NOT NULL,
         tag1 VARCHAR(20),
         tag2 VARCHAR(20),
         PRIMARY KEY(question_id, tag_id),
         (tag1, tag2) UNIQUE references tags(tag_id)          #How?
     );

أريد أي إشارة مثل:

(PHP, Perl) points to 1 and 2,
3 points to (C#, null) and (Python, Elinks)

بمعنى آخر، أريد أن تكون المرجع الفريد من (TAG1، TAG2) إلى العلامات (TAG_ID)، وليس فريدة من نوعها (TAG1، TAG2).

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

المحلول

قد يكون هذا أكثر مثل ما تبحث عنه:

CREATE TABLE tags (
    question_id INTEGER NOT NULL,
    tag_id SERIAL NOT NULL,
    tag1 VARCHAR(20),
    tag2 VARCHAR(20),
    PRIMARY KEY (tag_id),
    INDEX (question_id),
    UNIQUE (tag1, tag2)
);

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

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

يمنع قيد التفرد على (TAG1، TAG2) التعيين العكسي من وجود التكرارات.

فيما يلي بعض الأمثلة على ما يمكن أن تعمل:

يعمل:

1 -> (x، ذ)

2 -> (x، z)

Fails (TAG_ID هو مفتاح أساسي، وبالتالي فريد من نوعه):

1 -> (x، ذ)

1 -> (ص، س)

فشل (الزوج (TAG1، TAG2) غير فريد):

1 -> (x، ذ)

2 -> (س، ص)

ومع ذلك، فإن الزوج (X، Y) لا يساوي الزوج (y، x). لست متأكدا من كيفية قبض على حظر التفرد.

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