162 votes

Pourquoi les noms de table/colonne/index Oracle sont-ils limités à 30 caractères ?

Je peux comprendre qu'il y a de nombreuses années, il y ait eu ce type de limitation, mais aujourd'hui, cette limite pourrait facilement être augmentée. Nous avons des conventions de dénomination pour les objets, mais il y a toujours un cas où nous atteignons cette limite - en particulier dans la dénomination des clés étrangères.

Quelqu'un sait-il pourquoi cette taille n'est pas plus grande - ou est-elle plus grande en 11g ?


Apparemment, la réponse est que cela brisera les scripts actuels qui ne sont pas codés de manière défensive. Je pense que c'est une chose très inquiétante, Oracle essaie d'être les la base de données, c'est certainement le genre de chose que vous devez constamment améliorer, sinon votre produit mourra de mille coupures.

Chaque fois que je vois ce genre d'objection en interne, je me dis qu'il est temps de prendre les devants et de régler le problème. Si les gens utilisent des scripts qu'ils ne vérifient pas ou ne maintiennent pas lorsqu'ils mettent à jour les versions d'Oracle, qu'ils subissent les conséquences de ce choix. Fournissez-leur un drapeau de compatibilité, augmentez la taille à 4000, et épargnez-moi la perte de temps, lorsque je crée des objets, de devoir constamment compter jusqu'à 30 pour vérifier que le nom est "OK".

75voto

cagcowboy Points 13721

Je crois qu'il s'agit de la norme ANSI.

EDIT :

En fait, je pense qu'il s'agit de la norme SQL-92.

Une version ultérieure de la norme semble prévoir la possibilité d'utiliser des noms de 128 caractères, mais Oracle ne la prend pas encore en charge (ou la prend partiellement en charge, dans la mesure où elle autorise 30 caractères ).

Recherche de "F391, Identificateurs longs" sur cette page... http://stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/ap_standard_sql001.htm

(A la recherche d'un référent)

46voto

Justin Cave Points 114578

Outre l'argument de cagcowboy selon lequel cela découle de la norme SQL (historiquement, je soupçonne que la décision d'Oracle a conduit à la norme SQL puisque Oracle a précédé la normalisation de SQL), je parierais qu'une grande partie de la réticence à autoriser des identifiants plus longs vient de la réalisation qu'il y a des millions de DBA avec des millions de scripts personnalisés qui supposent tous que les identifiants ont une longueur de 30 caractères. Autoriser chaque ligne de code qui ressemble à quelque chose comme

  l_table_name VARCHAR2(30);
BEGIN
  SELECT table_name
    INTO l_table_name
    FROM dba_tables
   WHERE ...

de se briser soudainement parce que le DBA d'il y a 15 ans a utilisé VARCHAR2(30) au lieu de DBA_TABLES.TABLE_NAME%TYPE dans le script provoquerait une révolte massive. Je parierais qu'Oracle compte à lui seul des milliers d'endroits où ce genre de choses a été fait au fil des ans dans divers paquets et composants. L'adaptation de tout ce code existant pour qu'il prenne en charge des identificateurs plus longs constituerait un projet énorme qui générerait presque à coup sûr manière Les coûts liés au temps des développeurs, au temps de l'assurance qualité et aux nouveaux bogues sont plus élevés que les bénéfices.

16voto

Kanmuri Points 394

Je me suis renseigné et j'ai trouvé cette question sur Google, mais j'ai également découvert qu'à partir d'Oracle 12c Release 2 (12.2), ce n'est plus strictement le cas. ( https://oracle-base.com/articles/12c/long-identifiers-12cr2 )

À un moment ou à un autre, chaque administrateur de bases de données ou développeur aura rencontré un problème lié à la limite de 30 caractères pour les noms d'objets. Cette limite peut être extrêmement pénible lors de projets de migration de SQL Server ou MySQL vers Oracle. Dans Oracle Database 12cR2, la longueur maximale de la plupart des identifiants est désormais de 128 caractères.

Il s'agit d'une nouvelle fonctionnalité dans la version 12.2, selon ( http://blog.dbi-services.com/oracle-12cr2-long-identifiers/ ). D'après ce billet, la version 12.1 était toujours limitée à 30 caractères.


Edit : Voici un lien vers la documentation officielle d'Oracle expliquant le changement. ( https://docs.oracle.com/cloud/latest/exadataexpress-cloud/CSDBF/longer-identifier-names.htm#CSDBF-GUID-F4CA155F-5A37-4705-8443-0A8C9E3F875C )

À partir d'Oracle Database 12c Release 2 (12.2), la longueur maximale des noms d'identifiant pour la plupart des types d'objets de base de données a été augmentée à 128 octets.

6voto

Lorenzo Gatti Points 493

Compte tenu de la nécessité pratique de limiter la longueur des identificateurs, une bonne conception consiste à restreindre la longueur des noms réels afin d'éviter d'atteindre le plafond lorsque les noms sont combinés entre eux et avec des préfixes et des suffixes.

Par exemple, une convention pour nommer les contraintes de clés étrangères

FK_<table1>_<table2> 

limite les noms de tables à 13 caractères ou moins ; la plupart des bases de données auront besoin de plus de préfixes et de suffixes, ce qui limitera encore la longueur des noms de tables.

6voto

Mac Points 66

Toutes ces "contraintes" sont des réponses résiduelles aux limitations imposées par les architectures de processeurs datant des années 70. Depuis lors, les processeurs ont évolué au point que ces limitations ne sont plus nécessaires ; elles sont simplement restées en suspens. Cependant, les modifier est une grosse affaire pour les auteurs de SGBDR. Comme ces limites de longueur affectent tout en aval, le fait de les modifier bon gré mal gré pour tenir compte d'un nom de procédure plus long peut entraîner, et entraînera probablement, la rupture de nombreux autres éléments, tels que les rapports d'exception, le dictionnaire de données, etc. Cela nécessiterait une réécriture majeure du SGBDR Oracle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X