假设您正在OCaml / F#/ SML / Haskell中编写应用程序,并希望将数据保存在关系数据库中。将产品类型(记录和元组)映射到关系很容易,但是如何将变体类型映射到关系?
具体来说,如何在关系数据库中保留类似下面的类型?
(* OCaml *)
type t =
| Foo
| Bar of string
| Baz of int * int * int
答案 0 :(得分:3)
这似乎很乏味,但我会为每个产品创建一个表格。
android:scaleType="fitCenter"
您可能希望存储一些元数据以及每种类型的记录:
CREATE TABLE foo (id uuid PRIMARY KEY);
CREATE TABLE bar (id uuid PRIMARY KEY,
s text NOT NULL);
CREATE TABLE baz (id uuid PRIMARY KEY,
a integer NOT NULL,
b integer NOT NULL,
c integer NOT NULL);
这表明了一个外键约束:
CREATE TABLE envelope (id uuid PRIMARY KEY,
t timestamptz NOT NULL DEFAULT now(),
by text NOT NULL DEFAULT sessions_user);
如果你更严格,你可以想象存储一个CREATE TABLE foo (id uuid PRIMARY KEY REFERENCES envelope);
CREATE TABLE bar (id uuid PRIMARY KEY REFERENCES envelope,
s text NOT NULL);
CREATE TABLE baz (id uuid PRIMARY KEY REFERENCES envelope,
a integer NOT NULL,
b integer NOT NULL,
c integer NOT NULL);
列
类型的名称并使用它来构造复合外键。 (如
在LedgerSMB博客的"Where Not to Use Table Inheritance"下描述。)