2011-03-30 5 views
5

me he encontrado con este código en varios lugares:Creación de un tampón con el mismo nombre que la tabla de base de datos

DEFINE BUFFER Customer FOR Customer. 

Tengo dos preguntas:

  1. Cuál es el propósito ¿de esta? ¿Por qué es beneficioso crear un buffer con el mismo nombre que la tabla?

  2. Al escribir código para acceder a esta tabla/búfer, ¿cómo sabe Progress si acceder directamente a la BD oa través del búfer?

+0

@Tom Bascom Puede saber que, él es el progreso 'Jon Skeet, lo siento si dije su nombre en vano – Kyle

Respuesta

8

1: Por lo general, se realiza para gestionar el alcance de los almacenamientos intermedios.

Si tiene, por ejemplo, un procedimiento con una serie de procedimientos internos que acceden a la misma tabla, el búfer predeterminado para esa tabla terminará en el bloque de procedimiento de nivel superior. Por ejemplo,

procedure p1: 
    find first customer no-lock. 
end. 

procedure p2: 
    find last customer no-lock. 
end. 

terminaría buscando el búfer del cliente en el procedimiento que lo contiene. Si está tratando de mantener sus procedimientos internos débilmente acoplados y autónomos, es posible que no desee este comportamiento. Entonces definirías un buffer dentro de cada uno de los procedimientos internos.

Obv hay otras razones para definir almacenamientos intermedios, pero cuando ve el código que define un búfer con el mismo nombre que la tabla, generalmente se trata de alcance.

2: Siempre accede a la base de datos a través de un búfer. Cada tabla tiene un búfer predeterminado con el mismo nombre que la tabla, por lo

find first <buffername>. 

buscará un buffer llamado buffername que puede ser un búfer definido de forma explícita o implícita un búfer predeterminado. La precedencia irá a un búfer explícitamente definido si existe.

+1

Una de las grandes ventajas que tiene esta técnica es que evita los efectos secundarios accidentales, particularmente los bloqueos de registros, de impactar en el procedimiento principal u otros procedimientos internos. –

+1

Gracias por los comentarios Gordon: esa fue una gran explicación. Entiendo la lógica detrás de esto, pero no estoy de acuerdo con la convención de nombres. Para mí, un búfer aún debe tener el prefijo "b-" o algo más para definir explícitamente que está haciendo referencia al búfer. El uso del nombre de la tabla DB como nombre del búfer solo hace que el código sea más confuso de lo necesario. – pmartin

Cuestiones relacionadas