PDA

View Full Version : سوال: دليل وجود GUID



mehdi58
شنبه 23 آذر 1387, 17:12 عصر
با سلام
با توجه به وجود خاصيت Identity ، پس فلسفه وجود Data Type اي از نوع GUID چيه ؟
متشكرم

AminSobati
شنبه 23 آذر 1387, 23:20 عصر
سلام دوست عزیزم،
گاهی اوقات Scope کار بسیار فراتر از یک جدول یا یک دیتابیس هست و لازمه رکوردها در بین چندین منبع باز هم یونیک باشن. اینجا کنترل Identity دست و پا گیر میشه. لذا GUID ابزار خوبیه در این مورد.

mehdi58
یک شنبه 24 آذر 1387, 07:31 صبح
آقاي ثباتي عزيز ميشه يه كم بيشتر به من توضيح بدين .
چون عين همين جواب رو من به يه بنده خدايي دادم و اون هم قانع نشد .

mannai29
یک شنبه 24 آذر 1387, 09:09 صبح
گاهی اوقات Scope کار بسیار فراتر از یک جدول یا یک دیتابیس هست و لازمه رکوردها در بین چندین منبع باز هم یونیک باشن. اینجا کنترل Identity دست و پا گیر میشه. لذا GUID ابزار خوبیه در این مورد.سلام ،
میشه یک مثال کوچک هم بزنید.

sarkhosh
یک شنبه 24 آذر 1387, 21:43 عصر
GUID با استفاده از تابع استاندارد NEWID در SQLSERVER و الگوریتم درونی SERIAL NUMBER ویندوز اعداد یونیک بر روی یک کامپیوتر ایجاد مینماید.همچنین بر روی ماشین ها و کامپیوترهای مستقل از یکدیگر شماره های منحصر بفردی تولید می کند از 16 بایت تشکیل شده است که نمایش آن به صورت هگز میباشد .
بنابراین میتوان با تعریف فیلد GUID در یک جدول هر رکورد را در یک جدول در تمام دیتابیس یونیک تعریف کرد
برای مثال فرض کنید میخواهیم جدولی را از یک دیتابیس مرکزی به نقاط مختلف کپی نماییم و در آن نقاط اطلاعات جدول را ویرایش کنیم پس از مدتی جداول فرعی را با جداول اصلی ادغام نماییم در صورت استفاده از IDENTITY امکان ایجاد رکوردهای مختلف با آی دی های مشابه در جدول اصلی و فرعی وجود دارد ولی در صورت استفاده از GUID تمام رکوردهای جدید در جدول اصلی و فرعی دارای شماره GUID منحصر بفردی خواهند بود که از آنها جهت ادغام رکوردهای دو جدول استفاده میکنند.
خوش باشید

AminSobati
یک شنبه 24 آذر 1387, 21:46 عصر
فرضا در Replication، میبایست SQL Server سابقه و رد پای یک رکورد رو در کل مدار Replication داشته باشه وا نمیتونه یک Identity رو وابسته به نام جدول بکنه. لذا به هر رکورد یک GUID میده که باعث میشه در بین تمام رکوردها در همه دیتابیسها یونیک باشه. هر جا این رکورد بره، با همون GUID سابقه اش مشخص میشه.

mannai29
دوشنبه 25 آذر 1387, 09:38 صبح
بنابراین:
1- در Replication ما برای اینکه داده های یکسان در جدولهایمان در همه دیتا بیس ها داشته باشیم باید از این نوع داده برای PK خود استفاده کنیم و نوع Int با خاصیت Identity کاربرد ندارد؟
2- معایب کار کردن با uniqueidentifier چیست؟
با تشکر.

AminSobati
سه شنبه 26 آذر 1387, 12:37 عصر
نیازی نیست ما PK از نوع GUID داشته باشیم. خود SQL Server در صورت لزوم این فیلد رو اضافه خواهد کرد. اگر ایندکس Clustered روی GUID قرار بدیم (معمولا زمانی رخ میده که PK شما از نوع GUID باشه)، این فیلد در تمام ایندکسها nonclustered هم شرکت میکنه و علاوه بر افزایش حجم ایندکس، چون قائدتا در Join هم شرکت میکنه، مقایسه روی GUID کندتر خواهد بود

mannai29
سه شنبه 26 آذر 1387, 16:36 عصر
یعنی اگر یک فیلد از نوع Int باشد و PK باشد و با خاصیت Identity باشد :
آیا امکان ندارد در Replication در درج همزمان دو جدول مشکل بوجود آید؟ یعنی در دو جدول یک PK یکسان نداریم؟

البته http://barnamenevis.org/forum/showthread.php?t=54788 رو هم دیدم .
اما منظور من بیشتر در مورد سیستم هایی هست که باید داده های یکسان داشته باشند مثل ERP .
مثلا اون دو جدول اگر جدول داده های پایه باشند . حالا یک رکورد در یک سرور و همزمان یک رکورد دیگر در سرور دیگر درج می شوند . حالا PK این رکورد ها در n جدول دیگر مورد استفاده قرار می گیرد.
می خواهم به این نتیجه برسم که این PK با این شرایط(اگر یک فیلد از نوع Int باشد و با خاصیت Identity ) قابل استقاده هست یا نه؟ و مجبوریم از GUID استفاده کنیم.(برای PK )