空外键或表连接

时间:2012-08-11 10:27:57

标签: mysql

我有一个用户个人资料表。

id int (pk)
user_name varchar(50)
email_address varchar(100)
relationship_status tinyint(1)(FK)

然后我有一个关系表。关系是用户配置文件表中的可选字段。如果未选择relationship_status或者在relationship和user_profile之间使用表,则最佳做法是进行空连接。

这是一个简单的例子,但如果连接是可选的,我最终会最终得到多个表。这可能会导致连接太多。但是我读过可以遇到null连接问题,而不是最佳实践。

1 个答案:

答案 0 :(得分:0)

这取决于表之间的关系。如果它是一对多或多对多。如果每个用户只能拥有一个且只有一个关系状态,那么如果每个用户可以拥有多个关系而不是“中间的表”,则执行“空连接”

一对多关系的示例:

User Table
- id
- name
- relationship_id

Relationship Table
- id
- type

在这种情况下,关系表将具有诸如“用户”,“管理员”等的数据,并且用户只能是“用户”或“管理员”而不是两者。 (在这种特殊情况下,有时我会将关系表的id列设置为像“user”或“admin”这样的字符串,这样你就不必对它进行连接,你总是在用户表中使用它)。

多对多关系的示例:

User Table
- id
- name

Relationship Table
- id
- type

User Relationship Table
- user_id
- relationship_id

在这种情况下,用户可以拥有多个关系。关系表将具有诸如“编辑器”,“评论者”,“文案撰写者”,“管理员”等的数据,并且每个用户可以是那些的任何组合(即,用户1可以是编辑者和撰稿人)。