如何解决基于另一列的子类别条目-SQL
我想知道PostgreSQL中是否可能有一个只接受基于另一列的列条目的表。
例如,如果类别为1或3,则没有子类别,因此无法输入子类别。但是,如果将类别输入为2,则可以按以下示例将子类别输入为A或B。当我在下面尝试此操作时,将不允许输入类别1或3。非常感谢您的帮助!
CREATE TABLE some_table (
category VARCHAR CHECK (category IN ('1','2','3'))
subcategory VARCHAR CHECK (subcategory IN ('A','B') AND category = '2')
)
解决方法
您的逻辑与此className={getClass('about')}
约束相对应:
check
您不需要单独检查CHECK ( (category IN (1,3) AND subcategory IS NULL) OR
(category = 2 AND subcategory IN ( 'A','B' ) AND subscategory IS NOT NULL )
)
。这将处理类别和子类别。
您需要稍微扩展逻辑。允许的情况是category
不是'2'
,而subcategory
是NULL
或category
是'2'
,而subcategory
是'A'
或'B'
。
CREATE TABLE some_table
(category varchar(1),subcategory varchar(1),CHECK (category IN ('1','2','3')),CHECK (category <> '2'
AND subcategory IS NULL
OR category = '2'
AND subcategory IN ('A','B')));
,
我会去
CREATE TABLE some_table (
category SMALLINT CHECK (category IN ( 1,2,3)),subcategory CHAR(1),CONSTRAINT c_some_table
CHECK (
category IN (1,3)
OR(category = 2 AND subcategory IN ( 'A','B') AND category = 2)
)
);
一个小整数比一个字符串进行比较要快得多,并且如果category是单个字符,则限制了长度,在该长度下,固定长度CHAR比VARCHAR更有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。