3

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

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

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

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

4

1 回答 1

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

在这种情况下,一个用户可以有多个关系。关系表将包含“editor”、“reviewer”、“copywriter”、“admin”等数据,每个用户可以是这些数据的任意组合(即,用户 1 可以是编辑和文案)。

于 2013-05-30T00:19:31.547 回答