【发布时间】:2022-01-18 23:17:08
【问题描述】:
我已经看到了多种解决方案,但它们似乎并不完全适合我的情况,或者至少我仍然希望有更好的解决方案。
在我的数据库中有以下表格“地点”、“动物”和“人”。目前我有表“hasAnimal”和“hasPeople”,但多态方法“hasBeing”会更合理。但我想链接外键;但一个不能链接两个外键 - 据我所见。
我应该如何解决多态问题?
我对数据库了解不多,所以解决方案可能很明显。
我现在将添加更多信息,以防我的书面问题/解释没有包含足够的信息
CREATE TABLE "persons" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
"firstname" TEXT NOT NULL,
"surename" TEXT
)
CREATE TABLE "animals" (
"name" TEXT NOT NULL UNIQUE,
"description" TEXT NOT NULL,
"movementLocations" INTEGER NOT NULL,
"movementPlaces" INTEGER,
"groupsize" INTEGER NOT NULL,
"link" TEXT,
PRIMARY KEY("name")
)
CREATE TABLE "places" (
"name" TEXT NOT NULL UNIQUE,
"description" TEXT NOT NULL,
PRIMARY KEY("name")
)
CREATE TABLE "hasPerson" (
"id" TEXT NOT NULL,
"place" TEXT NOT NULL,
FOREIGN KEY("id") REFERENCES "persons"("id"),
FOREIGN KEY("place") REFERENCES "places"("name"),
PRIMARY KEY("id","place")
)
CREATE TABLE "hasAnimal" (
"name" TEXT NOT NULL,
"place" TEXT NOT NULL,
PRIMARY KEY("name","place"),
FOREIGN KEY("name") REFERENCES "animal"("name")
)
woulbe-table(Being 是动物和人的父母)
CREATE TABLE "hasBeing" (
"name" TEXT NOT NULL,
"place" TEXT NOT NULL,
PRIMARY KEY("name","place"),
FOREIGN KEY("name") REFERENCES "animal"("name") OR "person"("id")
)
为什么我认为使用“hasBeing”更好? 因此,我不是用两张表来描述一个人在一个地方,而是可以用一张来代替。为了让所有众生都在一个地方,我不再需要跑过 2 张桌子。如果“将属于的东西放在一起并合并相似的关系是好的”假设是错误的,我将接受解释作为答案并重新提出问题。
【问题讨论】:
-
嗨 - 你是基于什么断言“多态方法“hasBeing”会更合理”?
-
我在问题中添加了解释,因为我确实错过了。
标签: sql sqlite foreign-keys