2010-02-14 2 views
8

Nous avons eu beaucoup de discussions au sein de notre groupe de développement concernant la question de savoir si la composition des entités devrait piloter la conception de la base de données ou si la conception de la base de données devait piloter la composition des entités.ORM - Le schéma de la base de données gère-t-il la composition de l'entité ou vice-versa?

Pour ceux qui s'en sont occupés, quelle a été votre philosophie? Bien sûr, toutes les entités ne sont pas mises en correspondance 1: 1 avec une table de base de données. Mais, pour ceux qui le font, comment avez-vous géré cela? IOW, qui vient en premier, la table de base de données et ensuite une entité correspondante ou une entité et ensuite une table de base de données pour le persister?

Merci.

+0

La même question: http://stackoverflow.com/questions/919880/code-first-or-database-first-how-to-choose –

Répondre

4

Votre base de données survivra probablement à n'importe quelle application que vous construisez aujourd'hui. Toutes les performances et l'évolutivité vont être pilotées par votre schéma de base de données. Un modèle de base de données sonore est le fondement sur lequel toute application est construite, et je dirais que c'est là que vous devriez investir le plus d'efforts dans la conception et les tests, car cela vous donnera les plus grands avantages. Cela étant dit, bien sûr, votre application préfèrera manipuler les entités du domaine, et manipuler des entités non naturelles dirigées par la théorie relationnelle par opposition aux entités commerciales ne fera que compliquer les choses. Mon point de vue est que c'est le rôle de l'ORM de faire correspondre les deux, le mieux possible. Mais chaque fois que des conflits inévitables apparaissent, le droit de passage doit être donné par le facteur déterminant de vos performances et de votre évolutivité: le schéma de la base de données.

+1

@Remus - Je pense que c'est une très bonne perspective, et à laquelle je n'avais pas vraiment pensé. La base de données et ses données survivront probablement aux applications initiales qui lui conservent les données. Et il sera potentiellement utilisé de bien d'autres façons que l'application qui y persiste. –

0

Je dirais que vous construisez votre modèle de données logique, et construisez la base de données et les objets correspondant à cela.

En fait, je remettrais en question l'hypothèse que la table de base de données et les entités correspondantes ne peuvent pas correspondre. J'ai rarement vu, voire jamais, un cas où ils ne pouvaient vraiment pas (si vous construisez une application à partir de la base). Aussi, je dirais que chaque fois que le modèle d'objet et le schéma de la base de données divergeaient, cela posait beaucoup de problèmes.

Je suis revenu à l'idée que tout est plus simple si vous les faites toujours correspondre, même si c'est hérétique.

+0

Je n'ai pas encore vu de traduction directe d'un lien (many- à-plusieurs). Généralement, ils sont implémentés en tant qu'attributs Vectors/ArrayLists de l'objet principal plutôt que de leur propre classe. –

+0

@ OMG Poneys: Il n'y a pas de traduction directe d'une table d'association car la table d'association n'est pas une partie de première classe du modèle Entity.La table de liens supplémentaires fait partie d'un hack standard pour faire en sorte qu'un modèle relationnel représente des relations d'objet plus sophistiquées. –

+0

@ S.Lott: Ils sont appelés bases de données "relationnelles", pas "orienté objet". Les tables de liens ne sont pas des entités commerciales, mais le mappage vers un vecteur/ArrayList/Collection/etc est toujours équivalent à un objet. –

5

« entité et une table de base de données de persister il »

L'entité est ce que votre programme manipule. C'est l'essence de ce qui est en cours de traitement.

La représentation de la base de données de cette entité (comme les représentations de fichiers plats ou les représentations GUI) ne sont que des représentations pratiques de l'entité.

Vous devrez peut-être réfléchir un peu à la représentation de base de données quand il s'agit de certaines choses que les bases de données relationnelles sont particulièrement mauvaises. Les relations plusieurs-à-plusieurs, par exemple, nécessitent l'introduction d'une table supplémentaire car la base de données a des limitations que votre modèle d'objet n'a pas. Vous pouvez avoir quelques considérations de conception d'entité pour faire face à cela, mais ceux-ci un peu et bien compris.

La base de données est moins importante.

Les définitions d'entité sont centrales et essentielles.

+0

Perspective intéressante. Les opinions à ce sujet semblent être partout sur la carte. Le père de l'ORM, le Dr Raymond Chen, sur lequel LLBLGen est construit, prend le point de vue opposé opposé. La base de données pilote les entités. Voir: http://wagnerblog.com/2009/10/llblgen-linq-nhibernate-an-embarrassment-of-riches/ –

+0

@Randy Minder: C'est une logique simple. Le programme d'application fait réellement le travail réel du système réel. Tout le reste est la présentation ou la persistance. Les références Chen sont très difficiles à localiser. L'entrée précédente de wagnerblog fait référence à Peter Chen. Le blog de Raymond Chen ne mentionne pas beaucoup ORM. En pratique, les objets comptent; la base de données est juste la persistance. –

+0

Je suis également d'accord avec cette réponse. Un autre aspect important est que le schéma de la base de données ne contient que quelques aspects liés au fonctionnement de l'entité, c'est-à-dire que vous avez besoin d'annotations supplémentaires décrivant des choses comme le chargement paresseux, le comportement d'association, etc. Le fait que la base de données dure généralement plus longtemps que l'application ne signifie pas que vous devez le concevoir en premier, si l'outil permet simplement de le générer. Donc, je regarde aussi la base de données comme sur une représentation de stockage particulière. –

Questions connexes