我对SQL比较陌生,我不确定如何建立一对一的关系。在阅读了前3种规范化形式之后,我目前的印象是,最好的方法是拥有一个中间表,ala-3rd来自多对多关系,除了每列被声明为唯一。
答案 0 :(得分:6)
ImageDetails
------------
id (PK)
name
description
ImageData
------------
id (PK & FK)
blobfield
这样的事情可能是建立一对一关系的一个很好的理由/方式,但通常你只需要在一个表中拥有所有数据,其中每一行都是定义关系的。
将它们分开的一个原因可能是限制用户访问特定表,同时允许访问该键字段的其他数据。
为一对一关系建立单独表格的另一个可能原因是,您不希望在列中添加null
。例如,如果90%的数据为空,那么使用完全独立(和较小)的表并在PK上加入该字段可能会更好。这实际上被认为是一种“可选的一对一关系”,因为你并没有为每一种可能的关系创造一条记录。
答案 1 :(得分:2)
您不需要第三个表来实现一对一关系,但如果关系是多对多关系,那么您需要在它们之间使用第三个中间表。
答案 2 :(得分:0)
现实世界中确实存在可选的一对一关系。实现它们的最简单方法是恕我直言,它有一个独特的外键。
mysql> describe table_one;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| table_two_id | int(11) | YES | UNI | NULL | |
+--------------+--------------+------+-----+---------+----------------+
0 rows in set (0.00 sec)
mysql> describe table_two;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
+--------------+--------------+------+-----+---------+----------------+
0 rows in set (0.00 sec)