I agree with a lot of what @JanHudec said, although I'd like to expand on that a bit:
- You need to know what your real requirements are, but it is easier to combine information than it is to split it apart once it is combined again.
- Sorting will always be a challenge, as the rules can differ across locales and cultures.
- Many cultures don't match yours, which leads to bad assumptions. (This is Jan's biggest point)
Terminology is Important
Terms like given name and surname or family name have semantic meaning, and your database should always reflect the semantics of your data. Terms like first name and last name have positional meaning, usually based on English and American ideas of how names work. Use the proper terminology for the semantics of your data.
How far do you need to break it down?
There are concepts of title (Mr. Dr. Mrs. etc.) or ordinal (Jr., Sr., III, etc.), and even certifications (PhD, MS, PCAM, etc.) which can be important depending on the context and purpose.
Many locales have the concept of multiple family names (paternal and maternal), and some have none. When filling out forms, sometimes people have to make hard choices as to which name to use, for example using the paternal family name for the "surname" in an American form, or coming up with a last name based on the father's name (Janson).
While in America it is common to have one or more middle names, it's often ignored outside of your family.
Sorting
It helps to have a dedicated field for sort name. That way you can disambiguate the rules when you create the record. It also ensures you have the names sorted in the correct order across international boundaries.
Common Practices
Your real requirements dictate how correct you need to be about names. If you are creating a government or banking web site, then you have more requirements for storing and handling names than something informal like Facebook.
Informal Guidelines
- Have one field that describes how the user wants to be known
- Sort and display uses that one name
Semi Formal Guidelines
- Have one field for a nickname, or how the user wants to be addressed
- Have two fields, one for given name and one for surname (surname should be optional)
- Calculate a sorting field based on locale and the given/surname combo
- Use the nickname when addressing the user directly
- Use the formal name when listing people
Formal Guidelines
- These are dictated by existing policies and procedures for the entity you are supporting
- You need as many fields as the maximum number of name parts you will be supporting, named semantically for what they are.
- Include a sorting field that handles the sorting as you would in the semi-formal case
- Display also is usually dictated by existing policies and procedures. You need to familiarize yourself with them.