PDA

View Full Version : اختصاص Id یونیک به نتیجه کوئری



nafisehk
شنبه 20 مهر 1392, 10:10 صبح
سلام
یه کویری دارم که 3 تا جدول و join میکنه میخوام یه Id به هر رکورد بدم که بتونم رکوردارو باهاش متمایز کنم. چطور میتونم با View این کار و انجام بدم؟

ممنون میشم راهنمایی بفرمایید؟

nafisehk
شنبه 20 مهر 1392, 11:15 صبح
:افسرده:کسی نیست راهنمایی کنه؟

danialafshari
شنبه 20 مهر 1392, 12:59 عصر
خب مگه هر جدولت آیدی نداره؟

nafisehk
شنبه 20 مهر 1392, 18:27 عصر
داره اما وقتی join میکنم دیگه id یونیک ندارم که...

nafisehk
شنبه 20 مهر 1392, 18:37 عصر
داره اما وقتی join میکنم دیگه id یونیک ندارم که...

این تیبلامه و نتیجه کوِرئری id یونیک نداره

111798

arefba
شنبه 20 مهر 1392, 19:13 عصر
یه روش ساده اینه که به جدول role یک فیلد Id identity اضافه کنی و موقع کوئری گرفتن ازش استفاده کنی
یک روش اینه که اول از این کوئوری که میخوای تو اس کیو ال یک view بسازی و با ROW_NUMBER() بهشون ردیف بدی
یک روش دیگه اینه که اینا رو وقتی که میگیری بزاری تو یک list جنریک و بهشون آیدی بدی
و...

nafisehk
شنبه 20 مهر 1392, 20:00 عصر
یه روش ساده اینه که به جدول role یک فیلد Id identity اضافه کنی و موقع کوئری گرفتن ازش استفاده کنی
یک روش اینه که اول از این کوئوری که میخوای تو اس کیو ال یک view بسازی و با ROW_NUMBER() بهشون ردیف بدی
یک روش دیگه اینه که اینا رو وقتی که میگیری بزاری تو یک list جنریک و بهشون آیدی بدی
و...

درمورد روش اول اینکه: ممکنه برا کاربر هیچ رولی تعریف نشه پس نمیشه از ایدی identitish استفاده کرد.
میشه روش دوم و بیشتر توضیح بدید؟

arefba
شنبه 20 مهر 1392, 20:04 عصر
http://msdn.microsoft.com/en-GB/library/ms176102.aspx

nafisehk
شنبه 20 مهر 1392, 20:10 عصر
http://msdn.microsoft.com/en-GB/library/ms176102.aspx

سایت و باز نمیکنه:|

arefba
شنبه 20 مهر 1392, 20:17 عصر
msdn رو باز نمیکنه :متعجب:

nafisehk
شنبه 20 مهر 1392, 20:21 عصر
msdn رو باز نمیکنه :متعجب:


502 - Web server received an invalid response while acting as a gateway or proxy server

arefba
شنبه 20 مهر 1392, 20:57 عصر
از چیز بشکن استفاده کنید واسه من که بدون چیز بشکن باز میشه

nafisehk
شنبه 20 مهر 1392, 21:13 عصر
از چیز بشکن استفاده کنید واسه من که بدون چیز بشکن باز میشه


msdn باز میشه اما این صفحش نه

nafisehk
شنبه 20 مهر 1392, 21:17 عصر
این جوب داد


SELECT Row_Number() OVER (ORDER BY newid()) as myid, c.contactid, c.FirstName, c.LastName, c.PhoneNumber, ri.rolename
FROM dbo.tblContacts AS c LEFT OUTER JOIN
dbo.role AS r ON c.contactid = r.contactid LEFT OUTER JOIN
dbo.roleinfo AS ri ON r.rolid = ri.roleid
ORDER BY myid asc

FastCode
شنبه 20 مهر 1392, 21:32 عصر
به نظر من به جای اینکه گزارشتون رو درست کنید و خودتون رو تا آخر عمر درگیر چنین طراحی اشتباهی بکنید اول اصول نرمال سازی رو مطالعه کنید:
http://en.wikipedia.org/wiki/Database_normalization

Power.Csharp
شنبه 20 مهر 1392, 21:42 عصر
اول اینکه کاربر عزیز نافیسک شما در طراحی بانک های اطلاعاتی باید 7 قاعده جامعیت مهم رو رعایت کنید تا به مشکل و اجرای کلک نرم افزاری برنخورید اما در کل راه حلت خوب بود.اما روش خودم اینکه که من کوئری های سخت رو معمولا تو view می نویسم و مثل یک پروسیجر فراخوانیش میکنم و بهترین خروجی رو واسم به ارمغان میاره.البته سعی کن بری سراغ برنامه نویسی cube که خوراکش ادغام کردنه چندین جدول در یک چهارچوب و فراخوانی اونه.اما کاربر عزیز فست کد من توی کوئری بالا مشکل غیر نرمال سازی نمی بینم.این کاربر 3 جدول رو به درستی به هم ربط داده فقط یه شماره ردیف می خواست که بیشتر از 10 راه حل داره.نرمال سازی زمانی خراب میشه که شما مثلا یه رشترو 300000 بار تو یه جدول مثل رشته دانشجویی تکرار کنی و از کلید خارجی به جای این رشته استفاده نکنی.موفق باشید

nafisehk
شنبه 20 مهر 1392, 21:48 عصر
اول اینکه کاربر عزیز نافیسک
نفیسه :)




به نظر من به جای اینکه گزارشتون رو درست کنید و خودتون رو تا آخر عمر درگیر چنین طراحی اشتباهی بکنید اول اصول نرمال سازی رو مطالعه کنید:
http://en.wikipedia.org/wiki/Database_normalization (http://en.wikipedia.org/wiki/Database_normalization)

در رابطه با بحث نرمال سازی باید بگم که ممکنه که یک یوزر بیشتر از یک role داشته باشه برای اینه که دو تا id یکسان تو نتیجه کوئری داریم.

veniz2008
شنبه 20 مهر 1392, 22:27 عصر
میشه روش دوم و بیشتر توضیح بدید؟
سلام.
تابع Row_Number برای تولید عدد منحصر بفرد برای سطرهای خروجی هست بدون اینکه نیازی باشه ستون جدیدی رو به جدول اضافه کنید.
یه مثال میتونه بصورت زیر باشه :

111803

Kubuntu
شنبه 20 مهر 1392, 22:27 عصر
می تونی از auto number استفاده کنی
این سایت کمکت می کنه
autonumber in select statement in SQL Server (http://stackoverflow.com/questions/4612123/autonumber-in-select-statement-in-sql-server)

FastCode
یک شنبه 21 مهر 1392, 00:03 صبح
می تونی از auto number استفاده کنی
این سایت کمکت می کنه
autonumber in select statement in SQL Server (http://stackoverflow.com/questions/4612123/autonumber-in-select-statement-in-sql-server)
ربطی نداره.



OP:اگر میخواهی همین روش(غلط) رو ادامه بدی راهش اینه که همه ی ستون های id از همه ی جدولهایی که اطلاعاتشون به شکل مستقیم استفاده شده رو بیاری و برای تغییر اطلاعات هر جدول از اون id ها استفاده کنی.

nafisehk
یک شنبه 21 مهر 1392, 08:36 صبح
ربطی نداره.



OP:اگر میخواهی همین روش(غلط) رو ادامه بدی راهش اینه که همه ی ستون های id از همه ی جدولهایی که اطلاعاتشون به شکل مستقیم استفاده شده رو بیاری و برای تغییر اطلاعات هر جدول از اون id ها استفاده کنی.


من رو بخشی از دیتابیسی که که از قبل طراحی شده دارم کار میکنم که خالی از ایراد هم نیست اما بحث roleها فکر میکنم منطقی باشه. میشه بیشتر توضیح بدید که مشکلش چیه؟

nafisehk
یک شنبه 21 مهر 1392, 08:38 صبح
چطور میتونم از نتیجه یه View جدول درست کنم؟ ? چون نمیخوام همه رکوردارو یک جا بخونم....

nafisehk
یک شنبه 21 مهر 1392, 08:48 صبح
select *

into UsersAndRoles

from UserRoles

FastCode
یک شنبه 21 مهر 1392, 09:05 صبح
من رو بخشی از دیتابیسی که که از قبل طراحی شده دارم کار میکنم که خالی از ایراد هم نیست اما بحث roleها فکر میکنم منطقی باشه. میشه بیشتر توضیح بدید که مشکلش چیه؟
مشکلش رو در پست اول گفتم.
نمونش اینکه یکی از جدولهاتون فقط یک ستون داره.

nafisehk
یک شنبه 21 مهر 1392, 15:22 عصر
مشکلش رو در پست اول گفتم.
نمونش اینکه یکی از جدولهاتون فقط یک ستون داره.


جدولا 1 یا دو فیلد ندارن خواستم فیلدای مرتبط به کوئری و بزارم که زودتر به نتیجه برسیم :لبخندساده: