आपके प्रश्न का उत्तर तार्किक है, भौतिक नहीं - आप जिस मूल्य को देखते हैं वह व्यावसायिक कारणों से बदल सकता है। उदाहरण के लिए, यदि आप अपने ग्राहकों को ईमेल पते से अनुक्रमित करते हैं, तो ईमेल पता बदलने पर क्या होता है? जाहिर है कि यह आपके सभी लुकअप टेबलों पर लागू नहीं होगा, लेकिन पूरे एप्लिकेशन में इसे उसी तरह से करने का लाभ यह है कि यह आपके कंप्यूटर को सरल बनाता है। यदि सब कुछ पूर्णांक है → पूर्णांक संबंध आंतरिक रूप से, तो आप कवर हैं।
सिर्फ सैंडी को अपनी टिप्पणी पढ़ें - शायद इस मामले में आप वास्तव में क्या चाहते हैं एक चेक बाधा है , न कि एक विदेशी कुंजी / लुकअप, जैसे:
create table icecream (flavour varchar(10))
go
alter table icecream add constraint ck_flavour check (flavour in ('Orange', 'Pista', 'Mango'))
go
insert into icecream (flavour) values ('Orange')
go
insert into icecream (flavour) values ('Vanilla')
go
इसे चलाएं और आप प्राप्त करें:
(1 row(s) affected)
Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "ck_flavour". The conflict occurred in database "GAIUSDB", table "dbo.icecream", column 'flavour'.
The statement has been terminated.
यह एक कुशल, उच्च-प्रदर्शन विधि है, लेकिन निश्चित रूप से नुकसान यह है कि एक नया स्वाद जोड़ने का अर्थ है एक कोड परिवर्तन। मैं इसे एप्लिकेशन में करने के खिलाफ सलाह दूंगा - क्योंकि तब आपको इसे हर एप्लिकेशन में करने की आवश्यकता होती है जो इस DB से जुड़ता है, यह सबसे साफ संभव डिज़ाइन है क्योंकि सत्यापन करने के लिए केवल एक ही कोड पथ है।