2011-09-04 1 views
1

J'apprécierais les conseils d'experts sur un schéma de base de données pour un site Web.Avis d'expert requis sur la conception de la base de données

J'ai une conception de base de données pour un site de listes de petites annonces qui se fait actuellement dans le moteur MyISAM donc il n'y a pas de relations, les clés, etc.

S'il vous plaît consulter le modèle ER pour la conception actuelle:

enter image description here

enter image description here

Je dois savoir si je suis sur la bonne voie avec le DB design ... (les champs e-mail et mot de passe sont redondants dans les deux utilisateurs et les annonces de tables En effet, le premier plan n'était pas d'exiger l'enregistrement des utilisateurs, mais ce plan a été modifié récemment. Donc, s'il vous plaît ignorer ce bit puisque je vais supprimer ces champs du tableau annonces)

On s'attend à ce que le site a le potentiel de faire au moins un minimum de 100 000 pages vues par jour dans quelques mois à compter du lancement.

S'il vous plaît des conseils sur ce que vous pensez de cette conception et ce qui pourrait être fait mieux.

En outre s'il vous plaît des conseils sur le meilleur Db Engine à utiliser pour un tel site (InnoDb ou tout autre ...). Veuillez indiquer le meilleur moteur de stockage pour cette base de données en tenant compte des performances, de la charge et de l'intégrité de la base de données (si nécessaire car il est conçu pour le moteur MyISAM et donc pas d'intégrité Db). pour un tel site.

Je sais que les problèmes/problèmes de bases de données spécifiques ne peuvent être traités que lorsqu'ils se produisent réellement, mais au moins je veux commencer dans la bonne direction.

Merci d'avance pour toute votre aide.

+0

quelle est la différence entre ipn et paiement? –

+2

La première chose qui attire mon attention: il n'y a pas de relations FK dans ce modèle ER –

+0

Vous pourriez envisager de normaliser, si ce n'est déjà fait. En regardant les utilisateurs, par exemple, je me demande si vous voulez vraiment que plusieurs utilisateurs partagent le même courriel, mot de passe, etc., ou si les utilisateurs peuvent avoir confirmé et oublié de confirmer leur inscription. Redondances comme ceci peut conduire à des incohérences ou exiger des contrôles d'intégrité complexes ... – Patrick87

Répondre

2
  1. Pourquoi pourquoi utiliser MyISAM? D'après ce que je vois, vous ne parlez pas d'un site Web de haute performance, alors pourquoi l'utiliser? Aller avec InnoDB. L'intégrité des données n'est pas une option, donc si vous n'êtes pas un expert, vous n'avez probablement pas pensé à implémenter la logique dans votre application, alors vous devriez vraiment envisager d'utiliser FK. Si l'on ne regarde que votre modèle ER (qui n'est même pas un ERM puisque vous n'avez aucune relation définie, donc il n'y a pas de R, c'est plus un EM), nous ne pouvons pas tout dire. Nous avons besoin d'une histoire, et l'histoire semble grande.

  2. 100k coups par jour est des arachides et dans ce cas trompeur. Quel est le taux le plus élevé prévu par seconde? Pendant combien de temps doit-il être possible de maintenir ce niveau?

  3. Il manque également les types de données pour ce modèle. Ceux-ci ne sont pas facultatifs même pour des analyses minimales. Quelque chose comme ça prend habituellement des jours à discuter et à analyser, je trouve cela un peu exagéré ici, surtout étant donné la rareté de l'information.

+0

Merci Marius. Je ne suis pas sûr si l'intégrité des données est implémentée dans la logique de l'application puisque je n'ai pas regardé tout le code. Tout ce que j'en ai vu ne semble pas suggérer quelque chose comme ça. Quelles sont les chances que je casse le code si j'ajoute des clés étrangères à la base de données maintenant? Je suppose qu'il n'y aura pas d'exemples dans le code où certaines données sont manipulées sans vérifier leur validité/intégrité mais que se passe-t-il s'il y a une telle instance et que j'ajoute des clés étrangères ... comment gérer cette situation si c'est vraiment le cas se produire? – user481913

+0

Et en ce qui concerne les EM, je viens d'utiliser un outil de modélisation de base gratuit sur un MYISAm (donc pas de FK, etc.) db. – user481913

+0

Vous pourriez en effet rencontrer des problèmes si vous ajoutez des FK à vos tables et que l'application n'est pas programmée correctement.Par exemple, vous insérez dans 'adpics' avant d'insérer l'annonce pour laquelle vous créez la photo dans' ads'. Sans l'erreur, une entrée invalide serait insérée dans 'adpics' (invalide car l'annonce référencée n'existe pas). Ma suggestion est de faire le changement, tester et résoudre tous les problèmes que vous rencontrez. Les problèmes ne sont pas nouveaux, vous venez de les découvrir avec l'aide de FK au lieu de corrompre vos données (entrées référençant d'autres entrées qui n'existent pas). –

2

En un coup d'œil. . .

Nous ne pouvons pas voir les clés primaires, les contraintes uniques ou quoi que ce soit de ce genre dans votre diagramme. Leur absence est troublante.

Presque chaque table a un numéro d'identification. Plusieurs d'entre eux sont simplement appelés "id", et d'autres ont un nom plus descriptif. Plus descriptif est le meilleur de ces deux idées.

Un numéro d'identification dans une table qui n'a pas d'autres contraintes uniques est généralement une erreur. (Habituellement, mais pas toujours.) Par exemple, la table "chats" a probablement besoin d'une contrainte unique sur "catname". Sinon, le numéro d'identification identifiera seulement une rangée, pas un chat. (Et cela signifie que vous pouvez avoir deux lignes ou plus avec le même "catname".)

Les tableaux adxfields et subcatxfields ressemblent à une catastrophe en attente d'opportunité. La table 'subcatxfields' ressemble à une sorte d'anti-pattern EAV. Regardez attentivement au Bill Karwin's slideshow on database anti-patterns avant de prendre cette route. (EAV commence à la diapositive 16.)

La tarification du sous-abonnement devrait probablement être déplacée vers une table distincte.

Il y a un international standard for country codes. Il est préférable d'utiliser les codes de pays standard au lieu de votre propre numéro d'identification. L'utilisation d'un code lisible par l'utilisateur signifie que vous pouvez généralement éliminer une jointure. (Habituellement, mais pas toujours.)

La table "villes" n'a pas assez de colonnes pour identifier une ville. (Il y a beaucoup de villes nommées «Washington» aux États-Unis.)

C'est assez de temps. . .

+0

Merci Catcall. L'intention d'utiliser des clés, Constraints est là même si elle n'apparaît pas dans le modèle d'entité puisqu'il s'agit d'un moteur MYISAM ... Quelles améliorations suggérez-vous pour les sous-champs d'adxfields? – user481913

+0

+1, merci d'avoir pris le temps de répondre. – user481913

Questions connexes