1

我有这些桌子

客户

id(PK), name, logo

学校

id(PK), name, logo, client_id (FK)

班级

id(PK), name, school_id (FK)

主题

id(PK), name, class_id (FK)

方法 1。

我有主题 ID,我需要获取主题的 class_id、school_id 和 client_id。我可以使用 JOIN 编写查询以从 Client、School、Class 表中获取 id

方法二

我有这样的桌子设计

客户

id(PK), name, logo

学校

id(PK), name, logo, client_id (FK)

班级

id(PK), name, school_id (FK), client_id (FK)

主题

id(PK), name, class_id (FK), class_id (FK), school_id (FK), client_id (FK)

在这种情况下,我可以通过一个简单的查询来获取所有详细信息,例如

SELECT * FROM Subject WHERE id = '2'

哪一种是更好和推荐的方法?我喜欢第二种方法,但不确定是否推荐。

TIA

4

1 回答 1

0

在性能方面,第二种方法在 SELECT 上更好。这完全取决于您需要多少ID。在编程结构中也是如此。我是否需要指向父级结构的指针?这取决于我们将要进行的操作类型。权衡是空间和同步化,在大多数情况下这不是问题,因为主键是唯一标识符。

我会混合它。我不会像您那样放置所有外键。Class 表是否需要 client_id?在你的情况下,我会在主题中使用外键,但如果性能不是问题,我会使用连接。

还要注意表 Subject 中的 school_id 和 client_id 是外键。

于 2013-04-21T12:32:52.023 回答