Использование таблицы с одним столбцом (идентификатор)? - PullRequest
3 голосов
/ 22 октября 2009

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

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

Ответы [ 7 ]

5 голосов
/ 22 октября 2009

Я думаю, что люди используют это для воспроизведения ПОСЛЕДОВАТЕЛЬНОСТИ 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 и т. Д.

4 голосов
/ 02 декабря 2009

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

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

2 голосов
/ 22 октября 2009

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

2 голосов
/ 22 октября 2009

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

2 голосов
/ 22 октября 2009

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

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

1 голос
/ 22 октября 2009

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

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

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

1 голос
/ 22 октября 2009

Может быть для утилиты Таблица чисел в SQL Server <2005. Проверьте <a href="http://www.sommarskog.se/arrays-in-sql-2000.html#tblnum" rel="nofollow noreferrer"> этот блог об этом.

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

...