Code Conventions

= Joko Code Conventions =

Java
Las convenciones de código que adoptamos, empiezan por las de Oracle: Oracle Code Conventions, a las que agregamos algunas que tienen que ver con la fuerte influencia que tenemos de Spring Framework

= Convenciones relacionadas a Bases de Datos=

PostgreSQL
Estas son recomendaciones, para las tablas creadas. En caso de que sean tablas que se importan de otro proyecto, y sea conveniente dejarlas igual para migración de datos, puede utilizarse la tabla tal cual viene del otro modelado
 * 1) Nombre de tablas en singular
 * 2) Nombre de columnas en singular
 * 3) Utilizar underscore para separador de palabras (en lugar de guión)
 * 4) Evitar el uso de palabras reservadas https://www.postgresql.org/docs/9.5/static/sql-keywords-appendix.html
 * 5) Utilizar siempre claves primarias surrogadas de tipo bigserial, inclusive para tablas cuyas columnas sean sólo relaciones a otras tablas. Facilita el uso de ORM. Las ventajas de utilizar Bigserial son varias: genera automáticamente una secuencia con el formato {NOMBRE_TABLA}_{NOMBRE_PK}_SEQ, los inserts se pueden realizar obviando el campo de la PK, y automáticamente asigna el default value que es el sgte. valor de la secuencia. El tipo de dato final que queda en la tabla es BIGINT.
 * 6) Para tablas que estén formadas sólo por relaciones a otras tablas, utilizar constraints compuestos de tipo unique
 * 7) Para columnas que contendrán lista de valores, utilizar contraints con la lista de posibles valores
 * 8) Para claves foráneas (Foreign Key) utilizar el formato: fk_{TABLA_ORIGEN}_{TABLA_DESTINO}_{NOMBRE_COLUMNA_DESTINO}
 * 9) El nombre de la clave primaria debe ser con el siguiente formato, tabla: usuario, pk: usuario_id
 * 10) Las vistas deben tener el prefijo v_ . Ejemplo: v_usuarios_roles
 * 11) Las funciones deben tener el prefijo f_
 * 12) Si las funciones retornan un resultado compuesto, no escalar, este debe ser una vista o un dato abstracto definido en la base de datos
 * 13) Evitar tener el mismo nombre para un schema, una tabla y un campo. Buscar que el esquema tenga un nombre que agrupe a los conceptos.
 * 14) Tablas que representen conceptos técnicos se recomienda nombrarlas en inglés ya que es el que más se encontrará en las literaturas e internet
 * 15) Las columnas para fecha se guardan SIN TIMEZONE, el timezone es una información de localización no un dato, de ser necesario se debe guardar en otra columna el timezone. Más información aquí