首先是一些背景故事:
我正在创建一个网站(和我的队友一起),用户必须能够在其中创建“概念”(包括时间戳、创建它的用户、标题、描述、摘要等等)。在上述概念上,人们必须能够发布“想法”(时间戳、创建者的 ip、文本)。最后,人们必须能够对创意发表评论(其中包含与创意相同的内容)。
tl;dr:我们正在构建一个具有类似于 StackOverflow 的基础设施的网站:它有 3 层(没有更好的词)用户输入:问题、问题的答案,以及对这些答案的评论。
最初,我和我的队友考虑做的是为所有概念创建一个表格,然后每个概念也有一个标题为 <the concept's id in the table>_ideas
的表格。然后每个想法都会在该表和另一个标题为 <the concept's id in the table>_<idea id in the concepts's id table>_ideas
的表中得到一行然而,对此进行的一些快速测试表明我们收到了表格的垃圾邮件......
因此我们需要重组当前的 SQL,我们目前的想法是简单地将想法和评论表结合起来,并在该表中创建一个额外的字段来表示该行是想法还是评论。
但是,我想在我们做任何事情之前把这个问题抛给堆栈溢出:
组织三层 SQL 数据的最佳(我的意思是最快)方法是什么?
最佳答案
each concept would also have a table
表格并不意味着是动态元素。当然可以,但要认真。
关系数据库结构具有静态数量的表。
请阅读 fundamentals of relational database design
是否将不同的实体合并在一个表中,并添加一个字段来区分它们,这是一个非常有效的问题。
最后我认为这取决于应用程序。它可以严重加快事情的速度,但也会减慢速度。我更喜欢单独的表,因为您可以保存一个索引,并且将来使用分片可能会更容易。 UNION 语句很便宜。
话虽这么说。从固定对象开始,为它们创建表格。
为“概念”创建一个表,一个为“想法”创建一个表,一个为“评论”创建一个表,一个为“用户”等...
评论有一个“idea”字段,它们属于哪个idea等等。
关于php - 在 SQL 的用户输入上组织用户输入 n 用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6726022/