SQL: как осуществить это, только отдельный столбец установлен в группе столбцов

Просто краткий совет о том, как получить подробное значение коротких форм. Вы можете использовать метод explain следующим образом:

spacy.explain('pobj')

, который даст вам вывод, например:

'object of preposition'
10
задан Andy White 6 June 2009 в 21:33
поделиться

5 ответов

Предложенные @ tvanfosson ограничения работают нормально для трех столбцов, но для общности я предпочитаю

(cast(col1 is not null, int) +
 cast(col2 is not null, int) +
 cast(col3 is not null, int)) = 1

, потому что они лучше обобщаются на любое количество столбцов с «линейно растущим» (вместо «квадратично растущим») объемом кодирования (это еще лучше в диалектах SQL, которые не требуют явного преобразования логического или бита в int, но я не уверен, что SQL Server является одним из таких).

14
ответ дан 3 December 2019 в 18:00
поделиться

Ограничение, подобное следующему, должно работать:

 (column1 is null and column2 is null)
   or (column1 is null and column3 is null)
   or (column2 is null and column3 is null)

Это победило ' t заставить его содержать ненулевой столбец, однако. Для этого добавьте еще одно ограничение:

 column1 is not null
    or column2 is not null
    or column3 is not null
6
ответ дан 3 December 2019 в 18:00
поделиться
CREATE TABLE Repro.Entity
(
    entityId INTEGER IDENTITY (1, 1) NOT NULL,
    column1 INTEGER,
    column2 INTEGER,
    column3 INTEGER,
    CONSTRAINT Entity_PK PRIMARY KEY(entityId),
    CONSTRAINT Entity_CK CHECK(
        (column1 IS NOT NULL AND column2 IS NULL AND column3 IS NULL) OR 
        (column1 IS NULL AND column2 IS NOT NULL AND column3 IS NULL) OR 
        (column1 IS NULL AND column2 IS NULL AND column3 IS NOT NULL))
)
1
ответ дан 3 December 2019 в 18:00
поделиться

На мой взгляд, это плохое дизайнерское решение. Поскольку ID является первичным ключом в этой таблице, он будет допустимым значением для всех отношений внешнего ключа. Это означает, что вам придется очень усердно поработать на уровне внешнего интерфейса / бизнеса, чтобы гарантировать, что значения находятся в допустимом диапазоне.

Например, при настройке таблиц для таблицы 2 абсолютно законно использовать 1 в качестве значения поиска вместо 2, которое предполагается использовать - и база данных не перехватит его.

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

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

1
ответ дан 3 December 2019 в 18:00
поделиться

Мне кажется, что вы хотите использовать один столбец для набора этих вещей. Возможно, вы можете использовать какой-то тег, чтобы сказать, что это Foo, 3 или Bar, 7 или Baz, 9 ?

0
ответ дан 3 December 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: