0
我想捕捉關係數據庫中的子類/超類關係的概念。如果我開始建模子類/超類,同時保持關係完整性
abstract class A {
id: UUID
}
class B extends A {
data: String
}
class C extends A {
data: Int
}
我可以寫:
create table taba (id uuid not null unique, typ char not null);
create table tabb (id uuid not null unique references taba(id),
data varchar);
create table tabc (id uuid not null unique references taba(id),
data int);
及其關係完整性在一個方向上由所述references
子句保證:每派生的實例B或C必須有其基本實例A.
但是另一個方向呢?我想保證每個基本實例A都有其派生實例B或C,並且理想情況下它與給定的typ
匹配。
我想過做它在一個單一的表,如下所示:
create table taball (id uuid not null unique, typ char not null,
b_data varchar,
c_ data int);
但似乎open/closed principle違反:我添加了一個新的子類每一次,我不得不重寫taball。
我不知道這是否可能(特別是因爲在實際插入過程中必須違反完整性),但是我會很感激任何建議嗎?
數據庫用於組織和表示共享狀態。對象應該將狀態和抽象封裝在其表示中,以關注接口和責任。數據庫用於狀態,OOP用於狀態機。這兩個概念是正交的,如果你將它們混爲一談,你將不會從中獲益。 – reaanb