Comment autoincrement un varchar
Puis-je faire une clé primaire comme "c0001, c0002" et pour le fournisseur "s0001, s0002" dans un tableau?
OriginalL'auteur SMUsamaShah | 2011-01-15
Vous devez vous connecter pour publier un commentaire.
Puis-je faire une clé primaire comme "c0001, c0002" et pour le fournisseur "s0001, s0002" dans un tableau?
OriginalL'auteur SMUsamaShah | 2011-01-15
Vous devez vous connecter pour publier un commentaire.
L'idée de conception de base de données, est de garder chaque élément de données séparée. Et chaque élément a son propre type de données, les contraintes et les règles. Que
c0002
n'est pas un champ, mais deux. Même avecXXXnnn
ou quoi que ce soit. Il est incorrect , et il sera sévèrement limiter votre capacité à utiliser les données, et utiliser les fonctionnalités de base de données et des installations.Décomposer en deux sous-éléments de données:
column_1 CHAR(1)
column_2 INTEGER
Puis définissez AUTOINCREMENT sur
column_2
Et oui, votre Clé Primaire peut être
(column_1, column_2)
, de sorte que vous n'avez pas perdu tout sensc0002
a pour vous.Ne placez jamais les fournisseurs et les clients (que ce soit "c" et "s" signifie) dans la même table. Si vous le faites, vous n'aurez pas une table de base de données, vous aurez un fichier plat. Et de divers problèmes et limitations conséquente.
Que les moyens, de Normaliser les données. Vous allez vous retrouver avec:
Person
ouOrganisation
contenant les données communes (Name, Address
...)Customer
contenant des données spécifiques de vos clients (CreditLimit
...)Supplier
contenant le fournisseur de données spécifique (PaymentTerms
...).
Et quand vous en avez besoin pour ajouter des colonnes, vous de le faire uniquement lorsque c'est nécessaire, sans affecter tous les autres intente un procès du fichier plat. La portée est limitée à la portée du changement.
Merci. Corrigés.
+1, surtout pour le morceau de conseils #2.
Merci. J'ai ajouté une explication quant à pourquoi.
Merci, j'avais besoin de la suggestion #2 mal.
OriginalL'auteur PerformanceDBA
Mon approche serait:
créer un
ID INT IDENTITY
de la colonne et de l'utiliser comme clé primaire (il est unique, étroit, la statique - parfait)si vous avez vraiment besoin d'un ID avec une lettre ou quelque chose, de créer un colonne calculée basé sur cette
ID INT IDENTITY
Essayer quelque chose comme cela:
Ce tableau contiendra
ID
valeurs de1, 2, 3, 4........
et laIDwithChar
serait quelque chose commeC000001, C000002, ....., C000042
et ainsi de suite.Avec cela, vous avez le meilleur des deux mondes:
bon, parfaitement adapté clé primaire (et la clé de cluster) sur votre table, idéal pour être référencé à partir d'autres tables
de votre personnage-en fonction de l'ID, correctement défini, calculé, toujours à jour.....
C999999
, le prochain sera...C000000
- " Uh-oh.' Et la prochaine -C000001
. "Quoi? De nouveau?!' 🙂 Je voulais juste souligner que l'utilisation de seulement 6 chiffres ne serait pas très fiable en termes d'évolutivité. Sinon, j'aime l'approche. +1M: oui, tu as totalement raison, mais vous pouvez également utiliser des 8 chiffres, bien sûr, si vous avez besoin de 🙂 ou 10 ou 15 jusqu'à vous
OriginalL'auteur marc_s
Oui, en Fait ce sont deux questions différentes,
1. Peut-on utiliser une colonne de type varchar comme un incrément automatique de la colonne avec les valeurs uniques rouleau, comme les numéros dans une classe
Réponse: Oui, Vous pouvez l'obtenir en utilisant ci-dessous morceau de code sans en préciser la valeur de l'ID et P_ID,
RÉPONSE: Non, vous ne pouvez pas l'utiliser dans un tableau.
OriginalL'auteur Ahmed Shair
Je préfère artificielle des clés primaires. Vos besoins peuvent également être mis en œuvre comme unique index sur une colonne calculée:
OriginalL'auteur devio
L'affectation du domaine du sens à la clé primaire est une pratique qui va au-chemin, le chemin du retour à l'époque où les programmeurs Cobol et les dinosaures vivaient sur la terre ensemble. La pratique survit à ce jour, le plus souvent dans les systèmes d'inventaire. C'est surtout un moyen d'éliminer une ou plusieurs colonnes de données et intégrer les données provenant de l'élimination de la colonne(s) dans la valeur de clé primaire.
Si vous souhaitez stocker des clients et des fournisseurs dans le même tableau, il suffit de faire, et d'utiliser une autoincrementing entier PK et ajouter une colonne appelée ContactType ou quelque chose de similaire, qui peut contenir les valeurs de " S " et " C " ou quoi que ce soit. Vous n'avez pas besoin d'une clé primaire composite.
Vous pouvez toujours concaténer ces colonnes (PK et ContactType) sur les rapports, par exemple C12345, S20000, (le casting entier en chaîne de caractères) si vous souhaitez éliminer la colonne afin d'économiser de l'espace (c'est à dire sur l'imprimé ou affiché la page), et tout le monde dans votre organisation comprend la convention que le premier caractère de l'id de l'entité représente le ContactType code.
Cette approche permettra de tirer profit de autoincrementing fonctionnalités qui sont intégrées dans le moteur de base de données, simplifier votre pc et le code associé à la couche de données, et faire de votre programme et de la base de données plus robuste.
OriginalL'auteur Tim
Laissez-nous d'abord de l'état que vous ne pouvez pas faire directement. Si vous essayez
le message d'erreur vous indique quels types de données sont pris en charge directement.
BTW: j'ai essayé de trouver cette information dans le BOL ou sur MSDN et a échoué.
Maintenant, sachant que vous ne pouvez pas le faire de la manière directe, c'est un bon choix pour suivre @marc_s proposition à l'aide des colonnes calculées.
OriginalL'auteur bernd_k
Au lieu de faire "c0001, c0002' pour les clients et les 's0001, s0002" pour les fournisseurs en un seul tableau, procéder de la façon suivante:
id
" Type de Données "int (10) unsigned
".type
" Type de Données "enum ('c', 's')
" (où c=Client, s=Fournisseur)."@PerformanceDBA", a souligné, vous pouvez alors faire l'Index de Clé Primaire pour les deux champs "
id
" & "type
", de sorte que votre exigence est remplie avec la bonne méthodologie.OriginalL'auteur Knowledge Craving
Ici
varchar
colonne est précédé d'un préfixe 'RX', puis suivie par001
, j'ai Donc sélectionnésubstring
après que le préfixe de incrémenté d'une unité le nombre seul.OriginalL'auteur BadhriNarayanan Mahadevan
Nous pouvons ajouter
Default Constraint Function
avec la définition de la table pour atteindre cet objectif.D'abord créer une table -
Deuxième créer de nouveaux
User Defined Function
-Troisième modifier la définition de la table pour ajouter
default constraint
-Quatrième
insert
nouvelle ligne dans la table sans spécifier de valeur pourprimary column
-Vérifier les données dans le tableau maintenant -
De SORTIE -
OriginalL'auteur DatabaseCoder
vous pouvez essayer de code ci-dessous:
OriginalL'auteur Mahbub
Pas. Si vous avez vraiment besoin de cela, vous aurez à générer de code manuellement.
OriginalL'auteur BarsMonster