小型数据库实体的域和子域的概念

concept of domains and subdomains for small database entities

最近我学到了一个老师叫“域和子域”的概念,其中概括了小表,其中将保存少于5000个数据或行,我给你举个例子:

实体

enter image description here

级别日期:

   id_level  description
      01      continent
      02      country
      03      state

域日期

id_domain       detail    level    parent
      01       America      01       -
      02         USA        02       01
      03        Europe      01       -
      04        Africa      01       -
      05          UK        02       03
      06        Aberdeen    03       05

如果这个概念有另一个名字,知道它会帮助我很多。

然后我们必须对此进行抽象并将其带到常见实体,如下例所示:

enter image description here

级别日期:

    id_level description
       01     address
       02     phone
       03     gender

域日期

id_domain detail         level parent
    01    male            03    -
    02    female          03    -
    03    mobile phone    02    -
    04    home address    01    -
    05    home phone      02    -
    06    work address    01    -

个人日期

id_person name phone_type phone_value address_type adress_value gender
    01    Jhon     03       39249927     06          a place...   01
    02    Mary     05      2489540300    04         a place2...   02

但是我收到一条错误消息,说当我尝试建立关系时键名重复

ALTER TABLE person
ADD CONSTRAINT FK_PERSON_DOMAIN
FOREIGN KEY (address_type)
REFERENCES domain(id_domain);

错误

Duplicate key name 'FK_PERSON_DOMAIN'

我应该补充的是我已经用phone_type嵌套了,之后它不允许我嵌套其他两个属性,如图所示

这是完美的关系:

ALTER TABLE person
ADD CONSTRAINT FK_PERSON_DOMAIN
FOREIGN KEY (phone_type)
REFERENCES domain(id_domain);

我称这些为“查找表”。它们通常具有行数少的特点,而且不经常变化。它们可能有一个整数 id 主键,或者它们可能有一个自然主键。

关于重复键名称的错误是由约束名称在架构中的所有表中必须唯一的规则引起的。换句话说,架构中必须只有一个名为 FK_PERSON_DOMAIN_PERSON 的约束。

您说您已经为 phone_type 列创建了一个具有此名称的约束。如果您想要 address_type 列的另一个约束,您必须为该约束选择一个不同的名称。

这是我的意思的一个例子:

ALTER TABLE person
ADD CONSTRAINT FK_PERSON_PHONE
FOREIGN KEY (phone_type)
REFERENCES domain(id_domain);

ALTER TABLE person
ADD CONSTRAINT FK_PERSON_ADDRESS
FOREIGN KEY (address_type)
REFERENCES domain(id_domain);

看到约束名称不一样了