PDA

View Full Version : راهنمایی در رابطه با ساخت و ارتباط جداول



karimi5555
پنج شنبه 28 آذر 1392, 19:41 عصر
با سلام خدمت همه دوستان
من 3 تا جدول دارم به صورت زیر هستند
114143
در جدول Group گروه های من قرار دارند و در جدول SubGroup زیر گروه های من قرار دارند.
باید چه فیلدهایی به جدول Table1 اضافه کنم و ارتباط بین این جداول چطوری میشه؟
من می خوام که به کاربر بگم یه گروه رو انتخاب کنه و بعد زیر گروه رو انتخاب کنه و بعد اونها رو بزارم تو جدول Table1
حالا می خوام اینکار رو کنم ولی نمی دونم چطوری؟
در ضمن من بین جدول گروه ها و زیر گروه ها ارتباط دادم آیا درسته یا باید طور دیگه ای عمل کنم؟
من یه کم تازه کار هستم ممنون می شم که کمک کنید.

حمیدرضاصادقیان
جمعه 29 آذر 1392, 13:53 عصر
سلام.
در جدول Subgroup شما باید یک ID برای خود SUbgroup داشته باشید و ترکیب subgroup, Group میشه فیلد کلید اصلی شما .

در مورد Table1 شما یک فیلد ID برای User دارید و یک فیلد Group و یک فیلد Subgroup.
به این دلیل که ممکنه فقط یک گروه رو انتخاب کنه و زیر گروه نداشته باشه. در غیر اینصورت میشد با یک تغییر مختصر در جدول subgroup که کلید اصلی رو از دوفیلد فعلی برداریم و با قرار دادن یک فیلد ID به عنوان کلید ٬ اونو در جدول Table1 قرار بدیم و دیگه نیازی به Group نداشته باشیم.
در این حالت با همون ID به راحتی میشه نام گروه رو هم بدست آورد.

karimi5555
شنبه 30 آذر 1392, 19:06 عصر
یعنی به این شکل یا باز هم مشکل داره؟
114242
من یک فیلد SubGroup_ID به جدول SubGroup اضافه کردم و کلید اصلی قرار دادم و یک فیلد SubGroup_ID و یک فیلد Group_ID هم به جدول Table1 اضافه کردم که
با SubGroup_ID در جدول SubGroup ارتباط داره و Group_ID هم با جدول گروهها ارتباط داره.
می خواستم لطف کنید و بگید که درست انجام دادم یا نه؟
ممنون

حمیدرضاصادقیان
شنبه 30 آذر 1392, 22:10 عصر
این طراحی الان درسته.
اگر گفتم زیر گروه همیشه باید مقدار داشته باشه با تغییری که در پست قبل گفتم میتونید فقط فیلد ID مربوط به Subgroup رو در جدول سوم اضافه کنید و اینجوری شکلتون ساده تر میشه.
ولی با این طراحی شما امکان تعریف گروه بدون تعریف زیر گروه رو نیز به کاربر دادید.

بهزاد علی محمدزاده
یک شنبه 01 دی 1392, 13:31 عصر
سلام . طراحی درسته و کار می کنه اما چرا وقتی گروه و زیر گروه از یه نوع هستند در همون جدول بصورت خود ارجاع طراحی نشه ؟ خاصیت خود ارجاع اینه که تا چندین سطح رو پشتیبانی می کنه اما در این طراحی دوستمون اگر subgroup خودش باز زیر گروه داشته باشه اونوقت باید براش یه جدول جدا در نظر بگیریم ؟ مثلا در یه وب سایت , یه منو زیر منو داره . خود زیر منو هم باز زیر منو داره . و ما برای هر سطح که یه جدول در نظر نمی گیریم . بلکه خود ارجاع تعریف می کنیم .

بهزاد علی محمدزاده
یک شنبه 01 دی 1392, 13:33 عصر
نمونه :

http://upload7.ir/images/93238219408152470196.png

نمونه بعدی : ER

http://upload7.ir/images/73817778277194519461.png

http://upload7.ir/images/87122027119664421965.png

و با یه Self -join هم می تونی باهاش کار کنی :

مشاهده کارمندان و مدیران آنها :


SELECT EM.NAME AS EMPLOYEE, E.NAME AS MANAGER
FROM EMP AS E
JOIN EMP AS EM
ON E.EMPID = EM.MANAGERID
ORDER BY E.NAME DESC


لیست کارمندان تحت مدیریت a :


SELECT EM.NAME AS EMPLOYEE, E.NAME AS MANAGER
FROM EMP AS E
JOIN EMP AS EM
ON E.EMPID = EM.MANAGERID
AND E.Name = 'a'
ORDER BY E.NAME DESC

حمیدرضاصادقیان
دوشنبه 02 دی 1392, 13:11 عصر
بله حرف شما صحیحه.میشه به این شکل نیز طراحی کرد.
بستگی داره آیا کاربر در همین دوسطح فقط نیاز داره یا بیشتر.
من احساس میکنم در همین دو سطح بیشتر نیازشون نشه به همین خاطر منم مطرح نکردم.
در غیر اینصورت طراحی شما صحیحه و میتونه گزینه مناسبتری برای اینکار باشه.
به جز این میتونن از فیلد HierarchyID خود SQL Server استفاده کنند که قابلیتهای خیلی زیادی نیز در اختیارتون میذاره.