2012-02-14 63 views
1

我正在做一些使用Azure和Idea Blade DevForce的工作,我想知道从映射实体到数据库表的最佳方法是什么......实体应该映射到自己的数据库表吗?

实体是否应该在数据库中拥有自己的表?这样做是否有任何性能优势/不利影响?假设我们有一个“订单”实体,一个“产品”实体,一个“客户”实体和一个“地址”实体;将这些混合在一张桌子中与把它们全部分离出来的利弊是什么?很显然,如果我们没有分开,数据库将不会处于第三范式,但是在使用MEF/DevForce时这很重要吗?作为第二个(设计不太好的)例子,如果我们有一个“账户”实体和一个“用户”实体,那该怎么办?一个帐户可以有很多用户,但用户只能属于一个帐户......这样,将它们全部放在一张表中并不会重复任何用户数据,但我(个人)仍然认为这种方法显然是错误的。是否有任何理由说明它会带来好处?

+0

它只是您感兴趣的性能或其他事物,如可维护性等。 – Fen 2012-02-14 09:18:08

+0

不,我对可维护性也非常感兴趣!我们需要对模型进行更改,不会彻底打破存储的现有项目! – Siyfion 2012-02-14 10:19:20

回答

2

取决于您喜欢复制数据的多少,以及是否希望任何人都认真对待您作为开发人员。把所有东西都扔进堆里,是我能想到的最糟糕的反模式。

例如,假设您要为2个客户创建4个订单,每个订单包含5个产品。您的客户数据将被重复每个客户10次。

编辑:我应该注意到,我对这个问题的回答是强调“是”。我有兴趣听取有关替代方案的论点...

+0

说实话,这正是我的想法,但我只是想检查一下,这样做没有造成巨大的性能损失/灵活性损失,因为这不是其他开发人员目前想要做的。 – Siyfion 2012-02-14 09:22:17

+0

我已经添加了第二个示例,但我仍然无法看到将它们全部放在一个表中的原因,除非这样做会导致性能成本。 MySQL或Azure将成为后台FYI的存储机制。 – Siyfion 2012-02-14 09:32:40

+0

一旦您拥有使用该持久对象的活动应用程序,您可能会遇到性能问题。我已经在使用这种设置的遗留表格上工作过了,试图确定一个独特的记录而不在谓词中包含很多字段是很痛苦的......但那是我个人的经验。 – 2012-02-14 09:33:51