何时应该使用一对一关系?什么时候应该添加新字段?什么时候应该将它们分成新表?
在我看来,只要你对字段进行分组和/或该组往往是可选的,你就会使用它。是
我正在尝试为一个对象创建表,但是分组/分离所有内容需要我大约20个连接,有些甚至需要4个级别。
我做错了吗?我该如何改进?
答案 0 :(得分:6)
首先,我强烈建议您阅读about Normal Forms
规范化的关系数据库非常有用,并且正确地执行此操作是Hibernate等工具存在的原因 - 帮助管理对象表示为关系映射和对象作为progrommatic-entities之间的差异。
任何具有一对一映射的内容都应该在同一个表中。一个人只有一个名字,一个姓氏。这些应该在逻辑上位于同一个表中。不需要引用名称表 - 特别是因为可以存储关于名称的额外数据。显然,这并不总是正确的(词源数据库可能想要做到这一点),但对于大多数用途,你并不关心名称的来源 - 实际上你想要的只是名字。
因此,请考虑所表示的对象。一个人有一些奇异的数据点,以及一些一对多的关系(例如他们居住过的地址)。一对多和多对多几乎总是需要一个单独的表(或两个,有多对多)。遵循这两个准则,您可以非常快速地获得规范化数据库。
请注意,如果可能,应避免使用可选字段。通常这是一个具有单独的表的情况,该表保持具有返回原始表的引用的字段。尽量让你的桌子保持精益。如果一个字段不太可能有某些东西,它可能应该是它自己的表中的一行。许多这样的属性建议一个'Property'表,它可以保存特定类型的任意可选属性(即,应用于'Person')。