NodeJS 一个属于/有一个关联是否意味着属于另一个的模型必须总是有一个关联的模型?

rsaldnfx  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(152)

给定模型"Animal"和"Person",其中Animal BelongsTo Person和Person HasOne Animal,这是否意味着每个单独的Animal示例将总是具有与该Animal相关联的Person示例(由于动物属于人)?反之亦然,这是否意味着不是每个单个的Person示例都将有一个Animal示例与之相关联(由于Person有一个Animal)?
例如:

const sequelize = new Sequelize()
const Person = sequelize.define('Person', {
  id: {
    type: DataTypes.UUID,
    primaryKey: true,
    defaultValue: DataTypes.UUIDV4,
  },
})

const Animal = sequelize.define('Animal', {
  id: {
    type: DataTypes.UUID,
    primaryKey: true,
    defaultValue: DataTypes.UUIDV4,
  },
})

Person.hasOne(Animal)
Animal.belongsTo(Person)

async function foo () {
  const animals = await Animal.findAll()
  for (const animal of animals) {
    /**
     * Can I be certain that `person` **always** exists, given that Animal BelongsTo Person?
     * 
     * In other words, does the BelongsTo Association from Animal to Person imply that Animal
     * must **always** have a Person associated with the Animal?
     */
    const person = await animal.getPerson()
  }
  
  const people = await Person.findAll()
  for (const person of people) {
    /**
     * And the inverse; given that Person hasOne Animal, does this imply that not all People
     * will have an Animal associated with them?
     */
    const animal = await person.getAnimal()
  }
}

我发现了一些与我的问题相关的文档,这让我很困惑:
原则上,这两个选项都是在Foo和Bar之间建立一对一关系的有效方法。但是,当我们说"Foo和Bar之间存在一对一关系"时,就不清楚这种关系是强制的还是可选的。换句话说,一个Foo可以没有一个Bar存在吗?2一个Bar可以没有一个Foo存在吗?3这些问题的答案可以帮助我们找到我们想要的外键列的位置。
这个来自文档的摘录让我想到,任何BelongsTo另一个模型的模型必须总是有一个与之关联的其他模型的示例,反之,任何HasOne另一个模型的模型有时不会有一个与之关联的其他模型的示例。

jgzswidk

jgzswidk1#

假设Person有一个CarCar属于Person,这意味着您可以在Cat表中看到一个FK,它引用了该人员ID。
接下来,定义“hasOne”和“belongsTo”的目的是让您在Model Querying中使用主题PersonCar执行一些SQL搜索。

相关问题