ورود

View Full Version : int یا char؟



usef64
شنبه 07 بهمن 1391, 12:55 عصر
با سلام.
من داخل دیتابسم چندتا جدول دارم که هرکدوم مسلما یه pk دارن. با توجه به اینکه اگه منid رو int بگیرم، نسبت بهchar حجم خیلی بیشتری رو میگیره و از طرفی میخوام خودsql به ازای هر رکوردی یه id بندازه(identity)، به نظرتون int بگیرم بهتره یا cast انجام بدم؟

محمد سلیم آبادی
یک شنبه 08 بهمن 1391, 06:51 صبح
به نظرتون int بگیرم بهتره یا cast انجام بدم؟
منظورتون از cast انجام بدم چیه؟

نکته 1: identity تنها روی ستونهای اعدادی (مثل smallint tinyint int ... ) میتواند تنظیم شود. چطور شما میخواهین char را cast کنید...

نکته 2: جداول موجودیت های جهان واقعی هستند، هر نمونه از این موجودیت ها قطعا یک مقدار واقعی (که وجود خارجی دارد) منحصر بفرد دارد که شما بهتر است آن مقدار را کلید اولیه در نظر بگیرین. بطور مثال موجودیت "شخص" دارای یک مقدار منحصر بفرد به نام "کد ملی" می باشد که خب ما آن را کلید اولیه در نظر می گیریم، در نتیجه نیازی به خصیصه identity هم نخواهد بود.

نکته 3: برای نوع داده Char بایستی طول در نظرگرفت اگر بخواهین 1000 سطر را مقدار دهی کنید بایستی 3 بایت برای آن ستون در نظر بگیرین در صورتی که با در نظر گرفتن smallint که 2 بایت فضا اشغال میکنه می توانید بیش از 30000 سطر را مقدار دهی کنید. البته بدون در نظر گرفتن gap ای که به مرور زمان بر اثر حذف و درج بوجود می آید.

shooshishooshi
سه شنبه 10 بهمن 1391, 15:28 عصر
نوع داده ای هزینه ، تصویر چی باید باشد؟

سعید کشاورز
سه شنبه 10 بهمن 1391, 23:23 عصر
منظورتون از cast انجام بدم چیه؟

نکته 2: جداول موجودیت های جهان واقعی هستند، هر نمونه از این موجودیت ها قطعا یک مقدار واقعی (که وجود خارجی دارد) منحصر بفرد دارد که شما بهتر است آن مقدار را کلید اولیه در نظر بگیرین. بطور مثال موجودیت "شخص" دارای یک مقدار منحصر بفرد به نام "کد ملی" می باشد که خب ما آن را کلید اولیه در نظر می گیریم، در نتیجه نیازی به خصیصه identity هم نخواهد بود.



من مبتدی هستم..اینی هم که میگم نمیدونم درست هستش یا نه..
اگه قرار باشه واسه شخص فیلد کلید را کد ملی در نظر بگیریم و هیچ فیلد ID دیگه که مقدار identity داشته باشه رو توی جدول "شخص" نداشته باشیم اونوقت به یه مشکل بر میخوریم..زمانی که مثلا داریم با سی شارپ برنامه مینویسم اگه بخواهیم رکورد شخص رو آپدیت کنیم ، اونوقت دیگه نمیشه فیلد کد ملی رو آپدیت کرد.چون برای آپدیت کردن ما نیاز به شرط داریم..اگه توی دستورات اس کیو ال این شرط رو بزاریم :

update persno......where codemelli=@codemelli
اونوقت برنامه ارور میده..امیدوارم منظورم رو گرفته باشین که چیه..

محمد سلیم آبادی
چهارشنبه 11 بهمن 1391, 07:19 صبح
این مساله بر می گرده به کلید های خارجی که به ستون کدملی ارجاع داده شده اند. اگر خصیصه ON UPDATE برای کلید های خارجی NO ACTION در نظر گرفته شده باشد موقع بروز رسانی کلید اولیه جدول (کد ملی) این مشکل پیش خواهد آمد. برای رفع این مساله بایستی آن خصیصه روی مثلا cascade تنظیم شده باشد.
اگر صراحتا وضعیت بروزرسانی و حذف را برای کلید خارجی تنظیم نکنید برای هر دو عمل No action خواهیم داشت. به این معنا که از حذف و ویرایش کلید اولیه در جدول اصلی ممانعت به عمل خواهد آمد، پیام پیغام error ای که شما ازش نام بردین.

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