N Artists have M Folders.
1 Folder has N Sketches.
艺术家
ArtistId (PK)
ArtistFolder
ArtistId (PK)(FK)
FolderId (PK)(FK)
文件夹
FolderId (PK)
草图
SketchId (PK)
FolderId (FK)
我现在想要的是:
1艺术家有N个草图。
我必须在表Sketch:ArtistId
中添加一个新字段当我为文件夹插入草图时,此字段将始终为空/ null。
你知道有更好的设计吗?
答案 0 :(得分:0)
我不明白为什么Sketches会同时给出artistId和folderId,但我显然不知道你在创作什么。
在我看来,你有多种类型的草图。一些草图由艺术家和其他实体“创造”。无论哪种方式,他们都有一个文件夹。所以,如果你不喜欢null值,你可以这样做。
<强>草图强>
SketchId (PK)
FolderId (FK)
然后:
<强> ArtistSketch 强>
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