你好我正在制作一张朋友桌,但它正在增加。这是我的表结构
id | friend_id | name | category 1 | 2 | kashif| friend 2 | 1 | Hamid | colleagues
是否有解决方案将其分为2并使其为O(2N)
答案 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
(但这是糟糕的设计。)