طراحی جدول با یک کلید مشترک
با سلام و عرض احترام
طبق شکل زیر من سه تا جدول دارم
آی دی های جدول کاربر و جدول مشتری توس اس کیو ال تولید میشه و شروعش از یک هستش
جدول پیگیری (Follow) جدول مشترک بین این دو هستش یعنی هم کاربر می تونه پیگیری داشته باشه و هم مشتری
حال امکان داره که TargetId که همون آی دی های مشتری یا کاربر هستش تکراری بشه و این خودش یه خطا هستش!
و موقع کوئری گرفتن از کجا میشه فهمید که برای کاربر هست یا برای مشتری؟
طراحی درست این مدل چه روشی هست که از یک جدول پیگیری برای جدول های مشتری و کاربر استفاده بشه؟ به صورتی که جدول کاربر و مشتری شروع آی دی هاشون از یک تا بی نهایت هستش.
با تشکر
1 پاسخ
سلام ITPRO عزیز، در مورد حالتی که شما مد نظرتون هست اول باید بگم که نمیشه یک ستون به چند جدول ارتباط داشته باشه، یعنی SQL Server این اجازه رو به شما نمیده. راهکار هایی که بنده می تونم به شما پیشنهاد بکنم:
- ایجاد یک ستون که کلید خارجی نیست (یعنی به هیچ جدولی ارتباط نداره) و در کنارش یک ستون با عنوان Type ایجاد کنید که نوع رابطه رو مشخص کنه و مقادیر مشخصی بگیره، مثلاً User و Customer و حتماً با یک Check Constraint بررسی بشه مقدار ستون. برای عدم درج مقدار ناصحیح در کلید خارجی یک Trigger بنویسید که زمان درج مقدار Id رو بر اساس Type ای که میخواد درج بشه در جدول مربوطه بررسی کنه. حتماً بر روی ستون ها ایندکس گذاری کنید.
- حالت دوم ایجاد دو ستون برای ارتباط بین دو جدول هست که Nullable باشن و هر کدوم از ارتباط ها که نباید باشه مقدارش Null باشه.
- حالت سوم ایجاد دو جدول جداگانه برای هر کدوم از ارتباط هاست که هر جدول کلید خارجی مربوط به جدول متناظر خودش رو داره. میتونید برای Query گرفتن مقدار این جدول ها رو با هم Union کنید و یک ستون Type بهشون به صورت ثابت داخل Query ها اضافه کنید.