Lol seba123neo
Haber chico depende, suponte que quieres la informacion (nombres, apellidos, telefonos) de distintas personas. Procedes a crear 1 sola tabla con todos los datos asumiendo que es suficiente:
SQL> CREATE TABLE DATA(
2 nombres CHAR(20),
3 apellidos CHAR(20),
4 id INTEGER,
5 PRIMARY KEY(id),
6 telefono NCHAR(20));
TABLE created.
Y vienes y quieres insertarle datos ahora:
SQL> insert into data values('Juan Manuel', 'Perez', 1, '555-2344');
1 row created.
SQL> insert into data values('Juan Manuel', 'Perez', 1, '666-3455');
insert into data values('Juan Manuel', 'Perez', 1, '666-3455')
*
ERROR at line 1:
ORA-00001: unique constraint (MARIAN.SYS_C005303) violated
Te da error porque obviamente el campo ID que es primario no accepta valores repetidos, por ende o obvias tener el campo primario o le agregas otro valor distinto a 1 pero en este caso terminarias con algo tipo:
SQL> SELECT * FROM DATA;
NOMBRES APELLIDOS ID TELEFONO
-------------------- -------------------- ---------- --------------------
Juan Manuel Perez 1 555-2344
Juan Manuel Perez 2 555-2344
Juan Manuel Perez 3 555-2344
O quizas quieras resolver rapido, y en vez de declarar el campo ID como primary key lo declares como KEY o INDEX para repetir valores y terminarias con algo tipo:
SQL> SELECT * FROM DATA;
NOMBRES APELLIDOS ID TELEFONO
-------------------- -------------------- ---------- --------------------
Juan Manuel Perez 1 555-2344
Juan Manuel Perez 1 678-2344
Juan Manuel Perez 1 777-2234
Que a la hora de consultar la tabla seria mas rapido en retornarte el valor que si hicieras JOIN con otra, pero aunque esto a nivel de optimizacion es mas rapido, te dejaria valores repetidos y redundantes en la tabla como el ejemplo expuesto anteriormente... por ende en su lugar seria favorable eliminar el campo telefono de la tabla Data y crear otra tabla que haga referencia al telefono de cada usuario.
SQL> CREATE TABLE copia(
2 id INTEGER,
3 telefono NCHAR(20));
TABLE created.
SQL> CREATE INDEX indice ON copia(id);
INDEX created.
Le insertas datos:
SQL> INSERT INTO copia VALUES(1,'666-7655');
1 ROW created.
SQL> INSERT INTO copia VALUES(1, '765-4599');
1 ROW created.
SQL> SELECT * FROM copia;
ID TELEFONO
---------- --------------------
1 666-7655
1 765-4599
Y ya tienes una tabla no desnormalizada donde puedes agregar todos los telefonos que quieras para un usuario en especifico, y consultar esos datos de retorno:
SQL> SELECT a.nombres, b.telefono FROM copia b, DATA a;
NOMBRES TELEFONO
-------------------- --------------------
Juan Manuel 666-7655
Juan Manuel 765-4599