何时在数据库中使用1对1表

Wil*_*ill 6 mysql database-design

让我首先说我不是数据库专家.我正在研究其他人编写的一些代码,我注意到表之间有很多1-1关系.这是一个例子:

tblPropertyRecord
   pID
   hasPhotos
   hasVideo
   comment
   headline

tblPropertyLocation
   ID
   pID
   country
   region
   city
   zip
   street_address

tblPropertyOther
   ID
   pID
   upload_path
   isApproved
   isPaid
Run Code Online (Sandbox Code Playgroud)

这并不包含属性的每个字段 - 每个记录总共有大约35个字段,但是每个表都有,并且每个记录只能有一个条目1到1到1 ...我想这是描述的方式它?

这有什么好处,而不仅仅是拥有35个字段的tblPropertyRecord?我理解许多对1,1对多,多对多......但这似乎增加了混乱而没有真正的好处.

Sor*_*Cat 5

表可能是1-1但是关系实际上可能是1到0..1 - 他们可能正在使用额外的表来避免填充非常稀疏的表.


Gar*_*owe 2

关于此主题的 Hibernate 文档的快速引用

一对一关联有三种情况:关联实体共享相同的主键值,外键由其中一个实体持有(请注意,数据库中的此 FK 列应被限制为唯一以模拟一对一关联)一对一的多重性),或者使用关联表来存储两个实体之间的链接(必须在每个 fk 上定义唯一约束以确保一对一的多重性)。

如果上述内容不适合您的场景,那么您应该考虑重构。

评论后编辑以澄清

  1. 如果两个实体共享相同的 PK,那么它们实际上是一个实体 (1:1)
  2. 如果两个实体之一对另一个实体具有唯一的FK,那么它们实际上是一个实体,但具有存在选项 (1:0..1) - 可选的额外属性
  3. 如果关联表对两个实体中的每一个都具有唯一的FK,那么它们实际上是一个实体,但具有双向存在选项 (0..1:0..1) - 2 组属性的可选组合

希望这能澄清引文中稍微抽象的语言。