帮助设置数据库

时间:2009-09-15 06:40:45

标签: sql mysql database-design data-modeling

我的网站将提供许多产品,但它们将被分类到完全不同的网站(域名)。

我的问题是,我最好将所有产品整合到一个数据库中并使用ID来区分这些网站,还是应该为每个网站设置一个表格和/或数据库?

以下是我的想法

分开数据库

  • 更容易从后端阅读
  • 分类更好
  • 使备份更加困难
  • 如果我需要对架构进行更改,则需要将其推送到所有数据库

相同数据库

  • 所有在一个地方
  • 可能会变得笨拙
  • 一个数据库的文件大小很大,查找可能会受到影响

有人可以就哪种方式最好以及为何提供一些建议?

4 个答案:

答案 0 :(得分:1)

如果需要在所有站点之间共享数据,则建议共享同一数据库,因为数据传输已被删除。数据也更加集中。

如果不需要在所有站点之间共享数据,那么每个站点拆分一个数据库会很好。谈到更新表结构的难度,您只需记下数据库更改(保存SQL文件中的ALTER,UPDATE,DELETE查询),然后使用相同的SQL文件更新其他数据库。

存储在不同的数据库中也可能有助于提高安全性。您可以为每个站点设置不同的用户权限。如果一个人受到损害,你就会保护其他网站。

此外,当数据库清楚地分开时,您可以轻松地维护和跟踪数据库。

答案 1 :(得分:1)

你没有提供太多细节(这使得很难提供一个好的答案),尽管你在问题中选择使用的词语让我相信这是一个具有不同“皮肤”的单一应用程序。 / p>

  

我的网站会有很多产品可用,但会被分类到完全不同的网站(域名)。

我的假设是你将拥有一个拥有多个不同店面的网上商店:cool-widgets.com,awesome-sprockets.com,neato-things.com等。这些都是相同的,除了可能一个CSS皮肤或类似的东西。商店管理员的东西都将在某个中央系统中完成,域名将只是一个类别名称。

因此,使用任意标准(category_ name =='cool-widges.com')将相同数据拆分为两个不同的容器是数据分区,这是一种反模式。就像你没有基于用户名的两个不同的用户表([Users $ A-to-M]和[Users $ N-to-Z])一样,拥有两个不同的表(或数据库)是没有意义的)对于类别名称。

在类别中有许多共同的代码:用户管理,管理,订单处理,数据导入等。在公共代码中聚合多个数据存储区要比它更加困难。隔离商店显示代码中的类别。不仅如此,隔离错误将更加明显:价格比较页面显示来自所有三家商店的商品。聚合错误将少得多:四个商店中只有三个被更新。这就是为什么它是反模式的原因。

附注:是的,在您说数据分配有其用途(它确实如此)之前,这些用法在出现性能问题之后很久才进入。许多严肃的数据库平台允许幕后分区,而不是创建一个愚蠢的数据模型。

答案 2 :(得分:0)

正如您已经说过的,两种选择都有其优点和缺点。既然你在谈论两家商店,那可能并不重要。

但是,您可能想问自己几个问题:

  • 这真的是两家商店,还是更多?如果更多,一个数据库可能更聪明。
  • 产品真的一样吗?如果你不得不在一个通用数据库中挤压产品,因为它们是不同的类型(例如,汽车与食物;你想要存储的细节的数量和性质完全不同),那么不要;改为使用两个数据库/表。

核心问题是:未来最有可能变得更加精细:商店或产品?

答案 3 :(得分:0)

我认为单独的数据库会更容易。您可以拥有一个快速启动模板数据库,您可以从中构建新的商店数据库。您甚至可以创建一个公共数据库,并包含公用表和存储列表及其数据库。毕竟,您可以使用限定名称访问同一服务器中的任何数据库,请观察:

SELECT value FROM CommonDB.currencies WHERE type='euro';
SELECT price FROM OldTownDB.Products WHERE id=newtownprodid;