我面临一个问题。我必须设计一个数据库模式表结构。通常,我有一个具有一对多关系的小型分层树结构:
A
|-B1
| |-C1
| |-C2
|
|-B2
|-C3
|-C4
现在,从我的角度来看,我有两个选择来设计这个:
对于 A 和 B,我可以创建两个表,而直接通过外键
table_a
引用。table_a
我认为,这可能是更好的方法,因为您将需要更少的查询连接操作。CREATE TABLE table_a ( id int PRIMARY KEY, some_specific_data text ); CREATE TABLE table_b ( id int PRIMARY KEY, some_other_specific_data text, id_parent int REFERENCES table_a(id) );
对于 A 和 BI 可以创建两个独立的表和一个连接两个表的附加关系表(就像我对多对多关系所做的那样)。在这里,两个表都更加独立,我认为这通常是可取的。
CREATE TABLE table_a ( id int PRIMARY KEY, some_specific_data text ); CREATE TABLE table_b ( id int PRIMARY KEY, some_other_specific_data text ); CREATE TABLE a_to_b ( id int PRIMARY KEY, id_a int REFERENCES table_a(id), id_b int REFERENCES table_b(id) );
在我看来,两者都是有效的设计。但是,我无法决定应该选择哪一个。选择选项 1 或选项 2 甚至第三个选项是否有任何论据?
编辑:
更加具体:
A 和 B 不是同一类型。你可以把它想象成:
- A是房子
- B是门
- 所以,房子有很多门
- 一扇门被一所房子所包含