Imaginez que vous avez une table de base de données qui stocke une liste de personnes. Vous voulez établir une relation entre les peuples, c'est-à-dire une personne avec la personne j. P>
Je suppose dans ce cas, on a besoin d'une deuxième table pour stocker des associations de personnes. Cette table contiendrait deux champs (personne1, personne2) et chaque entrée correspond à une relation individuelle entre deux personnes. P>
Est-ce bon ou y a-t-il un moyen plus intelligent de le faire? Cette méthode rend l'échelle de la table d'association comme N_USERS ^ 2. P>
3 Réponses :
Oui, c'est vrai si vous souhaitez modéliser une relation nombreuses à plusieurs. C'est toutes les personnes peuvent avoir beaucoup d'amis. P>
Si vous avez une relation unique, comme toutes les personnes possèdent un boss (ou pas de patron), vous n'avez pas besoin de la table supplémentaire, vous n'avez besoin que d'une colonne bosside dans la table de la personne. P>
Vous voudrez peut-être aussi établir le type de reletteInture. Dans ce cas, vous utiliseriez idéalement 2 tables, types de relations et relations. La clé unique pourrait être sur les 3 champs de relations.
Relationships PersonId RelatedPersonId RelationshipTypeId RelationsShipTypes Id Name
E.g. Tableau UserInfo (pour les informations personnelles des utilisateurs) et tableau UserCredential (pour les informations de connexion des utilisateurs). C'est le tableau divisé afin de réduire la taille d'un enregistrement. P>
Spécifiez la même clé primaire pour chaque table et créez une clé étrangère d'une (table secondaire) à une autre (tableau primaire): P >
CREATE UNIQUE INDEX IX_Friendship_Right_Left
ON Friendship(RightUserID, LeftUserID);
CREATE UNIQUE INDEX IX_Following_Right_Left
ON Following(RightUserID, LeftUserID);
La contrainte de contrôle dans le tableau suivant n'interdit que des enregistrements tels que (A, A). (A, b) signifie un moyen b et (b, a) des moyens su suit A, ces deux enregistrements ont une signification différente de sorte que tous les deux sont nécessaires. P>
Vous pouvez créer un index supplémentaire pour optimiser les requêtes avec le Deuxième colonne (Supposons que le PK soit en clustered Index): P>
UserInfo(#UserID);
UserCredential(#UserID)
FOREIGN KEY (UserID) REFERENCES UserInfo(UserID);
Salut. Dans votre premier code à plusieurs fois, vous dites ... "Vérifier (de gauche