سؤال

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

Label | Description
------------------------------------
read  | This item has been read
READ  | You read this thing already

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

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

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

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

المحلول

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

لتجد كل الجداول الرجوع إلى العمود، يمكنك استخدام

select TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from 
INFORMATION_SCHEMA.KEY_COLUMN_USAGE where
REFERENCED_TABLE_NAME = '<table>' AND REFERENCED_COLUMN_NAME = '<column>'

نصائح أخرى

وبالنسبة للمستقبل هل يمكن إنشاء فهرس فريد على العمود "التسمية"، على سبيل المثال:

CREATE UNIQUE INDEX index_name ON table ((lower(label)));

وأو مراجعة دليل . ومن شأن ذلك أن تساعدك على تجنب هذا الوضع للمرة القادمة.

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