iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
Software Development

一起看無間道學EdgeDB系列 第 13

[Day13] - 初始schema:事

  • 分享至 

  • xImage
  •  

Scalar types

SceneNumber

SceneNumber extending sequence而來,作為場景的計數器。需要留意的是每一個sequence可以被多個property呼叫,共享同一個計數器。如果單一property需要獨立的計數器,需要各別extending sequence生成特定的sequence

scalar type SceneNumber extending sequence;

Abstract Object types

Event

Event有一個detail property及三個multi link用來協助記錄相關的人時地。

abstract type Event {
    detail: str;
    multi who: Character;
    multi `when`: FuzzyTime;
    multi where: Place;
}

由於when是EdgeDB語法的關鍵字,所以必須使用加上backtick的`when`。這邊需要留意,一旦使用backtick,那麼以後所有的EdgeQL操作中,引用到此property時或link時都要繼續使用backtick,也就是以後所有的query中,都必須使用`when`,而非when。使用者需要視習慣,決定使用此語法或另外命名一個例如when_的名字。

Object types

Scene

Scene extending Event而來,用來記錄各場景資訊。

type Scene extending Event {
    title: str;
    remarks: str;
    references: array<tuple<str, str>>;
    required scene_number: SceneNumber {
        constraint exclusive;
        default := sequence_next(introspect SceneNumber);
    }
    index on (.scene_number);
}

其有四個property

  • title property為標題。
  • remarks property為註解。
  • references property為參考資料連結。
  • scene_number property為自動產生編號的計數器。
    • constraint exclusive確保不會有重覆的編號(註1)。
    • sequence_next()作為scene_numberdefault,可以在每次insertScene時,自動產生編號(註2)。其中introspect是不可省略的關鍵字,原因是sequence_next()接收的參數必須是ScalarType,詳細的說明請參考Easy EdgeDB 第十三章introspection是一個非常強大可以輔助探索EdgeDB內部的工具,但對於初學者而言,可能只會在使用sequence時才會遇到,所以這邊我們省略不提。

此外,由於我們可能會常順向或逆向存取Scene,所以替scene_number加上了index(註3)。

備註

註1:這邊比較有趣的一點是,exclusive有提到Scalar type definitions cannot include this constraint.,但是sequence的範例卻是可以加上exclusive constraint

註2:根據sequence的範例,或許此default := sequence_next(introspect SceneNumber);可以省略。

註3:一般而言,EdgeDB會隱性地將擁有exclusive constraintproperty加上index,所以理論上,我們可能不需要自己再加一次。但是因為註1的原因,為保險起見,我們於此處顯性地加上index on (.scene_number);

參考資料

無間EdgeDB初始schema:事


上一篇
[Day12] - 初始schema:地
下一篇
[Day14] - 首幕:韓琛初現
系列文
一起看無間道學EdgeDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言