2014-10-29 4 views
2

나는 슬릭 (Slick)을 사용하여 Hsqldb 데이터베이스에있는 노래에 관한 많은 레코드를 저장하는 응용 프로그램을 만듭니다.Slick에서 Clustered Index를 만드는 방법이 있습니까?

abstract class DBEnum extends Enumeration { 

    def enum2StringMapper(enum: Enumeration) = MappedJdbcType.base[enum.Value, String](
    b => b.toString, 
    i => enum.withName(i)) 
} 

class Artist(tag: Tag) extends Table[(Int, String)](tag, "ARTIST") { 

    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc) 
    def name = column[String]("NAME", O.NotNull) 

    def nameIndex = index("NAME_IDX", name, unique = true) 

    def * = (id, name) 
} 

class Song(tag: Tag) extends Table[(Int, String, Int)](tag, "SONG") { 

    def id = column[Int]("ID", O.PrimaryKey, O.AutoInc) 
    def name = column[String]("NAME", O.NotNull) 
    def artistId = column[Int]("ARTIST_ID") 

    def artistFk = foreignKey("ARTIST_FK", artistId, TableQuery[Artist])(_.id) 

    def idNameIndex = index("ID_NAME_IDX", (id, name), unique = true) 

    def * = (id, name, artistId) 
} 

object BroadcastType extends DBEnum { 

    implicit val BroadcastTypeMapper = enum2StringMapper(BroadcastType) 

    type BroadcastType = Value 
    val PLAYED = Value("Played") 
    val NOW = Value("Now") 
    val NEXT = Value("Next") 
} 

class Broadcast(tag: Tag) extends Table[(Int, Timestamp, BroadcastType.BroadcastType)](tag, "BROADCAST") { 

    def songId = column[Int]("SONG_ID") 
    def dateTime = column[Timestamp]("DATE_TIME") 
    def broadcastType = column[BroadcastType.BroadcastType]("BROADCAST_TYPE") 

    def pk = primaryKey("BROADCAST_PK", (songId, dateTime)) 

    def songFk = foreignKey("SONG_FK", songId, TableQuery[Song])(_.id) 

    def * = (songId, dateTime, broadcastType) 
} 

난 아직도 그냥 올바른 있는지 확신하지 일을하고 있어요 그러나 희망 당신은 아이디어를 얻을 :

현재 내 테이블로 정의됩니다.

이제는 복합 기본 키를 브로드 캐스트 테이블에 보관하고 타임 스탬프에 클러스터 된 인덱스를 만들고 싶습니다. 해당 테이블에 대한 대부분의 쿼리는 타임 스탬프 범위로 필터링됩니다. 행은 증가하는 시간 소인과 함께 삽입되어 실제 순서를 유지하기위한 레코드의 최소 교체가 있습니다.

Slick에서 클러스터 된 인덱스를 만들 수있는 추상화가 있습니까? 지금까지 일반 SQL을 사용하는 것으로 되돌아 가야 할 것처럼 보입니다.

답변