2009-11-09 11 views
8

Estoy aprendiendo Rails creando un sitio simple donde los usuarios pueden crear artículos y comentar sobre esos artículos. Tengo una vista que enumera los artículos y comentarios más recientes de un usuario. Ahora me gustaría agregar 'perfiles' de usuario donde los usuarios pueden ingresar información como su ubicación, edad y una breve biografía. Me pregunto si este perfil debería ser un modelo/recurso separado (ya tengo muchos campos en mi modelo de usuario porque estoy usando Authlogic y la mayoría son campos opcionales).¿El perfil de un usuario debe ser un modelo separado?

¿Cuáles son los pros y los contras de usar un recurso separado?

+0

Vea también: http://softwareengineering.stackexchange.com/questions/241089/keep-user-and-user-profile-in-different-tables – Jon

Respuesta

2

Lo mantendría separado. No todos sus usuarios querrían completar un perfil, por lo que serían campos vacíos que se ubicarían en su tabla de usuarios. También significa que puede cambiar los campos de perfil sin cambiar la lógica de su modelo de usuario.

4
  • Pros: Simplifica cada modelo
  • Contras: La gestión de 2 a la vez es un poco más difícil

Básicamente se reduce a lo grande el usuario y el perfil son. Si el usuario tiene 5 campos y el perfil 3, no tiene sentido. Pero si el usuario tiene 12 campos y el perfil 20, entonces definitivamente debería.

+0

¿Por qué debería "definitivamente" dividirlos si cada uno tiene un muchos campos? – Aaron

0

Depende del ancho de la tabla de usuarios existente. Las bases de datos generalmente tienen un límite en el número de bytes que un recirculado puede contener. Si estás cerca (o sobre lo que normalmente puedes hacer si tienes muchos campos con valores nulos) del límite, agregaría una tabla con una relación de uno a uno para un mejor rendimiento y una probabilidad menor de un registro que de repente no se puede insertar ya que hay demasiados datos para el tamaño de fila. Si no está cerca del límite, agregue a la tabla existente.

4

Creo que lo mejor sería poner en un modelo separado. Piense en cómo los modelos corresponden a las tablas de la base de datos, y luego cómo los lee para los diversos casos de uso que admite su aplicación.

Si un usuario solo se sumerge en su perfil real de vez en cuando, pero el modelo de Usuario se accede con frecuencia, definitivamente debe convertirlo en un objeto separado con una relación de uno a uno. Si los datos de perfil son necesarios cada vez que se necesitan datos de usuario, usted podría desea pegarlos en la misma tabla.

Quizás la ubicación sea necesaria cada vez que muestre al usuario (por ejemplo, en un comentario que dejaron), pero ¿la biografía debe ser un modelo diferente? Tendrá que descubrir el desglose correcto, pero la regla general es estructurar las cosas para que no tenga que extraer datos que no se estén utilizando de inmediato.

4

Recomendaría mantener columnas de perfil en el modelo de Usuario para mayor claridad y simplicidad. Si encuentra que solo está usando ciertos campos, solo seleccione las columnas que necesita usando: seleccione.

Si más adelante descubre que necesita una tabla por alguna razón (por ejemplo, un usuario puede tener múltiples perfiles) no debería ser demasiado trabajo dividirlos.

He cometido el error de tener dos tablas y no me ha comprado otra cosa que la complejidad adicional.

+0

He tenido exactamente la misma experiencia. – Aaron

3

Un usuario "posee" varios recursos en su sitio, como comentarios, etc. Si separa el perfil del usuario, entonces es solo un recurso más. El usuario es estático, mientras que el perfil cambiará de vez en cuando.

Separarlo también le permitirá mantener fácilmente un historial de perfil.

Cuestiones relacionadas