Когда клиентское приложение DataSnap подключается к удаленному модулю данных сервера DataSnap и использует TDataSetProvider
+ TClientDataSet
, оно кэширует таблицу (или представление) базы данных, локальную для клиентского приложения. Пользователь может вносить изменения в данные в TClientDataSet локально и ApplyUpdates(0)
для синхронизации изменений с сервером. Это все имеет смысл.
При использовании базы данных SQL Server 2008 первичный ключ может быть полем identity
или GUID
. Предполагая, что пользователь будет в автономном режиме при добавлении новых записей в локальный TClientDataSet
, как локальные TDataSetProvider
и TClientDataSet
обрабатывают назначение поля первичного ключа, когда пользователь создает новая запись? Поскольку локально созданные записи могут быть частью отношения мастер / подробности, кажется логичным, что новый первичный ключ потребует для локального создания. Как это решается, когда пользователь выполняет ApplyUpdates (0)?
Когда несколько пользователей создают записи в режиме офлайн , как разрешаются коллизии первичных ключей, когда каждый из них выполняет ApplyUpdates(0)
?
Поле identity
лучше, чем поле GUID
, или наоборот? Почему?