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

在单个MySQL行中保存多个属性,mysql,Mysql,我有一个MySQL表,每一行代表一个人。对于每个人,我想显示一个相关链接列表(在我的网站上生成他的页面时),因此我创建了一个名为“RelatedLinks”的列,在那里我保存原始HTML内容,例如: <a href="domain1.com">Related Link 1</a> <a href="domain2.com">Related Link2</a> 然后我就用PHP来echo$row[“RelatedLinks”] 这个实现的问题是

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

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

然后我就用PHP来
echo$row[“RelatedLinks”]

这个实现的问题是,我对链接几乎没有控制权,例如更改它们在网站上的出现顺序、删除/编辑特定链接等等

我考虑的第二个想法是在表中为每个相关链接创建一列,例如“RelatedLink1”、“RelatedLink2”,然后使用PHP来回送
$row[“RelatedLink1”]。“
”$第[“RelatedLink2”]行。

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

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


编辑

关于加布里埃尔的回答,现在的问题是关于复杂性:

在当前的实现中,一旦我选择了这个人,我手中就有了所有的链接——复杂性为O(1)。按照下面Gabriel(和Haim)的建议,运行查询以选择当前人员的所有外键会有多复杂

谢谢


Joel

您需要一个包含
PersonID(外键)
RelatedLink(ID)
的辅助表,可能还有一个
OrderID

差不多

Table PersonRelatedLinks
PersonID
RelatedLink or RelatedLinkID
OrderID
SpecialFormat maybe

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

如果您认为您将有更多的编辑操作,您可以尝试创建第二个选项卡,以包含id\u pearsonlinktextorder。您可以使用此选项卡编辑特定pearson的链接

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

人员表:id\u人员姓名(以及所有其他信息)

链接表:id\u链接文本链接

人员链接:id\u人员id\u链接订单

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

稍后根据评论进行编辑

好的,关于操作的复杂性,没有什么能比得上第一个解决方案。但是你必须考虑到你需要什么:

  • 您希望多久更改一次链接
  • 谁去更改链接(网站管理员或最终用户)
  • 为不同的人显示相同链接的案例数(使用第一个解决方案,您必须编辑包含该链接的所有人)
为了回答你关于复杂性的问题,如果我没有弄错的话,我提出的解决方案是O(n)。在MySql中使用外键和适当的索引,应该不会有问题

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

希望这有帮助,
Gabriel

您需要将所有这些链接保存在新表中,并引用personidHaim是正确的。请不要开始添加更多列。规范化您的数据库设置,只需保存链接的名称和链接本身,并为其提供对用户条目的引用。谢谢Gabriel!在此背景下,你可以参考我在我的帖子中对哈伊姆评论的后续行动。这也与您的解决方案相关:)您好,我相信复杂性将是O(n)。我的回答中有更多细节。