#sql #sql-server #tsql
Вопрос:
Проверяя недавно созданную таблицу, я обнаружил следующее
[PhysicalStoreID] dbo.bident not null
Он был сделан в виде столбца, который копирует столбец идентификатора из другой таблицы.
Как я понимаю, BIDENT
это тип данных, который соединяет два столбца в разных таблицах. Не мог бы кто-нибудь объяснить мне, пожалуйста, как это работает, что BIDENT
такое и почему не используется внешний ключ?
Комментарии:
1.
BIDENT
не является встроенным типом данных в SQL Server. Я предполагаю , что это пользовательский [скалярный] тип данных. Тот факт, что вы ссылаетесь на него, какdbo.bident
и в тексте вашего вопроса, также является доказательством этого, поскольку он соответствует схеме.2. Лично я больше не вижу особого смысла в использовании пользовательских скалярных (или псевдонимных) типов данных, поскольку они в основном являются просто псевдонимами. Вы не можете их проверять, так как такие вещи, как
RULE
s, не влияют на них, и они (RULE
ы) устарели.3. Что касается объяснения того, что
BIDENT
это такое, честно говоря, мы понятия не имеем. Как это работает? Ну, как я уже упоминал, это тип данных «Псевдоним»; в основном это будет синонимом чего-то вродеvarchar(20)
илиdecimal(12,2)
(опять же, мы понятия не имеем, что именно). Это не будет поддерживать какую-либо ссылочную целостность или что-то в этом роде, это работа ограничения внешнего ключа.4. Почему бы вам не спросить создателя этого «вновь созданного стола»?
5. Кстати, это довольно крутое имя, которое ваш коллега дал определяемому пользователем типу. «Бидент» подобен копью с 2 наконечниками. Оружие Аида, правителя подземного мира в греческой мифологии.
Ответ №1:
Как уже упоминалось в комментариях, это не встроенный тип, а скорее пользовательский тип.
В идеале вы бы спросили человека, создавшего этот тип, который, вероятно, является одним из ваших коллег. Кроме того, вы можете проверить системные таблицы SQL Server:
select * from sys.types where is_user_defined = 1;
Обратите внимание на system_type_id
ваш пользовательский тип и найдите запись, sys.types
для которой is_user_defined
0, но которая имеет то же system_type_id
самое . Это базовый тип, для которого ваш пользовательский тип является псевдонимом.