我有一个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)所建议的那样?
谢谢,
乔尔
答案 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中使用外键和正确的索引,你应该没有问题。
摘要:如果性能对您非常重要,并且链接仅由管理员编辑,请使用第一个解决方案。如果没有,我会使用第三个。
希望这有帮助, 加布里埃尔