Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.004 c
14-75664
Vitaly
2001-11-29 14:20
2002.01.24
Из дневника ученика:


14-75656
Lexus
2001-11-28 17:31
2002.01.24
Сохранение строк в текстовом файле и считывание их при последующем открытии программы?


3-75522
step
2001-12-20 18:03
2002.01.24
DBGrid, строка #номер по порядку#


3-75495
Havez
2001-12-19 18:52
2002.01.24
Постоянно портится Autoincrement поле


3-75466
Андрей1
2001-12-19 11:25
2002.01.24
Для работы в Oracle существует PL/SQL Developer. Существует ли чё-то подобное для MS SQL Server?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский