Mysql 哪个表模式更好?
哪种结构更好 表1Mysql 哪个表模式更好?,mysql,database-design,schema,Mysql,Database Design,Schema,哪种结构更好 表1 postid category1 category2 category3 2 a b d 3 a c null 或 邮政桌 postid 2 3 post option 2 a 2 b 2 d 3 a 3 c 类别选项表 category option category1 a category2
postid category1 category2 category3
2 a b d
3 a c null
或
邮政桌
postid
2
3
post option
2 a
2 b
2 d
3 a
3 c
类别选项表
category option
category1 a
category2 b
category3 c
category4 d
选项(u post table)
postid
2
3
post option
2 a
2 b
2 d
3 a
3 c
为第一个结构构建查询似乎比第二个结构更容易。第二个更好。这是典型的多连接表案例 如果你用第一种方式做,如果有新的类别4,5,6,7,8,你会怎么做。。。来是否向表中添加新列 而且,我不知道你是否有这样的要求,“有多少篇文章的类别选项是‘c’”?
第二个很容易统计,但是第一个 取决于需求 您是否预计随着时间的推移,选项的数量会增加
您的第一个选项更易于编码,第二个选项更具模块化设计和可扩展性。这在很大程度上取决于类别的性质。如果列表是固定的,不太可能增长,那么第一个结构工作得很好,可以更容易使用。如果类别列表可能会增加,那么第二个选项会更好 类别值是否稀疏也很重要。如果大多数类别都没有值,那么第二种方法将占用更少的空间。如果每个项目在每个类别中都有值,这不是问题 在这种情况下,理解“可能”的含义很重要。这并不意味着你,设计师,不认为它会增长。这意味着分类列表已被充分理解和成熟,因此不太可能增长。我一直在寻找例子,但没有想到
选择第一个选项有很好的理由,但要小心——在生产系统中切换到第二个选项将是一场噩梦。第二个更好。第一个是对第一个范式的违反:
这两种结构模拟了不同的事物。第一个模型严格地只允许(最多)3个类别(并按位置区分类别),而第二个模型可以建模任意数量的类别(不按位置区分)。哪一个更好实际上取决于你想要完成什么
在纯技术级别上,第二个可能需要对某些查询进行联接,其中第一个查询可以满足来自单个(且唯一)表的查询。这是否是一个问题,同样取决于具体情况…category\u选项必须具有category id才能使用opton\u post创建连接表,否则无法创建第二个表结构 通过这种结构,您可以实现两件事 1) 与“发布到”类别建立一对一关系。(这意味着您可以在将来根据需要添加更多类别) 2) 在此结构中,自动避免空值。这意味着不再在表或sql查询中处理空值
希望这能有所帮助。这真的取决于你想要实现什么?通常情况下,第二个填充是规范化视图。因此它可能更好,在某些情况下更快;在其他情况下,第一个将更容易和更快;如果答案太简单,请给出更多的细节。有很多好的地方可以使用平桌结构。我同意——这不是正确的答案。它是高度情景化的。当你说join table时,你的意思是像select*from table as t1,table as t2和t1。option=a和t2。option=b和t1。postid=2和t1。postid=t2。postid?这是一个优化查询?有更好的解决方案吗?是的,类似这样的,尽管通常使用更现代的语法(谷歌的JOIN关键字)。连接可能非常快,也可能非常慢,这取决于许多因素,而不仅仅是索引。我强烈建议阅读一般索引的性能分支,特别是连接。有时为了性能而违反正常形式是值得的,特别是如果您知道这只是一个临时情况,一个短期项目,或者永远不会扩大规模。但选项2更多的是“书本和理论”,是“正确”的方法。