0
N Artists have M Folders.
1 Folder has N Sketches.

艺术家

ArtistId (PK)

艺术家文件夹

ArtistId (PK)(FK)
FolderId (PK)(FK)

文件夹

FolderId (PK)

草图

SketchId (PK)
FolderId (FK)

我现在想要的是这样的:

1 位艺术家有 N 个草图。

我将不得不向表 Sketch 添加一个新字段:ArtistId

当我为文件夹插入草图时,此字段将始终为空/null。

你知道更好的设计吗?

4

1 回答 1

0

我不明白为什么会同时给 Sketches 一个 ArtistId 和一个 folderId 但我显然不知道你在创建什么。

在我看来,您有多种类型的草图。一些草图是由艺术家“创建”的,而另一些是由其他实体“创建”的。无论哪种方式,他们都会获得一个文件夹。所以如果你不喜欢空值,你可以做这样的事情。

草图

SketchId (PK)
FolderId (FK)

然后:

艺术家素描

SketchId (FK)
ArtistId (FK)

然后,您可以对 ArtistSketch 设置一个禁止重复草图的约束。

要获取给定艺术家的草图,您可以跨两个表进行连接以获得:

SketchId
ArtistId
FolderId

否则,只需查询 Sketch 表。

这将是类表继承的一个示例:http ://martinfowler.com/eaaCatalog/classTableInheritance.html

Doctrine 是一个 PHP 的 ORM 库,对此有一个有趣的看法,可与 MySQL 一起使用,以减少在许多设置下使其正常工作所需的大量繁重工作(代码方面)。 http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html

于 2012-08-01T19:31:38.450 回答