Не мог бы кто-нибудь объяснить мне, что такое БИДЕНТ, пожалуйста

#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 самое . Это базовый тип, для которого ваш пользовательский тип является псевдонимом.