Does every object need an id or can I place an object's id in a nested object

I am wondering if this is an acceptable schema or if my Person object should have an id_ directly on it.

type PersonId {
  id_: String!
}

type Name {
  first_name: String!
  last_name: String!
  middle_name: String
}

type Person {
  person_id: PersonId
  name: Name!
}

If this schema is acceptable is there a way to tell my provider and mock server where the id is located in order to sync my cache automatically.

You can have an “id” field on the Person type and add a @key to specify it’s a primary key on this type.

type Name {
  first_name: String!
  last_name: String!
  middle_name: String
}

type Person @key(fields: "id") {
  id: String! 
  name: Name!
}

Ideally, I wouldn’t change the schema unless completely needed.