我现在一直在努力解决问题。非常感谢帮助。
这是:
我有两个数据结构,ObjClass和Obj,其中Obj是ObjClass的特化。一个Obj可能有多个“Slots”,每个都有自己的类型。 一个Obj的Slots总数是他自己的Slots和他的ObjClass Slots的联盟。这是简化的模式(如果它有语法错误,请耐心等待):
create table ObjClass(
ObjClassId integer not null primary key
)
create table Obj(
ObjId integer not null primary key,
ParentClass integer,
foreign key(ParentClass) references ObjClass(ObjClassId)
)
create table Slot(
SlotId integer not null primary key,
SlotType integer
)
我要问的是:Slot表与ObjClass OR Obj有一个1-n的关系,但从来没有。如何在SQLite上强制执行此操作?
P.S。:我猜这个问题可能是因为数据库设计不好造成的。任何有关如何使用更好的设计实现类似结构的想法也值得赞赏。
谢谢!
答案 0 :(得分:0)
你可以让两个FK指向ObjClass
和Obj
喜欢
create table Slot(
SlotId integer not null primary key,
SlotType integer,
FKColumn integer,
foreign key(SlotType) references ObjClass(ObjClassId),
foreign key(FKColumn) references Obj(ObjId)
)
编辑:
将与Obj
/ ObjClass
的关系转换为单独的中间表。创建一个中间表,引用所有3个表,如下所示。这样,每个插槽都会与ObjClass / Obj建立关联。
create table SlorforeachObjandObjClass(
SlotId integer,
ObjClassId integer,
ObjId integer,
foreign key(ObjClassId) references ObjClass(ObjClassId),
foreign key(ObjId) references Obj(ObjId),
foreign key(SlotId) references Slot(SlotId)
)