Ajoutez des clés étrangères aux types de Big Data tels que les tables mysql varchar (2000)
P粉378264633
2023-09-05 17:33:34
<p>J'ai deux tables "affiliate_stats" et "transaction",
'affiliate_stats' a la colonne 'affiliate_sales' varchar(2000) (sous-table),
et "transaction" a la colonne "_id" varchar(100) clé primaire (table parent)</p>
<p>Lorsque j'ajoute une clé étrangère à "affiliate_sales" qui fait référence à "_id"
traverser
<code>Table de modifications</code>affiliate_stats<code>Ajouter une contrainte</code>fk_affili_sales<code>La clé étrangère (affiliate_sales) fait référence à la transaction (</code>_id<code>);</code< /p>
<p> obtenez-moi cette erreur <code> La clé spécifiée était trop longue ; la longueur maximale de la clé est de 3072 par tes</code>
Je sais que les deux colonnes doivent être de taille égale, mais dans mon cas, j'ai besoin de tailles différentes pour gérer cela.
Recherche dans de nombreuses sources, pas de réponse claire et aucune des solutions n'a fonctionné pour moi. </p>
sera répertorié
affiliate_sales
更改为VARCHAR(100)
.Si c'est le cas
transaction(_id)
的外键,那么它不需要是VARCHAR(2000)
car de toute façon, il ne peut jamais contenir une chaîne de plus de 100 caractères.Avant de faire cela, assurez-vous qu'il n'y a actuellement aucune chaîne de plus de 100 caractères dans la colonne.
Répondez à votre commentaire :
Si vous envisagez de stocker des "tableaux" (c'est-à-dire des chaînes avec des listes séparées par des virgules) dans une colonne, vous devez comprendre que vous ne pouvez de toute façon pas créer de clé étrangère dessus. Une clé étrangère nécessite qu'une colonne associe une valeur à
transaction
une ligne du tableau. Si vous ajoutez une contrainte de clé étrangère, un seul identifiant peut être stocké dans la colonne.Il semble qu'il existe effectivement une relation plusieurs-à-plusieurs entre
affiliate_stats
etaffiliate_stats
和transaction
. Vous avez besoin d'une troisième table pour modéliser la relation plusieurs-à-plusieurs.varchar(2000)
Stocke 2000 caractères, mais chaque caractère ne fait pas nécessairement 1 octet. Les caractères européens simples tels que a, 1 et ? font tous un octet. Cependant, ü ou å ou َََُِِّْ occupe plusieurs octets.Il est possible que les types de chaînes n'aient pas besoin d'être de la même longueur.
Cependant, ce n’est pas nécessaire. La clé ne peut pas dépasser 100 caractères. Votre clé primaire est
varchar(100)
, donc la clé étrangère ne comportera pas plus de 100 caractères.Cependant, il semble que vous souhaitiez stocker deux types de données différents dans cette colonne. L’un est un certain type de tableau et l’autre est une clé étrangère. vous ne pouvez pas. Les clés étrangères garantissent que chaque valeur a une valeur de clé primaire correspondante.
À la place, utilisez la clé primaire à incrémentation automatiquepour relier les tables entre elles. C'est plus simple, plus rapide, utilise moins de stockage, est sans ambiguïté et ne change jamais.
Ajoutez une nouvelle colonne comme clé primaire pour les deux tables. Alors citez-le.
Vous ne pouvez pas stocker plusieurs clés dans une colonne. MySQL doit être capable de confirmer que chaque clé étrangère possède une clé primaire correspondante, et ne peut le faire qu'en vérifiant qu'elles sont exactement égales.
Au lieu de cela, si chaque ligne d'affiliation_stats correspond à plusieurs ventes d'affiliation, vous avez besoin d'une table de jointure. C’est ce qu’on appelle une relation un-à-plusieurs. Une ligne d'affiliate_stats est liée à de nombreuses filiales_sales.
Maintenant, insérez une ligne dans affili_stats_sales pour chaque affilient_sale que vous souhaitez ajouter à la ligne affilient_stats.
Les données de ventes et statistiques sont liées en rejoignant ce tableau. Par exemple, si vous souhaitez voir des statistiques sur les ventes de 100 unités.
Un peu difficile au début, mais très puissant. C'est ainsi que fonctionnent les bases de données relationnelles.