The scenario you are setting should be considered in relation to the DBMS (Database Manager System) which will use, more specifically, the DBMS model.
I will consider two models: Relational (as Postgresql) and Document-oriented (as Mongodb).
Relational Models
In relational models, the standard of good practice and modeling is based on Data normalisation, where one of the normal forms describes the need for the properties of entities (fields of a table), not to be multivariate.
In this way, to solve, using the scenario you mentioned, a client with multiple phones, the ideal is yes create a Client table and a Phone table where each customer will have n phones and each phone will belong to 1 customer, making the customer primary key relationship (customer id) to be added as foreign key field in the phone table.
Your doubt about performance, see, relational Dbms were created to handle high volumes of data and solve the relationships between tables as performatively as possible. Technically the simple solution is to create indexes for foreign key, which allows the engine to execute smart plans at times of queries.
So as an example we would have the following model:
Models Oriented to Documents
They are among a broader category defined as Non-relational Models or Nosql, specifically the Document-Oriented ones allow the modeling of data from an entire document as a record in a collection (name given to tables).
Mongodb for example stores a document in Bson format (Binary Json) and allows, in fact in most cases, guides, the "denormalization" of data, that is, in the specific case of multivariate fields, they are welcome.
See, like relational databases, these are also designed to handle high volumes of data, but in general, by minimizing the need to resolve relationships (joins) between multiple tables, the performance in many cases is higher because all the data is stored together.
For example for Customer and phones, the model could be with the Phones field storing an array:
Cliente {
nome: "João",
cpf: "00000000000",
telefones: ["42-9999-9999", "41-0000-9999"]
}
Beware of the modeling
Finally, I agree with @Niero when he is emphatic about using a table or phone collection for each customer, this would be totally out of context because he would have to create tables for example: Phone_1, Phone_2, Phone_x, one for each customer, impractical from a technical point of view, and totally out of any good practice orientation and literature in both Relational and Nosql data modeling.
Your question receives the most generic answer that exists (rs), DEPENDS ON EACH CASE. When you say "In companies" it depends on each company, you can’t compare a storage structure like Google for example with the structure of the neighborhood shop (extreme example I know). In short for me a Join between client and phone (if well indexed) is more feasible (as long as it is within the project’s need)
– Deividson Oliveira
studies on data modeling in the database, will clarify all these doubts
– Neuber Oliveira