كيفية تحديد نوع بيانات محدد من قبل المستخدم مع أعضاء قابلين للعنونة؟

StackOverflow https://stackoverflow.com/questions/372898

سؤال

لدي موقف غير عادي للنمذجة في قاعدة بيانات MS SQL Server:المفتاح الأساسي للجدول هو مفتاح "طبيعي" متعدد المقاطع يتكون من 5 مفاتيح خارجية (بأحجام ثابتة).

أود أن أكون قادرًا على تحديد نوع بيانات محدد من قبل المستخدم لتنفيذ بنية البيانات بناءً على CHAR(8) البدائي بطريقة تجعل العناصر قابلة للعنونة كحقول فردية.

على سبيل المثال (في الكود الكاذب السيئ):

UDT seggy
(
    seg1 char(2),
    seg2 char(1),
    seg3 char(1),
    seg4 char(2),
    seg5 char(2)
)

create table yotable
(
    pkfield seggy NOT NULL,
    etc varchar(14),   --whatever etc.
)
with pkfield as the primary key,
and also with seg1 as a foreign key to tableseg1,
and also with seg2 as a foreign key to tableseg2,
and so on

وبعد ذلك تكون قادرًا على القيام بأشياء مثل هذا:

insert into yotable (pkfield, etc) values ('abcdefgh','whatever')
select * from yotable where seg2 = 'c'
insert into yotable (seg1,seg2,seg3,seg4,seg5,etc)
    values ('ab','c','d','ef','gh', 'whatever')

حتى الآن كل ما وجدته هو هذا مقالة مشروع الكود والتي لا تذهب إلى حد كافٍ أو توفر روابط لمزيد من المعلومات، وهذا بدائي رابط MSDN.

من الواضح أن برنامج google-fu الخاص بي ضعيف الليلة، وأي روابط/تلميحات موضع تقدير كبير!

العنوان البديل:كيفية محاكاة حقول "التراكب" في SQL Server؟

MS SQL SERVER 2005 أو الإصدارات الأحدث المفترضة/المفضلة.

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

المحلول

يمكنك تحديد CLR UDT الذي يحتوي على البنية التي تريدها، ولكن (1) لن تتمكن من الاحتفاظ بالمفاتيح الخارجية (يجب أن تكون المفاتيح الخارجية على مستوى العمود، وليس حقلاً في UDT في عمود)، و (2) ليس من السهل تنفيذ CLR UDT (على الأقل مقارنة بما هو موجود في الكود الكاذب الخاص بك).بالإضافة إلى ذلك، من وصفك، يبدو أنها في الواقع أعمدة منفصلة لغويًا، وما تبحث عنه هو مجرد اختصار للراحة؛ربما لا يكون IMO a UDT هو النهج الأفضل في هذا السيناريو على أي حال.

أقترح الاحتفاظ بالأعمدة المنفصلة، ​​ولكن قم بإنشاء طريقة عرض تحتوي على عمود يربط الحقول معًا، أو عمود محسوب في الجدول يفعل الشيء نفسه.سيسمح هذا بالبحث باستخدام التدوين المدمج أو المنفصل.يمكنك بعد ذلك استخدام المشغل بدلاً من ذلك لتحليل الإدراج/التحديث في العمود المدمج إلى الأجزاء المكونة.

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