Entradas etiquetadas como ‘Base de datos’

Cambiar la codificación de caracteres en Postgres

Apenas me sucedió que al estar trabajando un sistema con JSP y PostgreSQL (v8.3) al tratar de generar y guardar un registro que tuviera un carácter latino (para ser preciso un acento [´] ), provocaba el siguiente error:

carácter 0xc293 de codificación «UTF8» no tiene equivalente en «WIN1252»

Esto era debido a la codificación de mi base de datos (se encontraba en WIN1252) por lo que tenia que cambiarla a UTF8 o bien LATIN1, busque información en google donde encontré el siguiente link que fue de gran ayuda. Basándome en la explicación del link anterior explico como cambiar la codificación desde pgAdmin II (aunque debe ser igual desde línea de comandos) , los pasos son los siguientes:

1.- Conocer los tipos de datos soportados por PostgreSQL los encontramos en: http://www.postgresql.org/docs/8.0/interactive/multibyte.html

2.- Basándonos en la tabla ejecutar el siguiente comando en la consola SQL

   1: update pg_database set encoding=8 where datname='mibd';


 image

Donde encoding se refiere al tipo de codificación en este caso el “8” corresponde a LATIN1 y datname es el nombre de nuestra base de datos a la cual le queremos cambiar la codificación (en este caso nuestra base de datos se llama mibd).

Para identificar el tipo de encoding correspondiente a su numero entero he creado la siguiente tabla:

N° de encoding

Name

Descripción

0

SQL_ASCII

ASCII

1

EUC_JP

Japanese EUC

2

EUC_CN

Chinese EUC

3

EUC_KR

Korean EUC

4

JOHAB

Korean EUC (Hangle base)

5

EUC_TW

Taiwan EUC

6

UNICODE

Unicode (UTF-8)

7

MULE_INTERNAL

Mule internal code

8

LATIN1

ISO 8859-1/ECMA 94 (Latin alphabet no.1)

9

LATIN2

ISO 8859-2/ECMA 94 (Latin alphabet no.2)

10

LATIN3

ISO 8859-3/ECMA 94 (Latin alphabet no.3)

11

LATIN4

ISO 8859-4/ECMA 94 (Latin alphabet no.4)

12

LATIN5

ISO 8859-9/ECMA 128 (Latin alphabet no.5)

13

LATIN6

ISO 8859-10/ECMA 144 (Latin alphabet no.6)

14

LATIN7

ISO 8859-13 (Latin alphabet no.7)

15

LATIN8

ISO 8859-14 (Latin alphabet no.8)

16

LATIN9

ISO 8859-15 (Latin alphabet no.9)

17

LATIN10

ISO 8859-16/ASRO SR 14111 (Latin alphabet no.10)

18

ISO_8859_5

ISO 8859-5/ECMA 113 (Latin/Cyrillic)

19

ISO_8859_6

ISO 8859-6/ECMA 114 (Latin/Arabic)

20

ISO_8859_7

ISO 8859-7/ECMA 118 (Latin/Greek)

21

ISO_8859_8

ISO 8859-8/ECMA 121 (Latin/Hebrew)

22

KOI8

KOI8-R(U)

23

ALT

Windows CP866

24

WIN874

Windows CP874 (Thai)

25

WIN1250

Windows CP1250

26

WIN

Windows CP1251

27

WIN1256

Windows CP1256 (Arabic)

28

TCVN

TCVN-5712/Windows CP1258 (Vietnamese)

Con esta tabla sabremos que numero corresponde a que codificación siendo así, por ejemplo si quisiera cambiar la codificación de mi tabla a UTF-8 tendría el siguiente código:

   1: update pg_database set encoding=6 where datname='mibd';

 

Como pueden ver es muy sencillo espero sea de utilidad, como lo fue para mi ;).

-.-. Los comentaros son motivos para continuar con el blog .-.-

Update de utilidad: Configuración actual del sistema para no tener problemas con acentos(´) ni eñes (ñ):

PostgreSQL: LATIN1

image

Dreamweaver: charset=iso-8859-1

image

Anuncios

Modelo de Datos Entidad-Relación (E/R)

Por que nunca esta por demás

Hablaremos un poco sobre Base de datos específicamente un modelo relacional.

Antes que nada dejemos en claro algunos conceptos:

Entidad.- Objeto del mundo real sobre el que queremos almacenar información (Ej: una persona). Las entidades están compuestas de atributos que son los datos que definen el objeto (para la entidad persona serían CURP, nombre, apellidos, dirección,…). De entre los atributos habrá uno o un conjunto de ellos que no se repite; a este atributo o conjunto de atributos se le llama clave de la entidad, (para la entidad persona una clave seria CURP). En toda entidad siempre hay al menos una clave que en el peor de los casos estará formada por todos los atributos de la tabla. Ya que pueden haber varias claves y necesitamos elegir una, lo haremos atendiendo a estas normas:

  • Que sea única.
  • Que se tenga pleno conocimiento de ella.
  • Que sea mínima, ya que será muy utilizada por el gestor de base de datos.  (El CURP de una persona es muy grande y muchas veces no es conveniente usarlo como clave principal, pero para didácticas y de comprensión es aceptado)

Relación.– Asociación entre entidades, sin existencia propia en el mundo real que estamos modelando, pero necesaria para reflejar las interacciones existentes entre entidades. Las relaciones pueden ser de tres tipos:

  • Relaciones 1-1.– Las entidades que intervienen en la relación se asocian una a una (Ej: la entidad HOMBRE, la entidad MUJER y entre ellos la relación MATRIMONIO).
  • Relaciones 1-N.– Una ocurrencia de una entidad está asociada con muchas (N) de otra (Ej: la entidad EMPERSA, la entidad TRABAJADOR y entre ellos la relación TRABAJAR-EN).
  • Relaciones N-N.-Cada ocurrencia, en cualquiera de las dos entidades de la relación, puede estar asociada con muchas (n) de la otra y viceversa (Ej: la entidad ALUMNO, la entidad ASIGNATURA y entre ellos la relación MATRÍCULA). [Muchas veces nos causa conflicto este tipo de relaciones]

 

Representación gráfica de Entidades y Relaciones

Para asimilar fácilmente un diseño de datos cuando se emplea el modelo E/R se utilizan los siguientes elementos gráficos:

La utilización de estos elementos dará como resultado lo que se denomina el esquema entidad-relación de la base de datos. Los ejemplos que se incluyen en el apartado anterior, gráficamente quedarían como sigue:

 

¿Cómo se pasa del esquema E/R a las tablas?

Para cada entidad del esquema se creará una tabla con tantos campos como atributos tenga la entidad. Ejemplo:

Tabla ‘TRABAJADOR’

CURP

Nombre

ApellidoPaterno

ApellidoMaterno

…    

ZAMP680428HMCLRB04

PABLO

ZALDÍVAR.

MARTÍNEZ

ZAQE801022MDFRNL06

ELISA PAULINA

ZARAGOZA

QUINTANA

……

……

……

…….

……

 

*Como ya se menciono anteriormente, el CURP es muy grande por lo que cambiaremos la clave principal para los ejemplos por un identificador denominado DNI [Máximo 8 caracteres]

Las relaciones 1-1 se pueden reflejar incluyendo en una de las dos tablas un campo en el que poder colocar la clave del elemento de la otra tabla con el que se está relacionado. Ese nuevo campo que se incluye en la tabla recibe el nombre de clave ajena. Ejemplo:

Tabla ‘HOMBRE’

DNI

Nombre

…    

11111111

22222222

Tabla ‘MUJER’

DNI

Nombre

…    

DNI-ESPOSO

33333333

11111111

44444444

(nulo)

       Donde el campo DNI-ESPOSO es clave ajena de la tabla HOMBRE. Aquí hay que hacer notar que el campo DNI-ESPOSO puede tomar o bien un valor nulo, en el caso de aquellas mujeres que no estén casadas, o bien el valor de alguno de los DNI de la tabla HOMBRE, en el caso de las mujeres casadas; en este segundo caso, ese DNI (la clave ajena) no se deberá repetir en ningún otro registro de la tabla MUJER.

       Las relaciones 1-N se representan de forma muy parecida a como se ha explicado para las relaciones 1-1. La diferencia está en que ahora no es indiferente donde se coloque la clave ajena, esta debe estar obligatoriamente en la tabla del ‘mucho‘ (n); y además, para este caso si se permitirá que haya valores repetidos en dicho campo. Ejemplo:

Tabla ‘EMPRESA’

CIF

Nombre

…    

XX-1111-AA

YY-2222-BB

Tabla ‘TRABAJADOR’

DNI

Nombre

…    

CIF

11111111

XX-1111-AA

22222222

YY-2222-BB

33333333

YY-2222-BB

44444444

XX-1111-AA

       Para representar las relaciones N-N en tablas lo que se hace es crear una nueva tabla solamente para la relación. Esta nueva tabla tendrá dos claves ajenas y su propia clave estará formada por la unión de las claves ajenas. Ejemplo:

Tabla ‘ALUMNO’

DNI

Nombre

…    

11111111

22222222

Tabla ‘ASIGNATURA’

COD-ASIGNATURA

Nombre

…    

01

02

Tabla ‘MATRÍCULA'(esta es la relación)

DNI

COD_ASIGNATURA

CALIF

11111111

01

7.5

11111111

02

6.25

22222222

01

5.5

22222222

02

8

En la tabla MATRÍCULA es donde se refleja la relación. La clave de dicha tabla está formada por los campos DNI y COD-ASIGNATURA ; y cada uno de ellos es clave ajena, el primero de ALUMNO y el segundo de ASIGNATURA. Hacer ver aquí que la tabla MATRICULAS puede tener más campos además de los que son clave ajena como ocurre en el ejemplo; la tabla añade además un campo CALIF.

*El articulo anterior fue substraído de la fuente(1) señalada, y modificada por darkchicles para una mayor comprensión (según yo)

(1)Fuente: http://basededatos.umh.es/e_r.htm

Nube de etiquetas