事
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
。
Abstract Object types
Event
Event
有一個detail
property
及三個multi
link
用來協助記錄相關的人時地。由於when
是EdgeDB
語法的關鍵字,所以必須使用加上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_number
的default
,可以在每次insert
新Scene
時,自動產生編號。其中introspect
是不可省略的關鍵字,原因是sequence_next()
接收的參數必須是ScalarType
。詳細的說明可以參考Easy EdgeDB chapter13。
此外,由於我們可能會常順向或逆向存取Scene
,所以替scene_number
加上了index
。