我的用户有多个对象,可以上传这些对象的图像。每个对象都有几个项目。用户上传的照片可以分配给这些项目。问题是,一个对象可以多次拥有一个特定项目。
举个例子:物品是汽车,物品是座位,窗户,门等。汽车可能有5个座位,但所有座位都是同一个项目。但是,图像的描述仍应是“座位1”,“座位2”等,用户也可以为座位2上传多张图像。
直到现在我有以下表格:
对象:id,name
项目:id,name
assigned_items :id,object_id,item_id,数量
图片:id,object_id,item_id
您最好如何解决这个问题?
我使用数量的原因是,因为如果项目的类型发生变化,那么很可能是所有项目。例如。 4个座位可以变成4个轮子等等。所以,如果每个assigned_item都有一排,让我们说seat1,seat2,seat3等等,那么这将更难改变,不是吗?
答案 0 :(得分:1)
除非您实际意味着项目可以属于多个对象,否则使用assigned_items
无效。如果我理解正确,你主要担心的是你有时会有一些项目的图像,那么你如何描述图像呢?
以下是我的建议:
OBJECT: id,name
ITEM: id,name,quantity,object_id
IMAGE: id,name(null),object_id(null),item_id(null)
如果您的DBMS支持约束,请对IMAGE进行约束以强制执行object_id或item_id(但不是两者)中的一个或另一个。这允许您将图像定义为项目或整个对象。
当您查询图像的名称时,您将使用COALESCE函数(或您的DB的等效函数)来获取图像覆盖名称(如果存在)或对象/项目名称(如果覆盖不是存在)。
答案 1 :(得分:1)
看看这个模型:
它允许您:
注意:如果OBJECT:ITEM关系为1:N而不是M:N,则可以简化此模型,但您自己的尝试模型似乎表明它是M:N。
注意:要将图像直接连接到OBJECT(而不是OBJECT_ITEM),您需要在“OBJECT和IMAGE”之间的其他链接表(OBJECT_IMAGE)。
示例数据:
OBJECT:
Car
ITEM:
Seat
OBJECT_ITEM:
Car-Seat-1
Car-Seat-2
Car-Seat-3
Car-Seat-4
Car-Seat-5
OBJECT_ITEM_IMAGE:
Car-Seat-1-Image1 "Seat1 Image"
Car-Seat-2-Image1 "Seat2 Image"
Car-Seat-2-Image2 "Seat2 Alternate Image"
Car-Seat-3-Image1 "Seat3 Image"
Car-Seat-4-Image1 "Seat4 Image"
Car-Seat-5-Image1 "Seat5 Image"
IMAGE:
Image1
Image2