Можем ли мы иметь более одного столбца идентификаторов в таблице? - PullRequest
0 голосов
/ 21 мая 2009

Можем ли мы указать 2 идентификационных столбца в таблице. Если нет, то почему? если да, то почему

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Зависит от того, что вы подразумеваете под "личностью"

Существует несколько специфических для реализации конструкций, таких как "rowid", "oid" и т. Д., Цель которых состоит в том, чтобы однозначно идентифицировать строку, используя значение, сгенерированное СУБД, - в большинстве систем dbms у вас есть один и только один из них на строку.

«Идентичность» строки также может означать первичный ключ. ANSI sql поддерживает первичные ключи, состоящие из множества столбцов, в большинстве СУБД вы можете включить любой или все подходящие столбцы в первичный ключ. Идентичность тогда состоит из комбинации всех столбцов в первичном ключе - но и это большое НО, логически это все еще составляет единую идентичность.

Вы можете указать «уникальное» ограничение *** s *** для любого или всех подходящих столбцов, каждый из которых может рассматриваться как «идентичность», поэтому ответ на ваш вопрос, вероятно, «Да», но я никогда не видел реальную реализацию этого.

1 голос
/ 21 мая 2009

«столбец идентификации» НЕ является концепцией SQL. Вы должны иметь в виду некоторую конкретную реализацию с ее собственными причудами и расширением, а НЕ SQL вообще, как утверждает ваш тег; Пожалуйста, отредактируйте и пометьте свой вопрос. (Если вы имеете в виду «Microsoft SQL Server», ответ «нет», потому что Microsoft считала, что это бессмысленно [и на этот раз они были чертовски правы!

0 голосов
/ 21 мая 2009

Правильное мнение других людей о том, что «идентичность» не является типом в стандарте SQL.

IBM Informix Dynamic Server (IDS) поддерживает типы SERIAL, SERIAL8 и BIGSERIAL. Это целочисленные типы с дополнительными свойствами, которые, если вы вставляете в них ноль (или если вы не указываете значение для вставки), тогда вместо него применяется следующее более высокое ранее неиспользованное значение. Это примерно соответствует тому, что другие СУБД называют столбцом идентификации. (IDS также предоставляет последовательности.)

Любопытно, что вам разрешено иметь в одной таблице столбец SERIAL и столбец SERIAL8 или BIGSERIAL. Это не рекомендуется и не имеет смысла; однако это не запрещено.

Большинство СУБД не допускают двух отдельных столбцов «идентичности» в одной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...