作成の異なる二つのタイプのユーザー(スカーラ、リフト)
-
19-09-2019 - |
質問
私のウェブサイトを作る必要がある二種類のユーザー:学生および提供者にあります。伝統的なjavaを設定しいユーザクラス(やインターフェース)を作成して二つのクラスから継承されたユーザーです。このコースをラノ-スカラ座も、"広"と"を"すか?とする場合は、実際の最良の方法を思い、何の地図このDB?それぞれのエンターテインメントの"type"欄のなかで、で設定したのですか?
第二の質問は、どのように利用するかについて。の表示に非常に異なるタイプのユーザーはんの姿がありますいくつかの深刻なルーティングロジックの関与は少なくとも理論構築へのスニペットに。
しないといけないのではないか全質問はある"優先設定"についてこのようなレシピにレールなど)、または私のこですか。
感謝
解決
とする場合は、実際の最良の方法を思い、何の地図このDB?それぞれのエンターテインメントの"type"欄のなかで、で設定したのですか?
とは思わないが明確に"最良の方法"の設計データベース構造。の文書の答えは データベース化 や ドライ.
三つのテーブルアプローチ
一方インスタンスが作成ユーザテーブルの両方を含む種類のユーザーだけを格納する共通の属性には、学生のテーブルおよびプロバイダテーブルの外部キーにユーザテーブルと専門性のばかりでした。があるのかもしれないなどの伝統的なリレーショナルデータベース名おすすめですが、地図に近づくにつOO継承モデルです。
テーブルアプローチ
もう一つのアプローチのように使いことだということだけを"UserType"分野や店舗の両方のタイプのユーザーがユーザます。シンプルですが、そのメリットをこの機会に是非ご利用の参照整合性の関係データベースです。例えばれた"子どもに特定のテーブルのみの学生は、別の課題として、単に外部キーをStudentID場合の両方の学生や業者に住んでいユーザます。
二つのアプローチのテーブル
ご利用の場合はオブジェクト-リレーショナルマッピングの枠組みが最も簡単な道のりで地図をいただけたらと思っているオブジェクトの世界海峡のデータベースは、学部の学生テーブルおよびプロバイダテーブル、エクスプレスの共通性と二分しているのではなく、実践Scalaます。
このリフト チートシート:
を定義するモデル
リフトまたはマップされたモデルの定義に基づくレッスンが受講できます。
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
}
}
議論を 共通基盤性のためのモデル.
のスレッドデビッド-Pollak書き込みます:
探している一部のスカーラの魔法:
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]