在阅读了这个question之后,我了解到去规范化并不是简单的解决方案。这个案子呢?
我有新闻文章,其中有一个网站列表-文章将要出版-to。后者可以通过表和多到多的关系(我认为通过交叉表)来表示。但简单的解决方案是,只需为这些网站(即将发布的文章- to (publish_to_site_1,publish_to_site_2等)提供一大群布尔人)。假设这些地点是:
这还是个糟糕的主意吗?这种多对多的关系似乎有些麻烦,但我以前也做过这样的事情(而且看起来很麻烦)。
注意:,我是在Rails中这样做的,在那里没有那么痛苦。另一方面,元编程使得这样的事情变得琐碎。
(1..5).each { |site| do_something(article["publish_to_site_#{site}".to_symbol]) }发布于 2010-05-20 13:26:57
如果这些条件真的得到了满足,那就不,这不是一个糟糕的想法。
事实上,这甚至不是去正规化:为了性能起见,去正规化通常意味着您要冗余地存储一些信息。在您的示例中,由于站点本身没有字段,所以您不会冗余地存储内容。您只是剥夺了自己在将来为站点存储其他字段的机会(而不违反规范化或重新设计数据库)。
因此,这是好的(规范化):
article show_on_stackoverflow show_on_my_blog
-----------------------------------------------------------------------
Denormalize for Simplicity YES NO
More simplicity YES YES
...但这是不行的(冗余):
article show_on_stackoverflow stackoverflow_mainpage_url show_on_my_blog my_blog_mainpage_url
------------------------------------------------------------------------------------------------------------------------------
Denormalize for Simplicity YES http://stackoverflow.com NO http://my.blog.url
More simplicity YES http://stackoverflow.com YES http://my.blog.url
...发布于 2010-05-21 22:32:15
假设二是不现实的。
因此,完全按照“如果这些条件真的满足了,那么不,这不是一个可怕的想法。”:是的,这是一个糟糕的想法。
发布于 2010-05-20 13:29:40
如果您认为布尔人的网站--文章将被发布--仅仅是"isGreen“、"hasHair”、"isBipedal“等主要数据的属性,那么一个表就会标准化,因为拥有表Green{<true>, <false>}的外键是不正常的。
显然,如果你的三个条件不继续成立,下一个人将有非平凡的工作要做,但“尽可能简单,但没有更简单”有它的效用。
https://stackoverflow.com/questions/2874071
复制相似问题