gpt4 book ai didi

sql - 使用关系数据库为代数数据类型建模

转载 作者:行者123 更新时间:2023-12-04 04:25:03 25 4
gpt4 key购买 nike

假设您正在使用 OCaml/F#/SML/Haskell 编写应用程序,并希望将数据保存在关系数据库中。将产品类型(记录和元组)映射到关系很容易,但是如何将变体类型映射到关系呢?

具体来说,您将如何在关系数据库中持久化如下所示的类型?

(* OCaml *)
type t =
| Foo
| Bar of string
| Baz of int * int * int

最佳答案

这看起来很乏味,但我会为总和中的每个产品创建一个表格。

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);
如果你更严格,你可以想象存储一个 ty列与
类型的名称并使用它来构造复合外键。 (作为
"Where Not to Use Table Inheritance" 下描述在 LedgerSMB 博客中。)

关于sql - 使用关系数据库为代数数据类型建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33213022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com