Hola a todo el mundo. No se si este mensaje está bien escrito aquí, por si toca escribirlo en la parte de "principiantes" pero allí va.
Estoy haciendo una base de datos, y necesito crear restricciones a dos tablas por lo menos. En la vista de diseño no da esa opción y en la del asistente tampoco. Como estoy viendo, se pueden crear vistas y consultas en SQL. Quería saber si hay alguna forma de crear, o editar, la tabla en SQL para poder poner la restricción que me hace falta.
Un saludo.
Crear o editar una tabla en SQL
-
- Mensajes: 31
- Registrado: Dom Nov 23, 2008 2:46 pm
Re: Crear o editar una tabla en SQL
No sé qué quieres decir con "restricciones en una tabla", ¿podrías poner un ejemplo?
Un saludo.
Un saludo.
Re: Crear o editar una tabla en SQL
Hola.
Ante todo, gracias por la atención que me has prestado. Veras, con "restricciones" me refiero a los triggers y la sentencia "constrains" del SQL. En una de las tablas que tengo en mi base de datos, tengo una restricción, la cual es que como máximo sólo puede haber dos apuntes distintos con un subconjunto de campos con valores iguales pero las tablas tienen una relación de uno a muchos. Creo que, si presto atención y repaso, puedo respetar la restricción yo, pero mi bd la van a usar otras personas.
Lo que digo es que me interesaría saber, si es que se puede, cómo editar o crear una tabla en SQL para ver como le puedo poner esta restricción a la tabla o si esto que planteo se puede hacer de otra manera. Espero que mi explicación sea correcta y gracias de nuevo. Un saludo.
Ante todo, gracias por la atención que me has prestado. Veras, con "restricciones" me refiero a los triggers y la sentencia "constrains" del SQL. En una de las tablas que tengo en mi base de datos, tengo una restricción, la cual es que como máximo sólo puede haber dos apuntes distintos con un subconjunto de campos con valores iguales pero las tablas tienen una relación de uno a muchos. Creo que, si presto atención y repaso, puedo respetar la restricción yo, pero mi bd la van a usar otras personas.
Lo que digo es que me interesaría saber, si es que se puede, cómo editar o crear una tabla en SQL para ver como le puedo poner esta restricción a la tabla o si esto que planteo se puede hacer de otra manera. Espero que mi explicación sea correcta y gracias de nuevo. Un saludo.
-
- Mensajes: 31
- Registrado: Dom Nov 23, 2008 2:46 pm
Re: Crear o editar una tabla en SQL
No puedo ayudarte, no tengo suficientes conocimientos.
Tengo la impresión, desde mi ignorancia, que esas restricciones se pueden aplicar en consultas, y no en tablas, pero no soy una fuente fiable.
Veo que no has hecho la pregunta en la lista de correos, voy a hacerla por ti, a ver si uno de los monstruos puede ayudarte, y de paso aprendo algo nuevo.
Un saludo.
Tengo la impresión, desde mi ignorancia, que esas restricciones se pueden aplicar en consultas, y no en tablas, pero no soy una fuente fiable.
Veo que no has hecho la pregunta en la lista de correos, voy a hacerla por ti, a ver si uno de los monstruos puede ayudarte, y de paso aprendo algo nuevo.
Un saludo.
Re: Crear o editar una tabla en SQL
Hola fmartagong.
De nuevo gracias por preocuparte, aunque creo que he encontrado la solución de lo que planteo. Justo al lado de donde miraba (yo miraba en "Insertar" y es en "Herramientas") hay un editor de SQL. Me da un poco de vergüenza decirlo porque he usado las relaciones y está justo debajo. Se pueden crear las tablas y supongo que las "restricciones" también (esta que digo es una "regla de negocio"). Lo que pasa es que cuando se crean hay que escribir en SQL la tabla pero no se ve el icono de la tabla. Lo que hay que hacer luego es, en la pestaña "Ver", pinchar "Actualizar tablas" para que se vea el icono de actualizar tablas.
Tengo el problema medio resuelto. Estudié por mi cuenta el SQL, pero no lo he practicado bastante. Aunque se lo que tengo que hacer. Supongo que esto será ir probando.
Una cosilla más. Si conoces a la gente que controla con el OpenOffice, ¿sería mucho pedir que pusieran respuestas, o referencias de la lista de correos, en el foro? Es más accesible para la gente sin experiencia y, según lo entiendo yo, más visible en Internet.
Un saludo.
De nuevo gracias por preocuparte, aunque creo que he encontrado la solución de lo que planteo. Justo al lado de donde miraba (yo miraba en "Insertar" y es en "Herramientas") hay un editor de SQL. Me da un poco de vergüenza decirlo porque he usado las relaciones y está justo debajo. Se pueden crear las tablas y supongo que las "restricciones" también (esta que digo es una "regla de negocio"). Lo que pasa es que cuando se crean hay que escribir en SQL la tabla pero no se ve el icono de la tabla. Lo que hay que hacer luego es, en la pestaña "Ver", pinchar "Actualizar tablas" para que se vea el icono de actualizar tablas.
Tengo el problema medio resuelto. Estudié por mi cuenta el SQL, pero no lo he practicado bastante. Aunque se lo que tengo que hacer. Supongo que esto será ir probando.
Una cosilla más. Si conoces a la gente que controla con el OpenOffice, ¿sería mucho pedir que pusieran respuestas, o referencias de la lista de correos, en el foro? Es más accesible para la gente sin experiencia y, según lo entiendo yo, más visible en Internet.
Un saludo.
-
- Mensajes: 31
- Registrado: Dom Nov 23, 2008 2:46 pm
Re: Crear o editar una tabla en SQL
Hola de nuevo:
Hay una lista de OpenOffice, y sería buena idea que te suscribieses.
Yo coincido contigo en que para este tipo de información y/o consultas es mejor un foro de este tipo, pero hay gente que no piensa igual.
Hoy por hoy este foro está naciendo, y en la lista hay gente muy buena que no desea leer/escribir en dos sitios, así que te sugiero que hagas como yo, por ahora estoy en los dos lados y trato de resolver mis dudas y ayudar a otros en los dos sitios.
Un saludo y aquí te pongo la respuesta de ha dado Ariel Constenla-Haile
= = = = = = =
la información elemental que falta es:
¿con qué tipo de base de datos está trabajando?
¿se trata con un archivo de OOo Base (*.odb), que contiene la base de
datos embebida, es decir que los datos están dentro de ese archivo? ¿o
está empleando un verdadero RDBMS, tipo MySQL o Postgres?
Información vital, pues en HSQLDB los triggers se pueden implementar
sólo como Java classes [== hay que saber programar en Java,
http://hsqldb.org/doc/guide/ch09.html#c ... er-section](en la
próxima versión se podrán utilizar simplemente sentencias SQL
http://hsqldb.org/web/features190.html
DATA DEFINITION LANGUAGE ENHANCEMENTS
Supports full syntax of SQL TRIGGER definition for row level triggers
using SQL procedure statements (as opposed to Java classes)
CREATE TRIGGER <name> {BEFORE | AFTER}
{INSERT | DELETE | UPDATE [OF (<column name>, ..)]
ON <table name>
[ REFERENCING OLD [ROW] [AS] <old transition variable name> |
NEW [ROW] [AS] <new transition variable name>]
[FOR EACH ROW]
[WHEN (<search contition>)]
<sql procedure statement>
).
Lo mismo se aplica a los CONTRAINTS, HSQLDB tiene diferentes formas de
aplicar constricciones [sic.]:
ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>]
CHECK (<search condition>);
ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] UNIQUE
(<column list>);
CREATE [MEMORY | CACHED | [GLOBAL] TEMPORARY | TEMP | TEXT] TABLE <name>
( <columnDefinition> [, ...] [, <constraintDefinition>...] )
[ON COMMIT {DELETE | PRESERVE} ROWS];
donde constraintDefinition es
[CONSTRAINT <name>]
UNIQUE ( <column> [,<column>...] ) |
PRIMARY KEY ( <column> [,<column>...] ) |
FOREIGN KEY ( <column> [,<column>...] )
REFERENCES <refTable> ( <column> [,<column>...])
[ON {DELETE | UPDATE}
{CASCADE | SET DEFAULT | SET NULL}] |
CHECK(<search condition>)
etc.
En resumidas cuentas, no hay GUI para hacer eso (salvo para las
constricciones relacionadas con relaciones, tamaño de campos, et al.).
Debes hacerlo mediante instrucciones SQL ("Herramientas" - "SQL"), y el
contenido exacto de la instrucción depende del tipo de base de datos/
RDBMS, pues si bien SQL es estándar, cada cual hace la suya...
Hay una lista de OpenOffice, y sería buena idea que te suscribieses.
Yo coincido contigo en que para este tipo de información y/o consultas es mejor un foro de este tipo, pero hay gente que no piensa igual.
Hoy por hoy este foro está naciendo, y en la lista hay gente muy buena que no desea leer/escribir en dos sitios, así que te sugiero que hagas como yo, por ahora estoy en los dos lados y trato de resolver mis dudas y ayudar a otros en los dos sitios.
Un saludo y aquí te pongo la respuesta de ha dado Ariel Constenla-Haile
= = = = = = =
la información elemental que falta es:
¿con qué tipo de base de datos está trabajando?
¿se trata con un archivo de OOo Base (*.odb), que contiene la base de
datos embebida, es decir que los datos están dentro de ese archivo? ¿o
está empleando un verdadero RDBMS, tipo MySQL o Postgres?
Información vital, pues en HSQLDB los triggers se pueden implementar
sólo como Java classes [== hay que saber programar en Java,
http://hsqldb.org/doc/guide/ch09.html#c ... er-section](en la
próxima versión se podrán utilizar simplemente sentencias SQL
http://hsqldb.org/web/features190.html
DATA DEFINITION LANGUAGE ENHANCEMENTS
Supports full syntax of SQL TRIGGER definition for row level triggers
using SQL procedure statements (as opposed to Java classes)
CREATE TRIGGER <name> {BEFORE | AFTER}
{INSERT | DELETE | UPDATE [OF (<column name>, ..)]
ON <table name>
[ REFERENCING OLD [ROW] [AS] <old transition variable name> |
NEW [ROW] [AS] <new transition variable name>]
[FOR EACH ROW]
[WHEN (<search contition>)]
<sql procedure statement>
).
Lo mismo se aplica a los CONTRAINTS, HSQLDB tiene diferentes formas de
aplicar constricciones [sic.]:
ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>]
CHECK (<search condition>);
ALTER TABLE <tablename> ADD [CONSTRAINT <constraintname>] UNIQUE
(<column list>);
CREATE [MEMORY | CACHED | [GLOBAL] TEMPORARY | TEMP | TEXT] TABLE <name>
( <columnDefinition> [, ...] [, <constraintDefinition>...] )
[ON COMMIT {DELETE | PRESERVE} ROWS];
donde constraintDefinition es
[CONSTRAINT <name>]
UNIQUE ( <column> [,<column>...] ) |
PRIMARY KEY ( <column> [,<column>...] ) |
FOREIGN KEY ( <column> [,<column>...] )
REFERENCES <refTable> ( <column> [,<column>...])
[ON {DELETE | UPDATE}
{CASCADE | SET DEFAULT | SET NULL}] |
CHECK(<search condition>)
etc.
En resumidas cuentas, no hay GUI para hacer eso (salvo para las
constricciones relacionadas con relaciones, tamaño de campos, et al.).
Debes hacerlo mediante instrucciones SQL ("Herramientas" - "SQL"), y el
contenido exacto de la instrucción depende del tipo de base de datos/
RDBMS, pues si bien SQL es estándar, cada cual hace la suya...
Re: Crear o editar una tabla en SQL
Saludos, fmartagong.
Gracias por preocuparte y consultarlo. Yo estoy usando un archivo de OOo base. He estado probando a crear las constricciones y no había forma. Si hay que usar Java, lo tengo más complicado. Yo estudié por mi cuenta el SQL y el modelo relacional con apuntes bastante desfasados, supongo que adaptar el estándar a la versión (según la Wikipedia el SQL de HSQL es el estándar) no tiene que ser tan complicado pero me falta saber programación con Java. Sería un punto que las instrucciones se pudiera meter en SQL directamente como pasará en la siguiente versión. De todas maneras, si encuentro la solución, la escribiré.
Voy a seguir tu sugerencia y me voy a dar de alta en la lista de correo y a participar en los dos lados. Es comprensible que la gente que sabe esté concentrada en la lista, pero lo que he visto en la lista de correo es que tienen bastante nivel. Lo bueno es que se puede aprender aunque lo de enterarse al principio sea difícil.
Un saludo.
Gracias por preocuparte y consultarlo. Yo estoy usando un archivo de OOo base. He estado probando a crear las constricciones y no había forma. Si hay que usar Java, lo tengo más complicado. Yo estudié por mi cuenta el SQL y el modelo relacional con apuntes bastante desfasados, supongo que adaptar el estándar a la versión (según la Wikipedia el SQL de HSQL es el estándar) no tiene que ser tan complicado pero me falta saber programación con Java. Sería un punto que las instrucciones se pudiera meter en SQL directamente como pasará en la siguiente versión. De todas maneras, si encuentro la solución, la escribiré.
Voy a seguir tu sugerencia y me voy a dar de alta en la lista de correo y a participar en los dos lados. Es comprensible que la gente que sabe esté concentrada en la lista, pero lo que he visto en la lista de correo es que tienen bastante nivel. Lo bueno es que se puede aprender aunque lo de enterarse al principio sea difícil.
Un saludo.