Хранение пользовательских значений в SQL Server 2005 - PullRequest
0 голосов
/ 11 января 2011

Как сохранить пользовательские значения вместо типов данных для столбца. У меня есть таблица с именем «Заказы», ​​в которой столбец с именем «OrderStatus» и его целью будет сохранение статуса заказа. Например, R = отклонено, S = отправлено, T = возвращено.

Я очень плохо знаком с базами данных и дизайном ...

Ответы [ 4 ]

2 голосов
/ 11 января 2011

«Правильный» ответ - использовать стандартные SQL-92 CREATE DOMAIN. К сожалению, SQL Server пока не поддерживает это. Если вы хотите получить поддержку, вы можете проголосовать за нее здесь .

SQL Server имеет собственный синтаксис CREATE TYPE, но когда я в последний раз смотрел, я объявил, что они не подходят для этой цели. Если кто-то не согласен, пожалуйста, отправьте ответ на мой вопрос :)

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

1 голос
/ 11 января 2011

Вы можете сделать это.

OrderStatus OrderStatusCode
----------- ---------------
Rejected    R
Sent        S
Returned    T

Позже, когда у вас есть больше «дизайна» под вашим поясом, вы идете с таблицей поиска.

1 голос
/ 11 января 2011

В этом случае вам не нужен пользовательский тип данных, вам просто нужен внешний ключ к таблице со всеми вашими статусами в ней.

Ваша таблица OrderStatus будет выглядеть следующим образом:

id           int           PK NOT NULL, IDENTITY
code         char(1)       NOT NULL
description  varchar(100)  NOT NULL

(редактировать: заметьте, как Мартин указал в комментарии к другому ответу, суррогатная клавиша id не является полностью необходимой, но она позволяет гибко легко изменять code без необходимостиобновите данные, которые к нему относятся)

Ваша таблица Order будет иметь внешний ключ к этой таблице:

order_status_id  int      FK NOT NULL
0 голосов
/ 11 января 2011

Рекомендуется нормализовать, что означает создание таблицы ORDER_STATUS с утвержденными значениями там, минимально с такой схемой, как:

ORDER_STATUS(id number auto increment, code character, meaning varchar)

, а затем связать ORDERS с этой таблицей в столбце с именем order_status_id, который будет внешним ключом, который не будет нулевым.

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