我在为占卜系统建立一个数据库。为了方便起见,我会用“我清”来解释。
六边形的每个元素都是不同的表。有一个代表阴阳,一个代表三个位置,一个代表三位一体,一个代表六边形。还有一个对应表,它与其他表格相连--阴阳对应,三个位置对应,三位一体,六边形。还有一个带有评注的表格,它还链接到其他每个表格(对应表除外)。
因此,例如,用于三叉图的表的结构可能如下:
TriID
TriName
Line1 -FK (YinYangID)
Line2 -FK (YinYangID)
Line3 -FK (YinYangID)
TrigramMeaning
Correspondence -FK (CorrespondencesID)
Commentary -FK (CommentariesID)数据如下:
TriID TriName Line1 Line2 Line3 TriMeaning Correspondence Commentary
1 Qian Yin Yin Yin Receptive 1 1
2 Kun Yang Yang Yang Generation 2 2这张对应表看上去像这样
CorrID Person Season Color Animal Number Element
1 Father Winter Blue Bear 3 Metal
2 Mother Summer Red Deer 6 Earth(我知道我所有的易经数据都错了.)
其思想是,每个表都需要相同的对应关系,因此对应表将对其他每个表都有一个条目。CorrespondencesID 1到4可能适用于YinYang表,例如(老阴和新阴、老阳和新阳),然后5到13适用于每个trigram,等等。
看来这会很好用。另一方面,直觉地感觉我做错了什么,违反了一些规则。由于对应表上的每个条目都不同,似乎每个表上都应该有类似的条目:
TrigramPerson
TrigramSeason
TrigramColor
TrigramAnimal然后
HexagramPerson
HexagramSeason
HexagramColor诸若此类。
构建数据库的智能/最佳方法是什么?很抱歉,如果这是一个愚蠢的问题--我对数据库设计还不熟悉,其中一些概念仍然把我搞糊涂了。
发布于 2013-02-06 07:25:40
我不得不再读几遍你的问题,才能明白你想做什么。我建议的是一个基于类的多连接。在一些数据库(如PostgreSQL )中,您可以对联接进行一些高级的引用完整性检查,但这不在我的回答范围之内。
假设您有一张桌子:
CREATE TABLE correspondence_class (
id int not null unique, -- hand-assigned
label text primary key, -- hand-assigned, don't want duplicate labels
);然后我们就可以:
INSERT INTO correspondence_class (id, label)
VALUES ('1', 'person'), (2, 'color'), (3, 'season'), -- and so forth从那里我们可以有另外两张桌子:
CREATE TABLE trigram_assoc (
trigram_id int references trigram(id),
c_class_id int references correspondence_class(id),
correspondence text not null,
PRIMARY KEY (trigram_id, c_class_id)
);在PostgreSQL中,您也可以更改主键以包含通信,并且只对附加到某些通信类的通信进行唯一索引。您还可以使用可推迟的约束触发器来确保所有相关的关联都被填充,但是如何在其他dbs上准确地实现这一点是一个很好的问题。
https://dba.stackexchange.com/questions/18146
复制相似问题