Nombre indéfini de tables vs nombre indéfini de lignes avec plusieurs colonnes

Lequel serait le mieux (performance sage et maintenance), une database qui crée une table dynamicment ou simplement en ajoutant des lignes dynamicment?

Supposons que je construis un projet dans lequel je permets aux users de s'inscrire. Dites que j'ai une table qui ne stocke que des informations personnelles de base, comme le nom, le dob, la date d'adhésion, l'adresse, le téléphone, etc. Dites 10 colonnes.

Maintenant, c'est la partie délicate.

Scène 1: Création de plusieurs tables

Lorsqu'un user termine l'logging, une table de message est créée. Donc, chaque table est créée pour chaque user. Les lignes de chaque table de message varient pour chaque user.

De la même manière il y a une table de chariot pour chaque user comme la table de message.

Pour cette scène 1, 2 tables sont créées avec chaque logging.

Scène 2: Ajout de lignes

Le scénario est le même ici, mais dans ce cas j'ai 2 tables pour le message et le panier. Les lignes sont ajoutées uniquement lorsqu'il y a une activité.

Remarque:

Vous devez supposer que le nombre d'users est supérieur à 2 000 et que plus de 50 users sont actifs en permanence. Ce qui signifie que les tables de messages et de chariots sont toujours occupées pour les deux cas. Comme il y a toujours une requête pour mettre à jour, append, supprimer, insert, sélectionner etc. simultanément.

Aussi quelle scène consumra plus d'espace disque.

En écrivant cela, je me request quelle technique utiliserait Facebook et les autres. S'ils utilisent le style Scène 2 (tous les users (milliards) utilisent la même grande table de messages longs) … Je me demandais juste

Bases de données a quelques règles de base définies pour la design de database appelée "normalisation de la database", Ces règles de base nous permettent d'éliminer datatables redondantes.

Première forme normale
Stocker une information dans une seule colonne, une colonne ne doit stocker qu'une seule information.

Forme normale 2ns
Une table ne doit contenir que les colonnes liées entre elles. Toutes les colonnes liées doivent être dans une table.

Maintenant, si vous regardez votre design conseillée, une table séparée pour chaque user splita SAME informations / colonnes sur tout l'user dans 1000 de tables. Ce qui viole la 2ème forme normale.

Vous devez créer une table et placer toutes les colonnes associées dans cette table pour tous les users. et vous pouvez utiliser t-sql normal pour interroger vos données mais si vous avez une table pour chaque user, je suppose que chacune de vos requêtes sera exécutée dynamicment et pour chaque requête, vous utiliserez SQL dynamic. qui est l'un des Sql Devils et vous voulez éviter de l'utiliser autant que possible.

Ma suggestion serait en savoir plus sur la design de database. Une fois que vous avez une compréhension de base de la design de la database. Dessinez sur un morceau de papier et voir si elle vous fournit tout ce que votre entreprise exige / attend de cette application. Passez-y quelque time maintenant, il vous fera économiser beaucoup de douleur plus tard.