Использование таблицы с одним столбцом (идентификация)?

Какова цель иметь таблицу с одним столбцом (столбец идентификаторов)? Есть ли хороший вариант использования?

Это действительно хорошая практика?


person RameshVel    schedule 22.10.2009    source источник


Ответы (7)


Я думаю, что люди используют это, чтобы воспроизвести ПОСЛЕДОВАТЕЛЬНОСТЬ Oracle. По сути, им нужен единый уникальный идентификатор для любой сущности, которую они создают в своей системе, поэтому у них есть что-то вроде этого:

CREATE PROCEDURE dbo.GenerateIdentifier
    @Identifier INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT dbo.SingleColumnTable DEFAULT VALUES;

    SET @Identifier = SCOPE_IDENTITY();
END
GO

Теперь всякий раз, когда они хотят добавить новый контакт, клиента, заказ и т. д., они сначала вызывают эту процедуру и получают новый идентификатор. Тогда только одна сущность в системе будет иметь идентификатор = 1, либо 2 и т.д.

person Aaron Bertrand    schedule 22.10.2009

Если вы нормализуете прошлое 3-й нормали, вы можете исключить несколько отношений «многие ко многим» в одной таблице. Это трудно объяснить без примера схемы, но я попробую...

Чтобы устранить множественные связи «многие ко многим» с одной таблицей, потребуется использовать суррогатный PK, общий для нескольких таблиц. (Это дает вам одно соединение «многие ко многим» вместо одного для каждой таблицы.) В крайнем случае вы получите таблицу с одним столбцом, предоставляющую другим таблицам ничего, кроме FK, которые они могут использовать как чистый FK или ПК. Думайте об этом как о нескольких таблицах, наследующих отношение «многие ко многим» от одного родительского столбца, но не более того. Хорошая вещь в этом заключается в том, что таблица с одним столбцом выпадает из любых реальных запросов, поскольку вы можете использовать (унаследованный) FK для присоединения к таблице «многие ко многим», к которой она подключается.

person PDH    schedule 02.12.2009

Хм, таблица с одним столбцом, который является идентификатором и не более того, для этого не может быть много применений.

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

person Andrew    schedule 22.10.2009

При переходе с баз данных Oracle вам нужен способ эмуляции последовательностей Oracle... Таблицы с одним столбцом идентификаторов — это то, что вам нужно.

person Scoregraphic    schedule 22.10.2009

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

person mevdiven    schedule 22.10.2009

Может быть для служебной таблицы Numbers в SQL Server ‹ 2005. Проверьте это сообщение в блоге об этом.

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

person Robert Koritnik    schedule 22.10.2009

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

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

Но это определенно хорошая практика в качестве подсчета или таблицы чисел.

person Paul Sasik    schedule 22.10.2009