2011-08-05 23 views

Respuesta

3

Las tablas son generalmente cruciales para la interacción de un usuario con la base de datos. En consecuencia, la ausencia de tablas es fatal.

De esto se deduce, que la creación de tablas sobre la marcha, en tiempo de ejecución, es una mala práctica, ya que significa que no hay garantía de la experiencia del usuario. Si una instrucción CREATE TABLE falla, por cualquier razón, el usuario está relleno.

lo tanto, es q buena idea para evitar los procesos de negocio que se basan en la creación de tiempo de ejecución de las tablas. Generalmente hay soluciones temporales, excepto en circunstancias muy específicas.

En cierta medida esto depende del sabor de RDBMS que se basa la solicitud. Por ejemplo, Oracle tiene el concepto de Global Temporary Tables que elimina la solicitud de creación dinámica de tablas en casi todas las circunstancias. Pero incluso sin tales características sofisticadas, generalmente hay formas de evitarlo: por ejemplo, agregar una columna USERNAME a una tabla y construir una vista en la parte superior que incluya una cláusula WHERE filtrando en USERNAME=USER.

Básicamente, DDL es caro para ejecutar, en términos de tiempo transcurrido y los recursos del sistema. Crea complejidad transaccional. Y es arriesgado: si falla, el usuario no puede continuar. Entonces, por todas estas razones, debe evitarse.

3

En general, no, no es una buena idea. Normalmente, lo que sea que estén creando serían registros dentro de una tabla.

pero hay excepciones, por ejemplo, si va a crear una cuenta de alojamiento para ellos, con las tablas que a continuación van a utilizar personalmente.

Sin dar más detalles sobre su situación, no puedo darle una mejor respuesta que esa.

+0

por ejemplo, una aplicación de cuestionario de estilo CMS.Si un usuario crea un cuestionario, me pregunto si vale la pena crear dinámicamente una tabla que contenga específicamente los "tipos" de su pregunta (booleana, cadena int) en lugar de tenerla genérica para todos los diferentes cuestionarios. –

+1

Para ese propósito, no cree tablas, terminará con demasiadas tablas. Hay formas de estructurar una base de datos para manejar tipos dinámicos. Lo más fácil es tener varias tablas, una para cada tipo, luego en la tabla principal se incluye la clave externa más el nombre de la tabla remota para vincular. No puede establecer una relación formal en la estructura de la base de datos entre ellos, pero puede hacerlo usted mismo con una serie de consultas UNION con combinaciones para cada tipo. – Ariel

0

En cuanto a SQL-Server, es una práctica muy común crear temp-tables, variables de tabla, usar funciones con valores de tabla, etc. Por ejemplo, se haría en un procedimiento almacenado de base de datos llamado por su web solicitud.

No hay ninguna regla dura y rápida que sé si eso dice que es bueno o malo - depende de la situación.

0

que supongo que está haciendo algo como esto:

table_username(
id, 
userfield1, 
userfield2, 
ect... 
) 

Una alternativa sería la creación de una tabla estática, así:

table_userfields(
id 
userid 
fieldname 
fieldvalue 
) 

El único problema es que el valor del campo probablemente tendría que ser un varchar grande

Pero su enfoque no es incorrecto, depende de sus necesidades específicas.

+0

que no parece muy eficiente. –

+0

@ mark-w No es para su cuestionario scenerio ... Pensé que solo quería guardar algunos ajustes específicos del usuario. – AJC

0

En general, no es una buena idea a menos que todos los usuarios sean buenos modeladores de datos. La mayoría de los usuarios no son buenos diseñadores de bases de datos. El usuario promedio no pensará en cosas como hacer la elección correcta de tipos de datos y claves, diseñar esquemas de codificación, analizar dependencias o aplicar principios de normalización. Crear buenos modelos de datos es difícil, por lo que tiende a dejarse en manos de especialistas.

+0

el usuario no estaría creando la tabla. Se realizaría en segundo plano con controles estrictos y en un cierto nivel de encapsulación. –

Cuestiones relacionadas