Para este tipo de relación, veamos cómo se podrían relacionar las tablas Captain y Ship, donde definimos que un capitán puede tener un solo barco y un barco solo puede pertenecer a un capitán.

**const { Sequelize, DataTypes } = require("sequelize");**

**const sequelize = new Sequelize("your URI string", {...config});**
**const captainSchema = {
  name: {
    primaryKey: true,
    allowNull: false,
    unique: true,
    type: DataTypes.STRING
  }
};

const shipSchema = {
  name: {
    primaryKey: true,
    allowNull: false,
    unique: true,
    type: DataTypes.STRING
  },
	captainName: {
		field: "captain_name",
		unique: true,
		allowNull: false,
		type: DataTypes.STRING,
		references: {
			model: "captains",
			key: "name"
		},
		onUpdate: "CASCADE",
		onDelete: "SET NULL"
	}
};

const Captain = sequelize.define("Captain", captainSchema, { 
	tableName: "captains",	
	timestamps: false
});
const Ship = sequelize.define("Ship", shipSchema, { 
	tableName: "ships",
	timestamps: false 
});
sequelize.sync(); //también se podrían usar migraciones**

Con este código lo que hicimos fue definir dos esquemas para cada modelo, además como se puede notar en el schema de Ship hay un campo muy importante que hace de llave foránea para permitir que podamos crear una asociación entre los dos modelos. Veamos cada propiedad de dicho campo con un poco más de detalle:

Ahora que ya tenemos los modelos definidos podemos asociarlos. Para realizar este tipo de asociación, Sequelize nos provee con dos métodos que funcionan de forma similar, las diferencias son muy mínimas.

Al final, con cualquiera de los dos métodos el resultado es exactamente igual y no hay problema alguno, es un simple tema de gustos.

El campo/columna referenciado en la llave foránea debe ser único, de otra forma puede que obtengamos errores a la hora de ejecutar el código.