我的任务是构建一个简单的数据库,以便在我的工作中保存有关IT基础架构的信息。
我对数据库知之甚少,但它并不重要,它只会由我的团队使用。我不能详细说明,因为它们是保密的,也有些技术性,因此我将使用一个简单的类比。
假设我需要建立一个数据库,其中包含动物收容所中各种动物的信息。出于类比的目的,每只动物可以很容易地将所有信息保存在单个表中而没有冗余。该表的字段可以是,例如,
ANIMAL_ID, ANIMAL_NAME, SPECIES, NUMBER_LEGS, NUMBER_TOES...
(请耐心等待我。)
现在,让我们说这个避难所只保留two species, dogs and birds
。显然,您可以限制NUMBER_LEGS
仅接受来自0-4
的值。然而,
就鸟类而言,它们永远不会超过两条腿。
同样地,只有一条腿(另一条被狗咬过)的鸟只有最多3个脚趾而不是通常的6个(而狗可能有1到20个脚趾的东西) )
我计划在将访问此数据的程序的应用程序(甚至表示)层对此进行限制。它将采取决策树的形式
(例如choose animal, then choose number of legs, then number toes, etc
)。但是,我想知道是否:
A)如果通常在数据级别强制执行这些约束,那么数据库就不可能保留,例如
一条有三条腿的鸟,或一条有20个脚趾的三条腿狗。
B)如果A为真,我将如何在通用关系数据库中执行此操作?
(请注意,虽然脚趾数量和爪子数量都是数字字段,但实际情况并非总是如此。我可能需要一组特定属性(比如ANIMAL_COLOUR
),尽可能值为BLACK, BLUE, RED, PURPLE, BRINDLE
等。但是则DOG不能具有COLOR值PURPLE ;同时 BIRD可以是PURPLE或BLUE但不是BRINDLE 。)
答案 0 :(得分:1)
他们被称为check constraints。 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)
)