在单个MySQL行中保存多个属性

时间:2010-11-17 09:56:30

标签: mysql

我有一个MySQL表,每行代表一个Person。对于每个人,我想显示一个相关链接列表(在我的网站上生成他的页面时),所以我创建了一个名为“RelatedLinks”的列,在那里我保存了原始HTML内容,如:

<a href="domain1.com">Related Link 1</a> <a href="domain2.com">Related Link2</a>

然后我只在PHP中使用PHP echo $row["RelatedLinks"];

此实现的问题在于我几乎无法控制链接,例如更改网站上的外观顺序,删除/编辑特定链接等等。

我想到的第二个想法是在表格中为每个相关链接创建一个列,例如“RelatedLink1”,“RelatedLink2”,然后使用PHP来回显$row["RelatedLink1"] . "<br />" . $row["RelatedLink2"].

虽然我对这个实现有更多的控制权,但我认为我在表中创造了很大的开销。

实现此功能的有效方法是什么?


修改

参考加布里埃尔的答案,现在的问题是复杂性:

通过当前的实现,一旦我选择了我手中所有链接的人 - O(1)的复杂性。运行查询以选择当前Person的所有外键的复杂性是什么,如下面的Gabriel(和Haim)所建议的那样?

谢谢,

乔尔

2 个答案:

答案 0 :(得分:1)

您需要一个包含PersonID (foreign Key)RelatedLink(ID)OrderID的辅助表。

这样的东西
Table PersonRelatedLinks
PersonID
RelatedLink or RelatedLinkID
OrderID
SpecialFormat maybe

答案 1 :(得分:1)

如果您只想存储和显示链接,并且编辑操作很少,则第一个选项是最佳选项。在这种情况下,您必须在编辑时保存新值。

如果您认为自己有更多编辑操作,可以尝试创建第二个表格,包含 id_pearson 链接文字订单。您可以使用此表格编辑特定皮尔逊的链接。

此外,如果您需要两个或更多人的相同链接,最好使用3个表。

人员表: id_person 名称(以及所有其他信息)

链接表: id_link 文字链接

person_links: id_person id_link 订单

使用此设置,您可以在一个位置编辑链接,所有人都可以访问相同的版本。

稍后编辑回应评论

Okey,关于操作的复杂性,没有什么比第一个解决方案更好的了。但是你必须考虑几个关于你需要的东西:

  • 您希望多久更改一次链接?
  • 谁离开了更改链接(网站管理员或最终用户)?
  • 为不同的人显示相同链接的案例数量(使用第一个解决方案,您将需要编辑包含该链接的所有人员)

要回答你的复杂性问题,如果我没有误会,我提出的解决方案是O(n)。在MySql中使用外键和正确的索引,你应该没有问题。

摘要:如果性能对您非常重要,并且链接仅由管理员编辑,请使用第一个解决方案。如果没有,我会使用第三个。

希望这有帮助, 加布里埃尔