Форум: "Базы";
Текущий архив: 2002.01.24;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c