Database 主UID何时作为外键传递?

Database 主UID何时作为外键传递?,database,oracle,Database,Oracle,我担心我的问题可能措辞有点不准确,因为我只是从数据库开始,但我会尽力。。。因此,在我的大学,我们使用Oracle Data Modeler对数据库进行建模。问题是:一个实体的主UID何时作为外键传递给另一个实体?从我(实验上,我无法用谷歌搜索出来…)发现,两个实体在绑定1:1时交换它们的PK——但是其他类型的绑定呢?钥匙通过哪一侧标记为可选是否重要 您需要研究不同类型的关系及其映射 据我所知,以下是三种类型的关系: 一对一 这是一个表的一行与另一个表的零行或一行相关的关系。理想情况下,这种关系不

我担心我的问题可能措辞有点不准确,因为我只是从数据库开始,但我会尽力。。。因此,在我的大学,我们使用Oracle Data Modeler对数据库进行建模。问题是:一个实体的主UID何时作为外键传递给另一个实体?从我(实验上,我无法用谷歌搜索出来…)发现,两个实体在绑定1:1时交换它们的PK——但是其他类型的绑定呢?钥匙通过哪一侧标记为可选是否重要

您需要研究不同类型的关系及其映射

据我所知,以下是三种类型的关系:

  • 一对一

    这是一个表的一行与另一个表的零行或一行相关的关系。理想情况下,这种关系不应该在两个不同的表中实现。只有一张桌子就足够了。 例如,考虑我们有<代码>人<代码>和<代码>永久地址> <代码>表。我们假设,根据业务规则,一个人只能有一个永久地址。因此,我们可以:

    person(personid, firstname, lastname, ...)
    permanent_address (permanent_addressid, personid, line1, line2, ...)
    
    其中
    永久地址
    表中的
    人名
    指的是
    人名
    表中的
    人名

    如果要强制外键,可以向列中添加
    notnull
    约束

  • 多对一

    这是一种更为普遍和广泛使用的关系,其中一个表中的多行与另一个表中的一行相关

    例如,如果您有一项业务规则,其中一个人可以拥有多辆汽车,则您有:

    person(person_id, first_name, last_name, birthdate, ...)
    car (licence_plate_number, person_id, carname, ...)
    
    其中
    car
    表中的
    person\u id
    person
    表中的
    person\u id

  • 多对多

    这是一种关系,其中一个表中的多行可以与另一个表中的零行、一行或多行相关

    例如,一个人可以有很多爱好。一个爱好可以被很多人分享。因此,我们可以按如下方式实现这种关系:

    person (person_id, first_name, last_name, birthdate, ....)
    hobby (hobby_id, hobby_name, hobby_type, ...)
    person_hobby (person_id, hobby_id)
    
    其中
    person\u-id
    中的
    person\u-hobby
    表是指
    person
    表的
    person\u-id
    person\u-hobby
    表是指
    hobby
    表的
    hobby\u-id
    。这个中间表是实现这种多对多关系所必需的。我们可以在列集合(person\u id,hobby\u id)上强制执行
    主键
    约束作为复合主键,以避免多次为同一个人分配相同的hobby