2011-06-15 2 views
4

J'ai besoin de conseils sur la modélisation de mes tables de données. J'ai besoin d'appliquer la hiérarchie d'héritage sur mes tables en utilisant SQL Server et Hibernate. Quelqu'un pourrait-il me montrer un exemple de base? Ce pourrait être un tutoriel sur le site Web aussi.Héritage avec Hibernate

... Vive

+1

héritage et relationnel ne vont pas normalement bien ensemble. Vous * normalisez * lors de la conception de bases de données. – gbn

+0

Vous ne pouvez pas le faire en MS SQL, mais vous pouvez utiliser un framework comme Hibernate (ou NHibernate) qui fait fonctionner l'héritage pour vous. Essentiellement, l'héritage dans une base de données est vraiment juste une relation un à un entre la table Super classe et la table sous-classe. – Zoidberg

+0

Je vais aussi utiliser hibernate. Je n'ai aucune idée de comment j'y arriverai! – Pinchy

Répondre

7

Configurez les tables de sorte que la table dérivée partage la clé primaire avec la table de base.

enter image description here

+0

Le partage de clés primaires avec une table de base peut-il avoir un impact négatif sur les performances? – Pinchy

+2

Non, par défaut, les clés primaires sont configurées comme des index clusterisés. Donc une jointure sur ces deux serait très optimisée. – Magnus

+0

Pensez-vous que je peux aussi intégrer ce modèle avec Hibernate? – Pinchy

0

MS SQL Server n'est pas une base de données orientée objet, il est une base de données relationnelle. Il semble que vous devriez utiliser des vues sur vos tables de base plutôt que de dupliquer des colonnes.

La duplication de colonnes est inutile et aurait sans aucun doute un impact sur les performances et la maintenance deviendrait un cauchemar.

Peut-être modifier votre question pour inclure plus de détails sur ce que vous essayez d'atteindre.

+0

Salut! Oui ms sql n'est pas orienté objet, mais j'ai besoin d'une table de base. J'ai une table cible et cette cible pourrait être une organisation ou une personne. Il n'est pas possible de les avoir dans une table commune, je dois d'une manière ou d'une autre les garder dans des tables séparées. Le partage de clés primaires avec une table de base peut-il avoir un impact négatif sur les performances? Merci pour la réponse ... – Pinchy

0

Une autre façon est de dupliquer les attributs dans les tables enfant et de faire table parent comme VIEW (qui sélectionne par caractéristiques communes de tous les enfants).

CREATE VIEW Parent 
AS 
SELECT ID, Name FROM Child1 
UNION ALL 
SELECT ID, Name FROM Child2 ... 

Le problème pourrait être avec l'ID qui doit être unique à travers toutes les tables enfant (à l'aide GUIDs est preferrable)