SQLite表有两个FK,但一次只有一个

时间:2014-07-19 00:21:42

标签: sql sqlite foreign-keys

我现在一直在努力解决问题。非常感谢帮助。

这是:

我有两个数据结构,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。:我猜这个问题可能是因为数据库设计不好造成的。任何有关如何使用更好的设计实现类似结构的想法也值得赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以让两个FK指向ObjClassObj喜欢

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)
)