对于相当无益的标题道歉,如果您有更好的建议,请随时编辑。
我正在使用CakePHP和烘焙功能(但我不需要烘烤)。
实现以下目标的最佳方式是什么:
表架构:
table ranges
id | name | description
table images
id | range_id | picture
table info (here i am confused)
id | range_id | height | width | colour
基本上,一个范围可能有很多图像(1:很多)。我可以证明这很好。
现在,每个范围在info
表(1:1)中都有一个条目,并且有一些关于范围的属性,如高度,颜色,宽度。但并不总是......
假设我有一个范围foo
。 foo
有五个images
,它们都具有相同的高度,宽度和颜色。但是,foo
有一个图像尺寸不同,颜色也不同。
当属性不同时,我需要使用相应的图片显示此信息,而不是ranges
默认信息。所以这个image
将需要它在info
表中的自己的条目。
这甚至有意义吗?或者我完全以错误的方式解决这个问题。
我的申请,简而言之: (如果有帮助,可以将“范围”视为产品)
info
中的信息会弹出该范围。如果我能进一步澄清,请告诉我。谢谢。
答案 0 :(得分:3)
我需要在父实体具有可被子实体“覆盖”的值的情况下执行此操作。
您可以采用几种方法将结构视为最简单的部分 考虑以下结构
table ranges
id | name | description | default_info_id
table images
id | range_id | picture | info_id
table info
id | height | width | colour
image.info_id什么时候有值?有两种选择
使用来自父级的default_info_id填充image.info_id。然后用户可以在图像上覆盖它
<强>赞成强>
缺点
仅当images.info_id与父级不同时才填充它们。
<强>赞成强>
缺点
当range.default_info_id发生变化时,你需要决定做什么。你现在需要将任何现在与父母相同的images.info_id归零吗?
你需要查看rages表,找出当它为null时图像上的info_id。
您可以拥有多种上述数据结构,但您仍需要确定何时填充内容。以下是您可以考虑的另外两个有效(但在我看来不太理想)
信息对两个表都有一个FK,但其中一个始终为空
table ranges
id | name | description
table images
id | range_id | picture
table info
id | range_id | image_id | height | width | colour
根本没有信息表
table ranges
id | name | description | default_height | default_width | default_colour
table images
id | range_id | picture | height | width | colour