Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.01.24;
Скачать: CL | DM;

Вниз

GUID   Найти похожие ветки 

 
Polevi   (2001-12-17 11:36) [0]

Господа, есть ли противопоказания против ипользования GUID в качестве PK поля в MS SQL?
Мне нужно реализовывать brief-case - PK должен формироваться на клиенте


 
kig   (2001-12-19 21:55) [1]

Ни каких по использованию GUID...
Только вот клиенты (brief-case) с сетевыми картами ???


 
XPDeveloper   (2001-12-20 00:04) [2]

Есть. Так как Guid -условно уникален, да и жрет по размеру много.
Для обеспечения уникальности - он никак не подходит.
Хотя может я не понимаю задачи.


 
Kapusto   (2001-12-20 09:53) [3]

>XPDeveloper
Насколько я понимаю, сам MS SQL использует GUID-поля при репликации данных, так что я не понимаю, почему бы не сделать то же самое самому?

Хотя, например, можно было бы пойти и другим путем (насколько я понял постановку задачи) - делать IDENTITY поля с различным стартовым значением
(например, на клиенте начать нумерацию с 1000000). Хотя у этого способа также есть свои очевидные минусы.


 
Polevi   (2001-12-20 09:58) [4]

Задача классическая - клиент подключается к базе, заливает данные, отключается, в оффлайне добавляет записи, подключается и заливает данные в базу. Можно конечно каждому клиенту выдавать диапазон PK-значений ..


 
Slava   (2001-12-20 10:25) [5]

Вот здесь до сих пор обсуждают:
http://www.delphikingdom.com/cgi-bin/talk.cgi?ID=152


 
Вячеслав   (2001-12-20 10:33) [6]

>XPDeveloper Условно уникален, а условие что-то вроде времени жизни вселенной. Думаю хватит.
И не такой он большой по нынешним меркам.


 
Kapusto   (2001-12-20 10:53) [7]

В принципе, имхо ничто не мешает использовать GUID в качестве первичного ключа, но это только в том случае, если в основной базе далее не будут ставиться задачи типа "какие записи каким клиентом были добавлены".
Кстати, а какого типа данные будут заливаться клиентами?


 
kig   (2001-12-20 14:00) [8]

2XPDeveloper
На счет условной уникальности - ну это если на компе сетевой карты не
стоит - а так в алгоритме генерации используется MAC адрес карты, который
сам по себе уникален (если конечно какой нибудь левый производитель
сетевух не объявится)...
Без сетевой карты при генерации GUID уникальность гарантируется только
в пределах этого компа.

Поэтому я и спросил - сетевые карты у бриф-кайзников стоят?


 
Kapusto   (2001-12-20 14:09) [9]

>kig
Неправда ваша... Если бы уникальность гарантировалась только в пределах компа, то технологии СОМ уже наступил бы глобальный кирдык...
Для генерации используется текущее время в мс, и еще какие-то параметры компа... так что вероятность совпадения GUID _очень_ мала


 
Polevi   (2001-12-20 14:11) [10]

2kig
сетевые карты стоят - это вроде понятно из моего предыдущего ответа :)))


 
Delirium   (2001-12-20 14:32) [11]

Насколько, я знаю GUID можно получать по разному, тот GUID который появляется в MSSQL ( NEWID() ), как раз и является лучшим, уникальным идентификатором. И я бы рекомендовал именно такие идентификаторы и использывать в MSSQL.


 
kig   (2001-12-20 14:37) [12]

2Kapusto

Я же сказал, если без сетевой карты...("... и еще какие-то параметры компа")

Правда... правда не моя ))))

Из MSDN (UuidCreate)

"
In Windows NT 4.0, Windows 95, DCOM release, and Windows 98, UuidCreate returns RPC_S_UUID_LOCAL_ONLY when the originating computer does not have an ethernet/token ring (IEEE 802.x) address. In this case, the generated UUID is a valid identifier, and is guaranteed to be unique among all UUIDs generated on the computer. However, the possibility exists that another computer without an ethernet/token ring address generated the identical UUID. Therefore you should never use this UUID to identify an object that is not strictly local to your computer. Computers with ethernet/token ring addresses generate UUIDs that are guaranteed to be globally unique."

Я думаю, что добавить нечего...

2Polevi
Не понятно - сливаться можно и через модем))))
Ну если стоят карты - ну тогда ни каких препятсвий с полным отсутствием
гимора, типа диапазоны PK и т.п.)))


 
kig   (2001-12-20 14:53) [13]

2Delirium

Без разницы))) Все равно MSSQL в конечном счете вызывает CoCreateGUID,
который в свою очередь вызывает UuidCreate (или MSSQL его на прямую), который
в свою очередь реализует алгоритм генерации GUID (где то он на сайте OMG описан, если не ошибаюсь)

Тем более в поставленной задаче newid() как раз и не получится
использовать...


 
Delirium   (2001-12-20 15:45) [14]

2 kig
"Тем более в поставленной задаче newid() как раз и не получится
использовать..." - имеешь в виду, что GUID надо получать на клиенте "offline"? Тогда, конечно, остаётся CreateGUID или RPCRT4.DLL, кому как нравится :)


 
Anatoly Podgoretsky   (2001-12-20 21:26) [15]

Это противоречие решается просто

Уникальный идентификаторр клиента + GUID
Уникальный идентификаторр клиента выдается централизованно при инсталляции системы.


 
SergVlad   (2001-12-20 23:50) [16]

Наиболее правильное решение, к тому же обеспечивающее идентификацию клиента после сливания баз.



Страницы: 1 вся ветка

Текущий архив: 2002.01.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
3-75469
Buben
2001-12-19 09:48
2002.01.24
RDM + IBEvents


6-75640
Spirit
2001-10-29 21:45
2002.01.24
Как?


1-75629
dima2002
2002-01-08 20:57
2002.01.24
Мастера!!! подскажите !!!


7-75691
BigFoot
2001-10-10 19:22
2002.01.24
Service


1-75556
Cobalt
2002-01-05 11:47
2002.01.24
Создание своих форм