View Full Version : نحوه تعریف دامنه برای جدول ها درsql
salmah
جمعه 01 اسفند 1393, 16:23 عصر
سلام
دیتا بیس من شامل یه فروشگاه هست که شامل 9یا بیشتر بخش هست مثلا بخش پوشاک ، بخش لوازم التحریر، بخش مواد غذایی و......
که هرکدام دارای محصولات یا اقلام کالا هستند مثلا بخش لوارم التحریر که شامل خودکار ، مداد و.......... هست
جدولای من tmain : mid,mnam
tsub_main:mid,sid.snam
هست
الان میخوام id هربخش از یه شماره خاص شروع بشه مثلا پوشاک 1000 ، لوازم التحریر 2000و....
محصولات اینجور ثبت میشن
لوارم التحریر 1000 >> مدادبا کد 10001 ، خودکار با کد 10002 ، دفتر با کد 10003
مواد غذایی 2000 >> برنج 20001 ، روغن 20003 ، مرغ 20003 و.....
یعنی اگر به بخش موادغذایی محصول اضافه بشه خودش به طور خودکار از 2000 شروع کنه
الان برای طراحی اید چه کار کنم
و یا دنبال چه عنوانی در sql به عنوان راه حل باشم شاید تعریف دامنه که نوشتم درست نباشه
sajadsobh
جمعه 01 اسفند 1393, 16:50 عصر
خب موقع تعریف جدول توی قسمت identity باید به identity seed مقدار بدی. مثلاً اگه میخوای از 2000 شروع شه باید identity seed رو واسه اون کلید روی 2000 بذاری.
salmah
جمعه 01 اسفند 1393, 17:54 عصر
خب موقع تعریف جدول توی قسمت identity باید به identity seed مقدار بدی. مثلاً اگه میخوای از 2000 شروع شه باید identity seed رو واسه اون کلید روی 2000 بذاری.با تشکر
identity seed را پیدا نمی کنم
و اینکه زیر طبقه ها ازکجا بفهمن که اگر مثلا زیر طبقه لوارم التحریر 1000 هستند از 1001 شروع بشن
sajadsobh
جمعه 01 اسفند 1393, 23:43 عصر
موقع ساخت جدول وقتی یه ستون رو بعنوان کلید اصلی تعیین میکنید. روی اون ستون کلیک کنید. در قسمت peroperty های اون ستون یه قسمت هست به اسم identity specification. اون قسمت رو باز کنید.
http://www.uplooder.net/img/image/86/5623d433d8eae7895ffc5a8a31653a84/Untitled.jpg
Is Identity اگه روی yes باشه یعنی اینکه این فیلد خودبخود مقدار بگیره.
Identity Increment روی 1 تنظیم شده یعنی یکی یکی به مقدار اون اضافه میشه.
Identity Seed هم مقدار اولیه ست.
اینو شما تنظیم کن مثلاً روی 1000 باشه.
salmah
شنبه 02 اسفند 1393, 07:50 صبح
تشکر.
برای جدول اول درست شد حالا چ جوری برای جدول دوم لحاظ بشن یعنی اگر mid=1000 شد اونوقت در جدول مقدارsid از 1001,1002,1003و ........ بشه
SabaSabouhi
شنبه 02 اسفند 1393, 09:57 صبح
تشکر.
برای جدول اول درست شد حالا چ جوری برای جدول دوم لحاظ بشن یعنی اگر mid=1000 شد اونوقت در جدول مقدارsid از 1001,1002,1003و ........ بشه
سلام
من دیر وارد بحث شدم، اما میبینم که داری یه اشتباه میکنی که در آینده مشکلات زیادی برات ایجاد میکنه.
Id برای این کار نیست. Id یک ستون Identity هست، فقط و فقط برای نگهداری یک مقدار یکتا که به عنوان کلید اصلی جدولت کار میکنه.
برای این منظور شما باید یه ستون دیگه مثلاً به نام Code ایجاد کنی.
برای پر شدن خودکار مقدارش هم میتونی از Trigger استفاده کنی. یا تو خود برنامه مدیریتش کنی.
صبا صبوحی
salmah
شنبه 02 اسفند 1393, 11:15 صبح
سلام
من دیر وارد بحث شدم، اما میبینم که داری یه اشتباه میکنی که در آینده مشکلات زیادی برات ایجاد میکنه.
Id برای این کار نیست. Id یک ستون Identity هست، فقط و فقط برای نگهداری یک مقدار یکتا که به عنوان کلید اصلی جدولت کار میکنه.
برای این منظور شما باید یه ستون دیگه مثلاً به نام Code ایجاد کنی.
برای پر شدن خودکار مقدارش هم میتونی از Trigger استفاده کنی. یا تو خود برنامه مدیریتش کنی.
صبا صبوحی
صبا جان اگر بتونی بشتر توضیح بدی یا مثال بزنی ممنون میشم
مثلا چه جوری بگم اگر mid=1000 بود اونوفت sid را از 1001 شروع کن و یکی یکی بهش اضافه کن
tsub_main:mid,sid.snam
tmain : mid,mnam
SabaSabouhi
شنبه 02 اسفند 1393, 12:17 عصر
صبا جان اگر بتونی بشتر توضیح بدی یا مثال بزنی ممنون میشم
مثلا چه جوری بگم اگر mid=1000 بود اونوفت sid را از 1001 شروع کن و یکی یکی بهش اضافه کن
tsub_main:mid,sid.snam
tmain : mid,mnam
سلام
1. تو جدول کلیدت Id هست که Identity هست و هیچ انتظار دیگهای هم ازش نداری، غیر از این که کلید اصلی جدولت باشه.
2. یه ستون درست میکنی از جنس Int به نام SId یا Code ( من Code رو ترجیح میدم :لبخندساده: )
3. یه جدول درست میکنی برای انواع کالا مثلاً به نام GoodTypes
4. تو این جدول غیر از Id که کلید اصلی هست، یه ستون نام داری که همون پوشاک و لوازم تحریر و غیره میشه، و یه ستون برای مشخص کردن
محدودهی شروع کد که مثلاً 1000 و 2000 و ... هست.
5. حالا برای جدول اصلی یه Trigger مینویسی به این صورت:
5.1. تو Trigger تعیین میکنی که فقط برای Insert عمل کنه
5.2. برای هر سطر اضافه شده به جدول اصلی، باید ستون Code رو مقدار بدی
این مقدار دادن توسط یک Join انجام میشه. اما قبلش باید بالاترین مقدار قبلی رو
برای اون نوع کالا از جدول بخونی، اگه مقداری وجود نداشت از مقدار اولیه در جدول انواع کالا استفاده میکنی.
DECLARE @Max as int
SELECT @Max = Max( Code )
FROM inserted i
JOIN Goods g on g.Id <> i.Id AND g.GoodTypeId = i.GoodTypeId
IF @Max is NULL
SELECT @Max = DefaultValue
FROM inserted i
JOIN GoodTypes gt on gt.Id = i.GoodTypeId
UPDATE Goods
SET Code = @Max + 1
FROM Goods g
JOIN inserted i on i.Id = g.Id
به همین راحتی، البته در نظر داشته باش که این کد برای افزودن تکتک سطرها هست.
اگه قرار باشه سطرها به صورت فله اضافه بشه ( مثلاً با SELECT INTO ) در اون صورت
باید توی Trigger خودت یه Cursor بنویسی.
صبا صبوحی
Mohammad_dn
یک شنبه 03 اسفند 1393, 16:18 عصر
من هرچی فکر میکنم دلیلی نمیبینم که چنینکاری انجام بدید...شما دو تا جدول داری ، منو هارو ازش واکشی میکنی..(من که میگم با یک جدولم میشه)...پس اینکه از یه عدد خواص اضافه بشه چیه؟بعد ها به مشکل میخوریا...احتمال اشتباه هم افزایش پیدا میکنه
salmah
یک شنبه 03 اسفند 1393, 18:39 عصر
نه بایه جدول نمیشه بایدیه جدول شامل شماره طبقه باشه
یکی زیر طبقه........
ولی درست میگید یه جا به مشکل برمیخورم چون بلاخره یه جایی دوبازه 1000-2000 به هم میرسند :متفکر:
واقعا نمی دونم چه کار کنم:عصبانی++:
SabaSabouhi
یک شنبه 03 اسفند 1393, 18:55 عصر
نه بایه جدول نمیشه بایدیه جدول شامل شماره طبقه باشه
یکی زیر طبقه........
ولی درست میگید یه جا به مشکل برمیخورم چون بلاخره یه جایی دوبازه 1000-2000 به هم میرسند :متفکر:
واقعا نمی دونم چه کار کنم:عصبانی++:
سلام
اصلاً چه لزومی داره که این کد خودکار از شمارهی 1000 شروع بشه؟ اصلاً مقدار کد چه اهمیتی داره؟
من روشی رو گفتم که بتونید این کار رو انجام بدین، اما در کل نیازی به این کارها نباید باشه.
صبا صبوحی
salmah
یک شنبه 03 اسفند 1393, 19:07 عصر
خب جایی که پروژه را براشون میسازم تا حالا اینکار را کردند یعنی شماره هر بخش 1000 تا 1000 تا افزایش پیدا می کرده :1000-2000-3000
بعد اومده اند برای کالا های هر فروشگاه هم اینجوری مقدار دادن 1001و1002و1003
فقط به خاطر اینکه کارفرما اینجور خواسته وگرنه می دونم کارم درست نیست
SabaSabouhi
یک شنبه 03 اسفند 1393, 21:16 عصر
خب جایی که پروژه را براشون میسازم تا حالا اینکار را کردند یعنی شماره هر بخش 1000 تا 1000 تا افزایش پیدا می کرده :1000-2000-3000
بعد اومده اند برای کالا های هر فروشگاه هم اینجوری مقدار دادن 1001و1002و1003
فقط به خاطر اینکه کارفرما اینجور خواسته وگرنه می دونم کارم درست نیست
سلام
خوب بنداز گردن خودشون، یک textbox بده که خودشون «کد» رو وارد کنن، فقط تو دیتابیس unique index روش درست کن که تکراری وارد نکنن.
صبا صبوحی
salmah
یک شنبه 03 اسفند 1393, 22:42 عصر
سلام
خوب بنداز گردن خودشون، یک textbox بده که خودشون «کد» رو وارد کنن، فقط تو دیتابیس unique index روش درست کن که تکراری وارد نکنن.
صبا صبوحی
مثل اینکه مچبورم همین کار را بکنم .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.