我的网站将提供许多产品,但它们将被分类到完全不同的网站(域名)。
我的问题是,我最好将所有产品整合到一个数据库中并使用ID来区分这些网站,还是应该为每个网站设置一个表格和/或数据库?
以下是我的想法
分开数据库
相同数据库
有人可以就哪种方式最好以及为何提供一些建议?
答案 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;