Pregunta

Estoy creando un sitio web que tendrá dos tipos de usuarios: estudiantes y proveedores. En un entorno java tradicional me gustaría crear una clase de usuario (o interfaz) y luego crear dos clases que heredan de usuario. Es este el mejor curso de Scala también, utilizando la "extiende" y "con" modificadores? Si ése es de hecho la mejor manera (y sospecho que lo es), cuál es la mejor manera de asignar este en el PP? ¿Sería mejor para mantener una columna "tipo" y luego lo han puesto a uno o el otro?

La segunda pregunta es cómo trabajar con la vista. La pantalla será muy diferente dependiendo de qué tipo de usuario es uno y por lo que la figura habrá alguna lógica de encaminamiento grave implicado o al menos la lógica incorporada en fragmentos en la vista.

Supongo que la pregunta fundamental es: ¿Hay una manera "preferido" para ir haciendo esto (como una receta en rieles o algo así), o soy del tipo en mi propia

?

Gracias

¿Fue útil?

Solución

  

Si ése es de hecho la mejor manera (y sospecho que lo es), cuál es la mejor manera de asignar este en el PP? ¿Sería mejor para mantener una columna "tipo" y luego lo han puesto a uno o el otro?

No creo que hay una clara "la mejor manera" para diseñar la estructura de base de datos en una situación dada. La respuesta de libro de texto es normalización de bases de datos y DRY .

Tres tablas se aproximan

Una forma, por ejemplo, podría ser la creación de la tabla de usuario que contiene ambos tipos de usuarios, almacenar sólo los atributos comunes, y crear tabla de alumnos y mesa con proveedor clave externa a la tabla de atributos de usuario y especializados, si los hubiere. Esto probablemente no es lo que recomendaría una persona tradicional base de datos relacional, pero los mapas más cerca del modelo de herencia OO.

Uno de los enfoques tabla

Otro enfoque como usted ha dicho, sería simplemente crear un campo "UserType" y almacenar ambos tipos de usuarios en la tabla de usuario. Es muy sencillo, pero que luego se pierda la oportunidad de tomar ventaja de la integridad referencial de la base de datos relacional. Por ejemplo, si usted fuera a crear tabla secundaria específica solamente con el estudiante, como tarea, no se puede simplemente hacer clave externa a studentID si los estudiantes y los proveedores vivían en la tabla de usuario.

Dos tablas se aproximan

Si está utilizando el marco de mapeo relacional de objetos, probablemente la forma más fácil de hacerlo es delinear exactamente lo que quiere en el estrecho mundo de los objetos en la base de datos, lo que sería tener Tabla de alumnos y la tabla de proveedores, y expresar el carácter común de dos como rasgo en lado Scala.

He encontrado Ascensor hoja de trucos :

  

Definición de Modelos

     

ascensor O-R mapeado modelos se definen basándose en una clase de campos.

class WikiEntry extends KeyedMapper[Long, WikiEntry] {
  def getSingleton = WikiEntry // what's the "meta" object
  def primaryKeyField = id

  // the primary key
  object id extends MappedLongIndex(this)

  // the name of the entry
  object name extends MappedString(this, 32) {
    override def dbIndexed_? = true // indexed in the DB
  }

  object owner extends MappedLongForeignKey(this, User)

  // the text of the entry
  object entry extends MappedTextarea(this, 8192) {
    override def textareaRows  = 10
    override def textareaCols = 50
  }
}
  

discusión en tener rasgos básicos comunes para los modelos .

En el hilo David Pollak escribe:

  

Usted está en busca de un poco de magia Scala:

trait Posting[MyType <: Mapper[MyType]] { // Defines some common fields for posted user content 
  self: MyType => 
  def primaryKeyField = id 
  object id extends MappedLongIndex(this) 
  object creator extends MappedLongForeignKey(this, User) 
  object createdAt extends MappedLong(this) { 
    override def defaultValue = System.currentTimeMillis 
  } 
} 

class FooPosting extends KeyedMapper[FooPosting] with Posting[MyType]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top