划分一张表,使其增加到2N而不是N ^ 2?

时间:2014-04-01 08:08:34

标签: sql database database-design

你好我正在制作一张朋友桌,但它正在增加。这是我的表结构

id | friend_id | name  | category
1  | 2         | kashif| friend
2  | 1         | Hamid | colleagues

是否有解决方案将其分为2并使其为O(2N)

2 个答案:

答案 0 :(得分:4)

  

[我可以]将一个表分开,使其增加到2N而不是N ^ 2吗?

不是在这种情况下,因为存在O(n ^ 2)个可能的关系。

在最坏的情况下,您将始终拥有O(n ^ 2)数据。

答案 1 :(得分:-1)

首先,您需要规范化。 name应该使用person进入id表。对category执行相同操作。然后您的关系/ friend表格将id | friend_id | category_id。如果它们都是整数类型,则每行为4字节x 3列或(如果需要,则为id个8字节,类别类型为1字节)。

回答你的问题: 如果你想要双向关系,你不能让它变小。但是,如果您不介意较慢的查询,只需维护关系的一侧,并在SQL中使用OR来选择id=x OR friend_id=x

id | friend_id | category_id
1  | 2         | 1

这意味着您丢失了类别信息,或者为friend_id考虑关系类型的内容创建了第二个category_id列:

id | friend_id | person_category_id | friend_category_id
1  | 2         | 1                  | 2

categories表:

category_id | category_text
1           | friend
2           | colleague

(但这是糟糕的设计。)