Designing different content types with the same fields' name (shared fields) For my website I need several content types (at least five), but all that have some fields' name in common as title, subtitle, body, teaser, image and so on.

Shall I use the same field (machine name) for all the content types or is better an its own field for each content type?

For example, if I have the two content types "articles" and "recipes" and create the field "field_subtitle", shall I use this field for both content types or is better to create the two fields "field_articles_subtitle" and "field_recipes_subtitle"?

Are shared fields better or worst in term of performance?
Performance isn't a huge issue in my opinion, the advantages you will gain from having correctly built relational data will outweigh any performance gains.

Use the same field across your different content types. If you are storing the same "thing" then semantically using the same field has many advantages.


Doing things that are common to that field work across content types. Eg, pulling out the subtitle and displaying it under the H1 in the page template.
Some common settings across the entities. This means that if you know a subtitle will never exceed 200 characters, you need only enter this one, keeping your models a little more dry.
If you would like to ever list these things together, you can use views to list the common fields with no extra effort.
CSS can be written more generically. Subtitles are usually grey and italic, this can be applied across bundles or entities much easier if the fields are common.


There are some disadvantages of creating lots of fields across entities to represent the same data:


Messy field lists and lots more database tables. While this wont have too much of an impact on performance, it's simply a technical debt that can be avoided.
Messy code. Having to reference ->field_articles_subtitle vs ->field_subtitle is simply duplicating information we already know (that we are working with an article).


In terms of CSS, if you would like to define custom types of formatting to different entities you can always use:

.node-type-article .field-field-name{ custom-css: true; }


In short, for the example you stated use the same field.