PDA

View Full Version : ایجاد جدول برای محصولات مختلف



mahsa_rezai
چهارشنبه 08 بهمن 1393, 12:06 عصر
سلام دوستان آقای sadegh.te برای نمایش ویژگی محصولات مختلف مثل موبایل و لپ تاپ و تبلت و لوازم خانگی و... روش زیر را معرفی کرده خواستم بدونم که بنظرتون بهتر نیست که جدول آخر را به

mahsa_rezai
چهارشنبه 08 بهمن 1393, 17:33 عصر
دوستان کسی نیست راهنمایی کنه؟

مهدی نان شکری
چهارشنبه 08 بهمن 1393, 20:39 عصر
با سلام

اگر منظورتان این هست که به اعضای هر نوع کالا، جدول مستقلی ایجاد کنید این روش صحیحی نیست. چرا که در صورت افزوده شدن نوع جدید، می بایست دوباره برنامه نویسی کرده و در برخی زمان ها حتی گزارش هایتان را باز نویسی کنید.

روشی که آقای sadegh.te مطرح کردن روش صحیحی است که به آن entity-attribute-value یا همان EAV می گویند.

ولی نکته مهمی که در استفاده از این روش مطرح است این است که نباید از این مدل در قسمت های کلیدی نرم افزار استفاده گردد. زیرا در این روش پایگاه داده به طور اتوماتیک کنترلی بر consistency داده های پایگاه داده نداشته و این عمل می بایست با کمک تریگر انجام شود.

دومین دلیلی که توصیه می شود در قسمت های حساس و کلیدی نرم افزار از این معماری استفاده نشود مشکل گزارش و تحلیل داده می باشد.
که در ابتدا انعطاف پذیری زیادی که به نرم افزار می دهد شما را خوشحال خواهد کرد ولی در انتهای کار برای ارائه گزارشات شاید دچار مشکلات متعددی شوید.

البته MS SQL Server در نسخه 2005 با ارائه قابلیت Pivot راه کاری برای حل این مشکل ارائه کرد. ولی باز هم تاکید دارم که در مواردی که Core نرم افزارتان بر این اساس استوار باشد به مشکل خواهید افتاد.

البته جناب آقای صادقیان در پستی با موضوع خصوصیات دینامیک سعی در ارائه راه کار هایی برای این مسئله داشتند که من از محتوای آن بی اطلاع هستم ولی حتما تجارب آقای صادقیان مفید و علمی خواهد بود و توصیه می کنم حتما بررسی فرمایید.

mahsa_rezai
چهارشنبه 08 بهمن 1393, 21:18 عصر
ممنونم از شما جناب NanShekari من

مهدی نان شکری
چهارشنبه 08 بهمن 1393, 22:14 عصر
اگر شما 4000 محصول داشته باشید و هر محصول به طور متوسط 20 خصوصیت داشته باشد کل رکورد های شما حتی به یک میلیون هم نمی رسد.
این روش برای تعداد خیلی بیشتر از این ها هم جواب گو می باشد.

تنها مشکل در نحوه گزارش گیری می باشد. به عنوان مثال من می خواهم موبایل کمتر از 3 میلیون تومان و رنگ سفید را انتخاب کنم به شرطی که قابلیت X رو هم داشته باشه در این حالت ممکن است در سمت دیتابیس کمی به مشکل بر خورد کنید ولی نه برای این تعداد رکورد.

روش جایگزین هم می تواند XML می باشد که کمی برنامه نویسی را راحت تر می کند.
در هر صورتبا توجه به تعداد رکورد شما و این که گزارشات پیچیده ای بر روی آن نخواهید داشت در انتخاب راه کار آزاد هستید.

موفق باشید

mahsa_rezai
چهارشنبه 08 بهمن 1393, 22:37 عصر
اگر شما 4000 محصول داشته باشید و هر محصول به طور متوسط 20 خصوصیت داشته باشد کل رکورد های شما حتی به یک میلیون هم نمی رسد.
این روش برای تعداد خیلی بیشتر از این ها هم جواب گو می باشد.


یعنی اگه داده های من به

مهدی نان شکری
پنج شنبه 09 بهمن 1393, 16:04 عصر
من نگفتم به یک میلیون برسه مشکل ساز خواهد بود چرا که در مورد دیتابیس هیچ وقت نمی شه به طور قطعی بدون داشتن اطلاعات کافی پاسخ داد.
برای پاسخ به این مسئله باید مشخصات سرور، نوع RDBMS مورد استفاده که در مورد شما به احتمال زیاد MS SQL است، تعداد و نوع هارد دیسک های سرور، نحوه RAID هارد دیسک ها و تعداد کاربران فعال سایت و همچنین پیش بینی همزمانی این تعداد کاربران مورد نیاز می باشد.

ولی در کل چون در روش مورد بحث تقریبا برای فیلتر از هیچ ایندکسی استفاده نخواهد شد(Full Scan) لذا بحث IO مسئله ساز می تواند باشد. ولی این به معنای از کار افتادن سرویس سایت شما نمی باشد و با استفاده از سخت افزار مناسب این مسئله قابل حل است و در مورد سایت شما نگرانی ایجاد نخواهد کرد.

فقط سعی کنید فیلد های اصلی کالا که در تمامی کالا ها یکسان می باشند مانند نوع کالا و برند آن را بر اساس مدل EAV طراحی نکنید تا بتوانید بر روی آن ایندکس گذاشته و جستجوی Pivot خود را محدود تر کنید.


با تشکر

mahsa_rezai
پنج شنبه 09 بهمن 1393, 17:58 عصر
فقط سعی کنید فیلد های اصلی کالا که در تمامی کالا ها یکسان می باشند مانند نوع کالا و برند آن را بر اساس مدل EAV طراحی نکنید تا بتوانید بر روی آن ایندکس گذاشته و جستجوی Pivot خود را محدود تر کنید.


ممنون از شما که با حوصله پاسخ سوال ها رو میدید.

همونطور که گفتید من فیلد های یکسان رو در یک جدول جدا گذاشتم. میشه یکم بیشتر راجع به روش جستجوی Pivot توضیح بدید؟ من اولین باره که این روش را میبینم.

با هم تشکر از شما

mahsa_rezai
پنج شنبه 09 بهمن 1393, 22:23 عصر
دوست گرامی من با توجه به توضیحات شما تونستم جداول و رابطه های زیر را طراحی کنم .
اگه میشه برسی کنید ببینید چه مشکلی داره ممنون.

مهدی نان شکری
جمعه 10 بهمن 1393, 12:20 عصر
با سلام

طراحی مناسبی می باشد ولی تنها نکته موجود در آن مشکل 3NF در جدول کالا می باشد.
فرم نرمال سطح 3 زمانی نقض می شود که خصوصیت (فیلد) غیر کلید به خصوصیت غیر کلید دیگری وابسته باشد.
در مورد جدول کالا خصوصیت ID_Group به ID_Brand وابسته است. پس می توان آن را حذف کرد و در جدول دیگری این وابستگی رو ایجاد کرد که این رو در جدول Brand ایجاد کرده اید.

فقط اگر جدول کالا تعداد رکورد های زیادی دارد و بیشتر جستجو ها بر روی آن خواهد بود بهتر است برای فیلد Image یا FileGroup آن را جدا نمایید یا از تکنیک های دیگر MSSQL استفاده نمایید.
همچنین جدول Attribute را هم می توانید کاملتر نمایید. البته در صورت نیاز. مثلا برای هر گروه یک سری مشخصات ایجاد گردد و در جدول attribute مشخص شود که مقدار attribute چه می باشد. چون در غیر این صورت ممکن است برای مانیتور X فیلدی مانند سایز مقدار گیرد ولی برای مانیتور Y فیلد بی ربطی مانند حجم مقدار پذیرد و شما consistency داده ها را نمی توانید کنترل نمایید. البته همان طور که قبلا هم گفتم در مدل EAV در بسیاری از حالات consistency را می بایست از طریق تریگر ایجاد کرد.

mahsa_rezai
جمعه 10 بهمن 1393, 12:45 عصر
در مورد جدول کالا خصوصیت ID_Group به ID_Brand وابسته است. پس می توان آن را حذف کرد و در جدول دیگری این وابستگی رو ایجاد کرد که این رو در جدول Brand ایجاد کرده اید.


ممنون از شما و اگه ID_Brand را حذف کنیم چطور میتونیم بفهمیم که این ویژگی مربوط به کدام برند هست. مثلا فرض کنید که ID_Brand سامسونگ 18 هست حالا ما در گروه موبایل و تبلت و لپ تاپ این برند را داریم. یعنی باید در کل گروه ها ID_Brand سامسونگ 18 باشد؟
میشه راهنمایی کنید که چطور در یک جدول دیگر میتونم پیاده سازیش کنم؟


فقط اگر جدول کالا تعداد رکورد های زیادی دارد و بیشتر جستجو ها بر روی آن خواهد بود بهتر است برای فیلد Image یا FileGroup آن را جدا نمایید یا از تکنیک های دیگر MSSQL استفاده نمایید.


منظور شما این هست که برای Image یک جدول جدا در نظر بگیریم و فقط ID عکس را در جدول کالا بگذاریم؟

تشکر

مهدی نان شکری
جمعه 10 بهمن 1393, 12:51 عصر
منظور من این هست که ID_Group حذف شود. چون با داشتن ID_Brand میتوان به گروه آن دسترسی پیدا کرد.

در مورد Image هم می توانید جدولشو جدا کنید هم این که با خصوصیت TEXTIMAGE_ON در هنگام Create Table فقط FileGroup آن را تغییر دهید (در این شرایط MSSQL به طور اتوماتیک داده های از جنس text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) را در FileGroup مشخص شده نگهداری می نماید.

و یا این که از تکنیک FileTable و مواردی از این دست استفاده نمایید.

مهدی نان شکری
جمعه 10 بهمن 1393, 12:57 عصر
مثلا فرض کنید که ID_Brand سامسونگ 18 هست حالا ما در گروه موبایل و تبلت و لپ تاپ این برند را داریم. یعنی باید در کل گروه ها ID_Brand سامسونگ 18 باشد؟
میشه راهنمایی کنید که چطور در یک جدول دیگر میتونم پیاده سازیش کنم؟


ببینید در طراحی پایگاه داده به این نکته توجه نمایید که موجودیت های سیستم را شناسایی نمایید.
همان طور که خودتان هم مطرح کردید سامسونگ یک برند است و ممکن است لامپ تولید کند و یا رادیو و یا توربین
ولی برند همه این گروه ها سامسونگ است. این مورد را نادیده گرفته اید و در جدولی که برند را تعریف می کنید فقط می تواند در یک گروه عضویت داشته باشد.

mahsa_rezai
جمعه 10 بهمن 1393, 13:01 عصر
ممنون از شما واقعا کمکم کردید.



همان طور که خودتان هم مطرح کردید سامسونگ یک برند است و ممکن است لامپ تولید کند و یا رادیو و یا توربین
ولی برند همه این گروه ها سامسونگ است. این مورد را نادیده گرفته اید و در جدولی که برند را تعریف می کنید فقط می تواند در یک گروه عضویت داشته باشد.

در این روش طراحی شده فکر کنم بشه ولی در این روش مثلا گروه موبایل برند سامسونگ کدش 18 هست و در گروه تبلت میتونیم بگیم برند سامسونگ کدش 32 باشه این روش درسته؟
یا باید جدول را تغییر دهم؟

حالا شما فرض کنید که گوشی سامسونگ نوت 3 داری چهار عکس هست آیا این 4 عکس را باید در چهار رکورد جدا ذخیره کنم؟

مهدی نان شکری
شنبه 11 بهمن 1393, 00:55 صبح
در این روش طراحی شده فکر کنم بشه ولی در این روش مثلا گروه موبایل برند سامسونگ کدش 18 هست و در گروه تبلت میتونیم بگیم برند سامسونگ کدش 32 باشه این روش درسته؟
یا باید جدول را تغییر دهم؟



اگر سایت شما زمانی به امید خدا پر رونق شد و تعداد سفارشات شما به حد بالایی رسید شما یا مدیران Business برای اخذ تصمیمات استراتژیک نیاز به آمارهایی مبتنی بر برند خواهند داشت.
به طور مثال من میخوام بدونم اگر در خصوص برند سامسونگ صرفنظر از گوشی یا تبلت یا مانیتور شرکتم چقدر سفارش داشته به طوری که اگر به یک حد ممکن رسیده مستقیما عمل واردات رو انجام بدم و هزینه تمام شدن اون رو کاهش بدم برای یک چنین گزارشی نیاز دارید برند سامسونگ داشته باشید نه برند تبلت سامسونگ نه برند موبایل سامسونگ. اصولا تو آبجکت اورینتت هم شما آبجکت سامسونگ دارید نه چیز دیگه ای.

برای این در جدول برند فیلد ID_Group را حذف کنید و جدول واسطی طراحی کنید که فیلد های زیر رو دارند
ID
ID_Group
ID_Brand
در این شرایط شما یک واسط خواهید داشت که برند رو به گروه وصل می کند بعد ID همین جدول رو در جدول کالا استفاده نمایید.(رابطه چند به چند) (این یک پیشنهاد بود و ممکن است نیازی به این در Business شما نباشد)

اگر شما نیاز به نگهداری چند تصویر یا فایل برای یک کالا دارید می توانید فیلد Image رو از جدول کالا حذف کرده و جدول دیگری برای نگهداری تصاویر در نظر بگیرید (رابطه یک به چند)

mahsa_rezai
شنبه 11 بهمن 1393, 10:40 صبح
برای این در جدول برند فیلد ID_Group را حذف کنید و جدول واسطی طراحی کنید که فیلد های زیر رو دارند
ID
ID_Group
ID_Brand
در این شرایط شما یک واسط خواهید داشت که برند رو به گروه وصل می کند بعد ID همین جدول رو در جدول کالا استفاده نمایید.(رابطه چند به چند)

اگر شما نیاز به نگهداری چند تصویر یا فایل برای یک کالا دارید می توانید فیلد Image رو از جدول کالا حذف کرده و جدول دیگری برای نگهداری تصاویر در نظر بگیرید (رابطه یک به چند)

ممنون از شما دوست گرامی.
باتوجه به توضیحاتی که شما گفتید من جداول رو تصحیح کردم اگه ممکنه ببینید مشکلی نداره؟

128055

مهدی نان شکری
شنبه 11 بهمن 1393, 12:38 عصر
لطفا جدول Image رو به صورت زیر اصلاح نمایید
ID
ID_Product
Image
Description(در صورت نیاز)

و جدول Product فیلد ID_Image رو حذف نمایید.
بدین صورت یک Product می تواند چندین عکس داشته باشد

mahsa_rezai
شنبه 11 بهمن 1393, 19:28 عصر
ممنون از شما اون مشکل با توضیحات شما حل شد.

این جداول بنظر شما آماده بکار هستند یعنی از لحاظ آنومالی و... میگم؟

اگه بخوام که کاربر ها برای هر محصول نظر بزارن باید مثل جدول Image براش یه جدول درست کنم؟ البته میخوام که هر کس برای محصول نظر گذاشت بقیه کاربران بتونن به اون نظر امتیاز بدن مثلا هرکس که روی دکمه کلیک کرد امتیاز اون نظر با 1 جمع بشه و یکی به امتیازاتش اضافه بشه میشه راهنمایی کنید؟
این جدول را در نظر گرفتم برای نظرات و امتیاز دهی بنظرتون درسته؟
128090
بازم ممنون

مهدی نان شکری
یک شنبه 12 بهمن 1393, 19:00 عصر
با سلام
بله درسته ولی معمولا برای امتیاز دادن به یک آیتم جدول زیر رو در نظر می گیرند
ID_Message
ID_User
Rate
DateTime

و کلید اصلی
ID_Message
ID_User
می باشد. و رتبه نهایی یک پیام معادل میانگین رتبه های داده شده به آیتم خواهد بود. در این شرایط یک کاربر قادر نیست برای یک آیتم بیش از یک بار امتیاز بدهد.
در ضمن شما برای کالا جدول Attribute رو تعریف نکردین(یادآوری)
موفق باشید

mahsa_rezai
یک شنبه 12 بهمن 1393, 19:27 عصر
با سلام
بله درسته ولی معمولا برای امتیاز دادن به یک آیتم جدول زیر رو در نظر می گیرند
ID_Message
ID_User
Rate
DateTime

و کلید اصلی
ID_Message
ID_User
می باشد.

سلام با تشکر از شما
یعنی جدول Message را تبدیل کنم به دو جدول Message و Rate ؟



در ضمن شما برای کالا جدول Attribute رو تعریف نکردین(یادآوری)
موفق باشید

من که جدول Attribute رو تعریف کردم تو عکسی که گذاشتم جدول Attribute هست آیا مشکلی داره؟

alireza_s_84
دوشنبه 13 بهمن 1393, 00:09 صبح
سلام دوستان آقای sadegh.te برای نمایش ویژگی محصولات مختلف مثل موبایل و لپ تاپ و تبلت و لوازم خانگی و... روش زیر را معرفی کرده خواستم بدونم که بنظرتون بهتر نیست که جدول آخر را به تعداد گروه ها ایجاد کنیم؟ مثلا برای موبایل جدول ویژگی موبایل یا برای لوازم خانگی جدول ویژه ی خودش و...
به این دلیل میگم جدول جدا که برای جستجو سریع تر باشه.


کالا ( شماره کالا ، نام نوع )
مشخصات ( شماره مشخصه ، ...)
ویژگی ها ( شماره کالا ، شماره مشخصه، مقدار )

مثال :
کالا( 1001، موبایل )
( 1002،ماشین لباس شویی)
..........
مشخصات ( 11001، رنگ )
( 11002، صفحه نمایش )
..........
ویژگی ها ( 1001، 11001، سبز)
( 1001، 11002، 5 اینچ )



به این تاپیک نگاهی بندازید بی ارتباط با خواسته شما نیست:
http://barnamenevis.org/showthread.php?456596

مهدی نان شکری
دوشنبه 13 بهمن 1393, 10:22 صبح
یعنی جدول Message را تبدیل کنم به دو جدول Message و Rate ؟

بلی همینطور است.



من که جدول Attribute رو تعریف کردم تو عکسی که گذاشتم جدول Attribute هست آیا مشکلی داره؟


بلی چون شما باید جدول تعریف Attribute رو داشته باشید بعد به آن مقدار دهی کنید.
مثلا جدولی به شکل زیر:

ID
Title
Nullable
RegEx
DataTypeID
ID_Group

در این صورت شما به یک گروه کالا یک سری فیلد دینامیک تعریف کردید بعد در جدولی که خودتون دارین باید ID_Attribute رو با ID_Product و مقدار فیلد ذخیره نمایید.

mahsa_rezai
دوشنبه 13 بهمن 1393, 13:10 عصر
بلی چون شما باید جدول تعریف Attribute رو داشته باشید بعد به آن مقدار دهی کنید.
مثلا جدولی به شکل زیر:

ID
Title
Nullable
RegEx
DataTypeID
ID_Group
در این صورت شما به یک گروه کالا یک سری فیلد دینامیک تعریف کردید بعد در جدولی که خودتون دارین باید ID_Attribute رو با ID_Product و مقدار فیلد ذخیره نمایید.

ممنون ولی نمیفهمم که شما چی گفتین.

یعنی از جدول گروه کلید خارجی بگیرم برای این جدولی که شما تعریف کردین؟

و کلید اصلی در جدول تعریف شده رو به عنوان کلید خارجی بدم به جدول Attribute ؟

و یک کلید اصلی جدول Product رو به عنوان کلید خارجی بدم به جدول Attribute?

اگه میشه یکم بیشتر راجع بهش توضیح بدین ؟ ممنون
بازم تشکر

مهدی نان شکری
دوشنبه 13 بهمن 1393, 13:47 عصر
بلی همین طوری هست
شما یک سری Attribute دارین که برای گروه موبایل معنی دار هست مانند نسخه OS و رنگ و سایز صفحه و ...
همچنین یک سری Attribute هم برای کالایی از جنس میز معنی دار هست مانند ارتفاع، طول، عرض، رنگ و ...
برای تعریف این فیلد ها باید یک جدول داشته باشید که در پست قبلی اشاره کردم. در این جدول شما Constraint های فیلد رو هم می توانید مشخص کنید مثلا فیلد نوع OS یک موبایل نمی تواند خالی باشد.

حالا در جدول دیگر باید بگویید که Product شماره 20 مقدار Android را برای Attribute سیستم عامل دارد. پس باید در جدولی ID_Product و ID_Attribute و مقدار آن مشخص شود.

mahsa_rezai
دوشنبه 13 بهمن 1393, 16:04 عصر
بلی همین طوری هست
شما یک سری Attribute دارین که برای گروه موبایل معنی دار هست مانند نسخه OS و رنگ و سایز صفحه و ...
همچنین یک سری Attribute هم برای کالایی از جنس میز معنی دار هست مانند ارتفاع، طول، عرض، رنگ و ...
حالا در جدول دیگر باید بگویید که Product شماره 20 مقدار Android را برای Attribute سیستم عامل دارد. پس باید در جدولی ID_Product و ID_Attribute و مقدار آن مشخص شود.

با تشکر فراوان از شما
من توضیحات شما رو رسم کردم اگه میشه ببیند درسته؟
ارتباط بین جدول گروه و اون جدولی که خودتون گفتین رو Fixed گذاشتم و جدول Attribute را با خط بنفش کشیدم.
و جدول نظر و امتیاز دهی به نظر را با خط مشکی کشیدم .

128134

مهدی نان شکری
دوشنبه 13 بهمن 1393, 16:20 عصر
با سلام
فیلد Attribute با ID_Fixed چه فرقی دارد؟ فکر کنم یکی باشه! کلید اصلی چیست؟
در جدول Rate فیلد ID_User نباید باشه تا مشخص بشه کدام کاربر رتبه داده؟ و همچنین کلید اصلی آن ID_Mesage و ID_User نباید باشه؟
فیلد DataTypeID هم باید از جدول DataType اخذ بشه. چون یک کلید خارجی است.
اگر مشکلات موجود برطرف بشه تقریبا درسته البته می شه امکانات دیگری هم اضافه کرد.

mahsa_rezai
دوشنبه 13 بهمن 1393, 17:50 عصر
با سلام
فیلد Attribute با ID_Fixed چه فرقی دارد؟ فکر کنم یکی باشه! کلید اصلی چیست؟

سلام ببخشید من الان منظور شما رو فهمیدم
شما میخواید که عنوان را در یک جدول بنویسیم مثلا RAM و Display و... و مقادیر آنها را در جدول دیگر بنویسیم درسته؟


در جدول Rate فیلد ID_User نباید باشه تا مشخص بشه کدام کاربر رتبه داده؟ و همچنین کلید اصلی آن ID_Mesage و ID_User نباید باشه؟

خوب وقتی که ما کلید اصلی جدول Message رو در جدول Rate کلید خارجی قرار دادیم از طریق همون کلید میشه فهمید که امتیاز مربوط به کدوم نظر هست. درسته؟


فیلد DataTypeID هم باید از جدول DataType اخذ بشه. چون یک کلید خارجی است.

میشه بگید که جدول DataType برای چی هستش چه فیلد هایی داره؟

واقعا ممنونم از شما خیلی کمک میکنید.

مهدی نان شکری
دوشنبه 13 بهمن 1393, 18:10 عصر
سلام ببخشید من الان منظور شما رو فهمیدم
شما میخواید که عنوان را در یک جدول بنویسیم مثلا RAM و Display و... و مقادیر آنها را در جدول دیگر بنویسیم درسته؟

دقیقا همین طوره، چون Attribute ها برای هر گروه متفاوتند. و دارای خصوصیاتی هستند که بایستی برای آنها مشخص کنیم. برای همین باید محلی برای تعریف آن داشته باشیم.



خوب وقتی که ما کلید اصلی جدول Message رو در جدول Rate کلید خارجی قرار دادیم از طریق همون کلید میشه فهمید که امتیاز مربوط به کدوم نظر هست. درسته؟

در جدول Message کاربر نظر دهنده مشخص می شود ولی ما می خواهیم امتیازهای یک نظر را هم داشته باشیم. برای این می بایست بدانیم کدام کاربران برای پیغامی که آقای x قرارداده امتیاز داده اند.
با این کار یک کاربر بیش از یک بار نمی تواند برای یک پیغام امتیاز بدهد.




میشه بگید که جدول DataType برای چی هستش چه فیلد هایی داره؟

در جدول DataType شما نوع داده های تعریف شده در سیستم را مشخص می کنید به عنوان مثال برای Attribute ظرفت در گروه کالای RAM مقدار Hello نا معتبر است و باید مقدار عددی وارد شود برای این کار در جدولی که Attribute های یک گروه را تعریف می کنید می بایست نوع داده آن را هم مشخص کنید.

ID
Title

فیلد های آن می تواند باشد. البته می توانید این رو به صورت Enum هم در نظر بگیرید. و برای آن جدولی طراحی نکنید.

mahsa_rezai
دوشنبه 13 بهمن 1393, 18:47 عصر
بازم ممنون
فیلد های Nullable و RegEx برای دریافت چه مقادیری هستند؟

بنظر جدول DataType بی فایده میاد چون وقتی که ما فیلد های جدول را تعریف میکنیم نوع مقادیر دریافتی آنها را مشخص میکنیم مثلا int یا nvarchar و... ؟

بازم تشکر

مهدی نان شکری
سه شنبه 14 بهمن 1393, 11:58 صبح
نه دیگه در مدل فیلد های دینامیک یا همان EAV فیلد توسط Metadata ی جدول دیتابیس تعریف نمی گردد بلکه توسط رکورد هایی که در جدول Attribute تعریف می کنید تعریف می شود و سپس مقدار آن در جدول دیگری ذخیره می شود (همان جدولی که AttributeValue را دارید). در پست های اولیه هم مطرح شد که باید consistency داده های فیلد های پویا به صورت Programming توسط تریگر حفظ شود. برای این کار می بایست نوع داده، طول آن در جدول Attribute نگهداری شود که هنگام درج مقدار برای هر کدام از Attribute ها بتوان Constraint های اولیه ره چک کرد. اگر منظور من رو متوجه نمی شوید دیاگرام هاش رو طراحی کنم و بفرستم.

Attribute
--------------------
AttributeID
GroupID
Title
DataTypeID
Len
RegEx




Group
------------------
GroupID
Title



Product
----------------------
ProductID
GroupID
.....



ProductAttribute
---------------------------
ProductID
AttributeID
Value

همان طور که می بینید برای Value که مقدار Attribute را نگهداری مکند DataType مشخصی تعریف نکردیم. این موضوع در جدول اول تعریف شده است و توسط تریگر کنترل می شود.

mahsa_rezai
سه شنبه 14 بهمن 1393, 12:31 عصر
سلام تشکر واقعا فهمش برام خیلی سخت شد

چرا باید با تریگر کنترلش کنیم؟

مگه تریگر بعد از عمل Insert یا Edite یا Delete کار نمیکنه؟ خوب ما چطور باید قبل از Insert این مقادیر را کنترل کنیم؟

جدول DataType شامل چه فیلدهایی میشود؟

آیا باید کلید اصلی DataType را به عنوان کلید خارجی به جدول Attribute که عنوان ها در اون تعریف میشه بدهیم؟

اگه جدول DataType را نگذاریم و با کد نویسی در داخل سایت مقدارها را کنترل کنیم مشکلی پیش می آید؟

اگه میشه یکم مسئله رو باز تر کنید. بازم تشکر

مهدی نان شکری
سه شنبه 14 بهمن 1393, 14:12 عصر
شما می توانید همه چیز را در برنامه کنترل کنید ولی اگر در برنامه باگی داشته باشید احتمال داشتن داده اشتباه خواهد بود. یا اگر پشتیبان نرم افزار داده ای را از طریق Management Studio وارد کند احتمال هر گونه اشتباهی خواهد بود. (البته این سلیقه شخص من هست و اجباری نیست)

جدول دیتا تایپ می تواند ID و Title داشته باشد. البته این جدول می تواند حذف شود(به صورت Enum تعریف شود)

تریگر می تواند قبل از عمل نوشتن در دیتابیس هم اجرا شود. برای این تعریف به صورت زیر خواهد بود


CREATE TRIGGER trigger_name on TableName Instead of Insert,Update,Delete
as
....

mahsa_rezai
سه شنبه 14 بهمن 1393, 15:11 عصر
ممنون

بنظر شما به چه صورت بهتره که تعریف بشه Enum با یک جدول جدا؟

فیلد Title در جدول DataType چه مقداری دریافت میکند؟

آیا برای کنترل جدول DataType فقط یک تریگر لازم است؟ که بفهمیم از چه نوعی هست.

فیلد های Len و RegEx چه مقادیری دریافت میکنند؟

آیا اگر توضیحاتی را که شما گفتید در ER اعمال کنم کار بخش محصولات تمام میشود؟ یا با هم جای کار دارد؟

ببخشید سوالاتم زیاد شد. تشکر از شما که با حوصله پاسخ میدید.

مهدی نان شکری
سه شنبه 14 بهمن 1393, 15:33 عصر
ترجیح من هر دو یعنی هم Enum برای کنترل Constraint سمت نرم افزار و Database برای نگهداری اسامی نوع داده ها که بعدها راحت تر متوجه کد های دیتاتایپ بشویم مثلا ممکن است به جای نوع داده متنی عدد 100 رو در نظر بگیرید برای مشخص شدن معنی عدد 100 بهتر هست که در جدول مشخصی ذخیره گردند. ولی این جدول همواره ثابت خواهد بود و هیچ Insert و Update نخواهد داشت.

فیلد Title نوع داده را مشخص می کند که به کاربر نشان می دهید مثلا (متنی، عدد، تاریخ، عکس، ایمیل، وب سایت، پول و ....) این اسامی باید برای کاربر قابل فهم باشد مثلا کلمه رشته به جای متنی استفاده نشود.

فیلد Len طول مقدار را مشخص می کند مثلا شما فیلد x را تعریف میکنید باید بگویید متنی به طول 20 کاراکتر و یا فیلد y عددی به طول 19 رقم البته می توانید خصوصیات دیگری نیز این جا بر حسب نیاز تعریف کنید. مانند تعداد رقم اعشار و ...


فیلد RegEx برای مشخص کردن یک Pattern برای مقدار فیلد می باشد مثلا برای ایمیل تعریف میکنید متنی با RegEx خاص آن که ورودی کاربر باید با آن Pattern مطابقت کند.

بلی تقریبا تمام می شود البته ریزکاری هایی هم می توان انجام داد مثلا یک فیلد از نوع انتخابی باشد و مقادیر آن باید از یک جایی خوانده شده و کاربر انتخاب نماید.

mahsa_rezai
سه شنبه 14 بهمن 1393, 15:54 عصر
ترجیح من هر دو یعنی هم Enum برای کنترل Constraint سمت نرم افزار و Database برای نگهداری اسامی نوع داده ها که بعدها راحت تر متوجه کد های دیتاتایپ بشویم مثلا ممکن است به جای نوع داده متنی عدد 100 رو در نظر بگیرید برای مشخص شدن معنی عدد 100 بهتر هست که در جدول مشخصی ذخیره گردند. ولی این جدول همواره ثابت خواهد بود و هیچ Insert و Update نخواهد داشت.

ممنون
ولی اگه ممکنه یه دیاگرام از این بخش DataType و Enum بادیگر جداول به من بدید که متوجه بشم؟ ممنون

نمیدونم چرا هر کاری میکنم نمیتونم که این قسمت رو درک کنم که برای هر فیلد نوعش را باید مشخص کنیم خوب فرضا چرا از همون اول برای جدول Attribute و Attribute_val مقدار nvarchar(max) را در نظر نمیگیریم که هر نوع داده ای داخل اون بتونیم بریزیم؟

اگه میشه این قسمت رو بگید که من متوجه بشم ممنون

Mousavmousab
پنج شنبه 16 بهمن 1393, 14:40 عصر
منظور من این هست که ID_Group حذف شود. چون با داشتن ID_Brand میتوان به گروه آن دسترسی پیدا کرد.

در مورد Image هم می توانید جدولشو جدا کنید هم این که با خصوصیت TEXTIMAGE_ON در هنگام Create Table فقط FileGroup آن را تغییر دهید (در این شرایط MSSQL به طور اتوماتیک داده های از جنس text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) را در FileGroup مشخص شده نگهداری می نماید.

و یا این که از تکنیک FileTable و مواردی از این دست استفاده نمایید.



سلام
کاربر گرامی در مورد File Table سوالی اینجا مطرح کردم ، اگر امکان داره پاسخ بدین. خیلی ممنون میشم. پیشاپیش تشکر می کنم. (http://barnamenevis.org/showthread.php?484274-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1-%DA%AF%DB%8C%D8%B1%DB%8C-File-Table-%D8%AF%D8%B1-SQL-Server-2012&p=2167352#post2167352)

masoud211
چهارشنبه 08 مهر 1394, 14:21 عصر
سلام از سایت خوبتون خیلی ممنونم لطف کنید جدول یک چاپخانه رو برام.بگید خیلی ممنونم