Prefabs are collections of game objects that can be reused. Prefabs are saved in your project as an asset and share their data between all places where the prefabs are reused. If you change a prefab and save it, then all other instances of that prefab are updated with the same changes as well.
This is useful for objects that are used often throughout your game or level. Such as doors, windows, houses, weapons, bullets, etc.
All prefab instances in your scene are “empty” game objects that contain a reference to the prefab asset. All the data for the instances are saved in the prefab asset and not in the scene.
This means that the prefab instances in your scene directly show and use the data from the prefab asset. So if you edit the data in the prefab asset, then all instances automatically use those changes as well.
A nested prefab is a prefab that is placed inside another prefab. Such as a window prefab inside a house prefab. By nesting prefabs, you can create larger and more complex structures.
These nested prefabs are still connected to their original prefab asset. So they are automatically updated if you modify the original prefab, even though the nested prefab is saved within a different prefab.
The data for nested prefabs is stored in the same way as prefab instances. The nested prefab only stores a reference to the original prefab asset and does not store any data itself.
The prefab system in Unity 2018.3 has been overhauled to make it easier to nest prefabs. In previous versions of Unity you must download an additional package to nest prefabs.