Database 基于其他字段的组合限制数据库字段值

Database 基于其他字段的组合限制数据库字段值,database,Database,我的任务是建立一个简单的数据库来保存我工作中IT基础设施的信息 我对数据库知之甚少,但这并不重要,它只供我的团队使用。我不能深入细节,因为它们是机密的,而且有些技术性,所以我将使用一个简单的类比 比如说,我需要建立一个数据库,保存动物收容所中各种动物的信息。出于类比的目的,每只动物都可以很容易地将其所有信息保存在一张表中,而不需要冗余。这个表的字段可以是 动物ID、动物名称、物种、腿数、脚趾数……(请注意这里) 现在,让我们假设这个庇护所只饲养两个物种,狗和鸟。显然,您可以限制NUMBER\u

我的任务是建立一个简单的数据库来保存我工作中IT基础设施的信息

我对数据库知之甚少,但这并不重要,它只供我的团队使用。我不能深入细节,因为它们是机密的,而且有些技术性,所以我将使用一个简单的类比

比如说,我需要建立一个数据库,保存动物收容所中各种动物的信息。出于类比的目的,每只动物都可以很容易地将其所有信息保存在一张表中,而不需要冗余。这个表的字段可以是

动物ID、动物名称、物种、腿数、脚趾数……
(请注意这里)

现在,让我们假设这个庇护所只饲养两个物种,狗和鸟。显然,您可以限制
NUMBER\u LEGS
仅接受
0-4
中的值。但是,

就鸟类而言,它们的腿永远不会超过两条腿

同样,一只只有一条腿的鸟(另一只被狗咬掉)最多只有3个脚趾,而不是通常的6个(而狗可能有1到20个脚趾)

我计划在访问此数据的程序的应用程序(甚至表示)层对此进行限制。它将采取决策树的形式

(例如,
选择动物,然后选择腿的数量,然后选择脚趾的数量,等等
)。不过,我想知道:

A) 如果在数据级别强制执行这些约束是典型的,因此数据库无法保存,例如

有三条腿的鸟,或有20个脚趾的三条腿的狗

B) 如果A为true,我将如何在通用关系数据库中执行此操作?

(请注意,虽然脚趾数和爪子数都是数字字段,但在实际情况中并不总是如此。我可能需要一组特定属性(例如
ANIMAL\u color
),如果可能的值是黑色、蓝色、红色、紫色、斑纹等,但狗不能有紫色的颜色值;同时鸟可以是紫色或蓝色,但不能有斑纹。)

它们被称为。Oracle的一个例子是:

create table ANIMALS
(
  ANIMAL_ID     number
 ,ANIMAL_NAME   varchar2(100)
 ,SPECIES       varchar2(100)
 ,NUMBER_LEGS   number
 ,NUMBER_TOES   number
 ,constraint NUM_TOES_CK check(NUMBER_TOES <= NUMBER_LEGS * 3)
)
创建桌面动物
(
动物识别号
,动物名varchar2(100)
,种类varchar2(100)
,编号\支腿编号
,编号

,约束数检查(约翰,谢谢你的回答。我研究了这个问题,发现有一些关键字,如CASE和WHEN and THEN,可能会对我有所帮助;它们似乎允许if/THEN/else语句的声明性版本。唯一的问题是,因为我的规则实际上是一个决策树,其中子节点的值取决于其父节点的值,而对于它的祖父母和更高的祖先来说,这意味着有很多情况和限制。有人知道其他的选择吗?我有一点想法,可能会重组数据库,但我不知道从哪里开始……感谢Black_Crown为我清理了这一切