Modelado, tipos y constraints
En Oracle, un schema suele corresponder a un usuario propietario de objetos. Las tablas, constraints, indices, vistas y secuencias viven dentro de schemas.
Crear tabla
sql
CREATE TABLE clientes (
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
nombre VARCHAR2(100) NOT NULL,
email VARCHAR2(150) NOT NULL,
fecha_alta DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT pk_clientes PRIMARY KEY (id),
CONSTRAINT uq_clientes_email UNIQUE (email)
);Foreign key
sql
CREATE TABLE pedidos (
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
cliente_id NUMBER NOT NULL,
total NUMBER(12,2) NOT NULL,
estado VARCHAR2(30) DEFAULT 'PENDIENTE' NOT NULL,
CONSTRAINT pk_pedidos PRIMARY KEY (id),
CONSTRAINT fk_pedidos_clientes FOREIGN KEY (cliente_id) REFERENCES clientes(id),
CONSTRAINT ck_pedidos_total CHECK (total >= 0)
);Tipos habituales
| Tipo | Uso |
|---|---|
VARCHAR2(n) | texto variable |
NUMBER(p,s) | enteros y decimales |
DATE | fecha y hora |
TIMESTAMP | fecha y hora con mas precision |
CLOB | texto grande |
BLOB | binario grande |
Identity vs sequence
Oracle moderno soporta identity:
sql
id NUMBER GENERATED BY DEFAULT AS IDENTITYTambien puedes usar sequences, muy comunes en sistemas existentes.
Buenas practicas
- Usa
VARCHAR2, noVARCHAR. - Nombra constraints.
- Usa
NUMBER(p,s)para importes. - Define
NOT NULLen campos obligatorios. - Separa schemas por responsabilidad.
Errores comunes
- Confundir usuario con schema.
- No nombrar constraints.
- Usar
DATEsin recordar que incluye hora. - Guardar importes sin precision.
- No definir claves foraneas.
