Composite clé comme clé étrangère (sql)
voici mes deux tables de préoccupation:
CREATE TABLE IF NOT EXISTS `tutorial` (
`beggingTime` time NOT NULL,
`day` varchar(8) NOT NULL,
`tutorId` int(3) NOT NULL,
`maxMembers` int(2) NOT NULL,
`minMembers` int(1) NOT NULL,
PRIMARY KEY (`beggingTime`,`day`,`tutorId`),
KEY `tutorId` (`tutorId`)
)
CREATE TABLE IF NOT EXISTS `group` (
`groupId` tinyint(3) NOT NULL AUTO_INCREMENT,
`status` varchar(20) NOT NULL,
`groupName` varchar(50) NOT NULL,
PRIMARY KEY (`groupId`)
)
Je voudrais créer un champ "groupe", qui serait lié à la composition de clés uniques dans "tutoriel". Donc je suppose que ma question est, comment puis-je relier ces tables? dois-je créer des clés étrangères champ "groupe" pour chaque clé primaire dans 'tutoriel'?
voulez-vous 1:1, 1:n, n:1, n:m relation? c'est à dire la façon dont de nombreux tutoriels pour combien de groupes?
OriginalL'auteur dgamma3 | 2012-03-20
Vous devez vous connecter pour publier un commentaire.
Par la documentation de mySQL vous devriez être en mesure de mettre en place une clé étrangère de la cartographie pour les composites, ce qui vous obligera à créer plusieurs colonnes.
Ajouter les colonnes et le mettez dans votre
group
tableQue Steven a fait allusion dans les commentaires ci-dessous, vous DEVRIEZ essayer de le ré-architecte-ce donc que le tutoriel de table utilise une réelle clé primaire (même si c'est juste une identité, d'une clé de substitution). Cela permettra une plus grande performance que SQL a été créé pour ce type de relation, pas de composite.
Merci, j'ai mis à jour ma réponse en fonction de votre commentaire, comme vous l'êtes, et je l'ai mentionné que le long avec la réponse directe à la première place
AVERTISSEMENT: Les colonnes référencées doivent être dans le même ordre que celui de la clé a été créé en. Pour obtenir le bon de commande, cliquez-droit sur la clé étrangère (sous les touches de dossier lorsque vous développez la table dans SSMS) et le script créer dans le presse-papiers. De la pâte. Assurez-vous que votre colonnes référencées sont dans le même ordre que votre clé.
Je m'excuse d'avance pour les commentaires sur un de 6 ans réponse mais je ne comprends pas pourquoi la solution pourrait entraîner une grave dégradation de la performance" ou pourquoi une clé primaire composite n'est pas considéré comme une "clé primaire". Ne faut-il pas les clés primaires composites ont de performance très similaire à une seule clé primaire de la même taille?
Je suis totalement d'accord avec vous. La partie de la réponse est quelque chose entre une idée fausse et mythe urbain.
OriginalL'auteur Justin Pihony
1] réécrire la première table: en mettant
tutorId
tout d'abord, il est automatiquement une clé de tout par lui-même. En fait, tous les mais la dernière des colonnes composites devient une clé.2] Avoir autant d'indices est très cher pour le lourd écrire les tables. Considérons donc un champ supplémentaire dans le tutoriel pour l'utiliser comme une clé étrangère; peut-être un auto_increment record_id. Lui donner une certaine pensée.
OriginalL'auteur kasavbere