您的问题似乎有一个假设,即order-display thingie必须与订单实体1-1匹配。
我认为你已经为自己挖了一个洞,试图简化为每个订单一个产品。
如果您有一个连接表(OrderProducts?或更好的OrderLines),那么订单和产品实体都不必“知道”彼此 您可以保持这些清洁和简单,并将此DisplayOrders函数委托给新加入的实体。
也许,如果我假装成顾客,说我想要的订单显示,以不再显示产品名称,而是显示总订单价值。
这将是一个很大的正在调整的你实体,如果你与这个1-1匹配的想法保持一致,你的分贝也是。
不要去那里。变化是一个给定的。 ip 评论后...
如果它确实是一个1 - 1的关系,那么你不需要两个实体。 1-1将是每个订单一个产品,并且每个产品一个订单。
我做了愚蠢的假设你的问题,实际上你可以有一个产品订购了很多次。
因此,大多数有趣的方法(除了两个实体上的基本问题)都基于两个实体之间的关系。这是你应该建模的领域的一部分。
更多评论...之后
我从来没有denormalise除非我优化性能,和我做“最后的”如果我没有更好的选择。
如果您正在讨论需要从属对象的一个属性,我会立即创建实体,并将publisherid放在书实体上。
我会这样做的假设,发布者实体的名称属性可能会改变。非规范化意味着我将不得不捕获对发布者名称的更改,通读所有书籍并更改其名称。更糟的是,这里还有一个隐藏的假设,那就是发行商的名字是独一无二的。现在你可能会这样做了,但为了避免一个用户的一些嘘声给两个发布者同名的问题,以避免一个真正可怕的bug,你必须执行它。
在这个有意限制的例子之外的现实世界里,我希望有一些功能分配给伪实体BookListItem(例如选择读取列表或购物车),但我会被第三个第一类实体BookListItem,或许还有第四个BookList。
所有的设计都是妥协,如果你打算很多地看书的名单,并且出版商的名字将在蓝月亮作业中一次出现,并且你准备好了解身份问题,并且你可以预见没有改变这种行为,那么denormalising是一个很好的妥协。
在某些方面,对于您的问题没有正确的答案,您需要清楚的是您的设计允许/启用以及它施加的限制,例如, PublisherName的是独一无二的,这是无处在的要求,可能会导致您的客户打电话给你不同的名字....
HTHS
感谢您的回答。虽然答案并没有直接回答我的问题,但他们在这个问题上大开眼界。谢谢 – user2931442
但我只能选择一个答案 – user2931442