Совместно используйте автоувеличенный первичный ключ между двумя таблицами

GridLayoutManager.LayoutParams объясняется в его комментариях:

if the orientation is VERTICAL, the width parameter is ignored and

if the orientation is HORIZONTAL, the height parameter is ignored

because child view is expected to fill all of the space given to it.

суть в том, что

, что LinearLayoutManager всегда будет иметь один столбец; GridLayoutManager «может» иметь 1 (или более) столбцов.

9
задан user24881 3 October 2008 в 15:45
поделиться

7 ответов

Просто настройте инкремент идентификационных данных, чтобы быть> 1, например, таблица, каждый использует ИДЕНТИФИКАЦИОННЫЕ ДАННЫЕ (1, 10) [1,11,21...] и таблица два ИДЕНТИФИКАЦИОННЫХ ДАННЫХ использования (2, 10) [2,12,22...]. Это также даст Вам некоторую комнату для расширения в случае необходимости позже.

14
ответ дан 4 December 2019 в 10:06
поделиться

Используйте столбец с GUID (Глобально уникальный идентификатор) тип. Это - 16 байтов и будет всегда уникально для каждой строки.

Просто знайте, что Вы поразите значительную производительность по сравнению с нормальными целочисленными ключами.

2
ответ дан 4 December 2019 в 10:06
поделиться

Можно определить столбец IDENTITY в третьей таблице, использовать это для генерации Значений идентификаторов, но Вы всегда откатываете любого, вводит Вас, превращают в таблицу (чтобы не заставлять его вырасти). Откат транзакции не откатывает то, что идентификатор был сгенерирован.

Я не обычный пользователь Microsoft SQL Server, поэтому простите любые оплошности синтаксиса. Но что-то как следующее - то, что я имею в виду:

CREATE TABLE AlwaysRollback (
  id IDENTITY(1,1)
);

BEGIN TRANSACTION;
INSERT INTO AllwaysRollBack () VALUES ();
ROLLBACK TRANSACTION;

INSERT INTO RealTable1 (id, ...) VALUES (SCOPE_IDENTITY(), ...);

BEGIN TRANSACTION;
INSERT INTO AllwaysRollBack () VALUES ();
ROLLBACK TRANSACTION;

INSERT INTO RealTable2 (id, ...) VALUES (SCOPE_IDENTITY(), ...);
1
ответ дан 4 December 2019 в 10:06
поделиться

Использование другая таблица с идентификационным ключом интервала типа принимает значение по умолчанию он к 1, названный KeyID или что бы то ни было.

Имейте хранимую процедуру, получают значение, добавляют 1, затем обновляют KeyID, затем возвращают это хранимой процедуре, которая обновляет Ваши две таблицы, которому нужен новый уникальный ключ.

Это гарантирует, что идентификатор является интервалом, и что это уникально между набором таблиц, которые используют хранимую процедуру для генерации нового идентификатора.

1
ответ дан 4 December 2019 в 10:06
поделиться

Я думаю с помощью GUID, был бы самый простой путь, если я понимаю Вас правильно.

SELECT NEWID()
3
ответ дан 4 December 2019 в 10:06
поделиться

Я не знаю то, что Вы назвали бы им.

Если Вы не хотите использовать GUID или отдельную таблицу, Вы могли бы также создать функцию, которая посмотрела на макс. значения идентификаторов от обеих таблиц и добавила ту ко что значение (или что-то как этот).

Вы могли затем вызвать ту функцию во вставке, включают обе таблицы.

0
ответ дан 4 December 2019 в 10:06
поделиться

Я - лично поклонник решения GUID, но здесь являюсь жизнеспособным вариантом.

Много решений этой проблемы избежали GUID и использовали старое доброе целое число. Это распространено также с ситуациями с репликацией слияния, где многого спутникового слияния сайтов с ведущим устройством и ключевыми конфликтами нужно избежать.

Если GUID не будет работать на Вас, и у Вас абсолютно должен быть интервал, bigint, и т.п., можно всегда просто использовать столбец IDENTITY и иметь каждую таблицу с различным значением для СЕМЕНИ. Те типы данных имеют очень широкий спектр, и не слишком трудно разделить диапазон на применимые сегменты, особенно если все, что Вы хотите, является двумя разделениями. Как пример, основной интервал имеет диапазон от-2^31 (-2 147 483 648) через 2^31 - 1 (2,147,483,647). Это более чем достаточно для клиентской таблицы, например.

Ссылка Transact-SQL (SQL Server 2000) интервал, bigint, smallint, и tinyint

Пример:

--Create table with a seed of 1 billion and an increment of 1
CREATE TABLE myTable
(
primaryKey int IDENTITY (1000000000, 1),
columnOne varchar(10) NOT NULL
)
0
ответ дан 4 December 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: