Skip to content

Full schema preview
initial_schema/entity/entity.esdl
# scalar types
scalar type SceneNumber extending sequence;

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

# object types
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);
}

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用來協助記錄相關的人時地。由於whenEdgeDB語法的關鍵字,所以必須使用加上backtick的`when`。

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

Object types

Scene

Scene extending Event而來,用來記錄各場景資訊,其有四個property

  • title property為標題。
  • remarks property為註解。
  • references property為參考資料連結。
  • scene_number property為自動產生編號的計數器。
    • constraint exclusive確保不會有重覆的編號。
    • sequence_next()作為scene_numberdefault,可以在每次insertScene時,自動產生編號。其中introspect是不可省略的關鍵字,原因是sequence_next()接收的參數必須是ScalarType。詳細的說明可以參考Easy EdgeDB chapter13

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

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);
}