我在Dzone看过一篇关于邮政和邮政详情(两个不同实体)及其关系的文章。帖子及其细节在不同的表格中。但是正如我所看到的,Post Detail是一个可嵌入的部分,因为它不能在没有“父”帖子的情况下使用。那么在另一个表中将它分开的逻辑是什么?
请告诉我何时使用哪一个?
答案 0 :(得分:1)
可嵌入类表示其父类的状态。因此,举个例子,StackOverflow POST有一个不变的ID,并在一个牢不可破的URL中用于共享,例如http://stackoverflow.com/q/44017535/146325
。还有一系列其他属性(状态,投票等)是标量属性。当帖子被编辑时,我们有各种版本的文本(对于具有足够代表的人来说,这些版本是保持和可见的)。那些是你的POST DETAILS。
“在另一个表中分隔它的逻辑是什么?”
因为在不同的表中保存不同的东西是关系数据库的作用。表示此数据模型的标准方法是父表POST和子表POST_DETAIL,其具有通过外键强制定义的关系。
Embeddable是面向对象编程的概念。 Oracle确实支持数据库中的对象关系结构。因此,可以定义POST_DETAIL类型并创建一个POST表,该表具有声明为该Type的嵌套表的列。然而,由于两个原因,这将是一个糟糕的设计:
[oracle]
标签的帖子有多容易?这是面向对象设计和关系设计之间的区别。
OO具有强烈的层次结构:一切都属于某种东西,获取细节的方式是通过父级。这种方法在处理单个事物实例时效果很好,因此适用于UI设计。
关系优先考虑共性:同一类型的所有东西都与其他东西的链接组合在一起。这种方法适用于处理各种事物,因此适用于数据管理任务(您是否希望找到所有在BERLIN工作或其工作是工程师或由ELLIOTT管理的员工?)
“给我一个更明确的解释,何时使用哪一个”
始终将数据关联存储在单独的表中。在有意义的情况下使用OO模式构建API。