2
我正在使用Slick創建一個應用程序,該應用程序存儲一串關於Hsqldb數據庫中歌曲的記錄。有沒有辦法在Slick中創建一個聚類索引?
目前我的表被定義爲:
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。