J'ai été la programmation en C# et en Java pour un peu plus d'un an et avoir une bonne connaissance de la programmation orientée objet, mais mon nouveau projet nécessite une base de données modèle. Je suis à l'aide de C# et de Linq qui semble être un outil très puissant, mais j'ai du mal avec la conception d'une base de données autour de mon approche orientée objet.
Mes deux questions principales sont:
Comment faire face à l'héritage de ma base de données? Disons que je suis en train de construire un personnel de l'affectation de l'application et j'ai une classe abstraite, de l'Événement. De l'Événement je tire les classes abstraites ShiftEvent et StaffEvent. J'ai ensuite classes concrètes Maj (dérivé de ShiftEvent) et StaffTimeOff (dérivé de StaffEvent). Il y a d'autres classes dérivées, mais pour la clarté de l'exposé elles sont suffisantes.
Je devrais avoir une table séparée pour ShiftEvents et StaffEvents? Je devrais peut-être des tables séparées pour chaque classe de béton? Ces deux approches semblent comme ils allaient me donner des problèmes lors de l'interaction avec la base de données. Une autre approche pourrait être d'avoir une table d'Événements, et ce tableau aurait nullable colonnes pour chaque type de données dans une de mes classes concrètes. Toutes ces approches se sentent comme ils pourraient entraver l'extensibilité en bas de la route. Plus que probablement, il existe une troisième approche que je n'ai pas considéré.
Ma deuxième question:
Comment dois-je traiter avec les collections et l'un-à-plusieurs liens dans un objet orienté vers?
Disons que j'ai les Produits de la classe et de l'une des Catégories de la classe. Chaque instance de Catégories contiennent un ou plusieurs produits, mais les produits eux-mêmes devraient avoir aucune connaissance de catégories. Si je veux mettre en œuvre dans une base de données, puis chaque produit aurait besoin d'un ID de catégorie qui correspond à la table catégories. Mais cela introduit plus de couplage que je préfère à partir d'un OO point de vue. Les produits ne savez même pas que les catégories existent, beaucoup moins un champ de données contenant un ID de catégorie! Est-il un meilleur moyen?