【问题标题】:Database: Foreign Key Enforcement数据库:外键执行
【发布时间】:2013-04-09 12:47:29
【问题描述】:

我确定可以回答,但不知道具体在哪里。

前言:

我们的解决方案是计费解决方案。应用程序设计非常简单,我们为企业创建网络商店并向企业所有者提供凭据。

企业主可以登录并创建相关产品、类别等。他们还可以注册他们可能想要用于计费的设备。

可以使用 Web 界面创建主实体,而计费发生在设备的本机应用程序上。

数据库表:

BUSINESS: id, name etc. - Business Info Table
CATEGORY: id, business_id, name etc. - Product Categories
PRODUCT: id, category_id, name etc. - Products

应用:

基于 Spring ROO 的 Web 应用程序。 Spring MVC 作为 GUI 技术

问题:

如前所述,所有者必须使用其凭据才能登录网上商店。因此,在他们开始创建实体时,webapp 知道相关的业务 ID,该业务 ID 透明地存储在所有类别、产品等中。

在创建产品时,用户可以选择产品可能属于的类别。

问题是:将 business_id 存储在产品表中是个好主意吗?因为我们只会在生成产品 GUI 时填充与业务相关的类别。对于在 GUI 中强制执行此类规则的所有关联表,情况也是如此。

您可能知道,ROO 采用为每个 CRUD 操作创建服务的方法。因此,如果我们决定不将 business_id 与产品一起存储,那么如果有人尝试使用不属于相关业务的类别 id 调用服务,则可以规避业务规则。或者,保持数据库设计不变并专注于保护服务是一个好主意。

如果您有任何相关的利弊,也请在此处发布。

提前感谢:)!!!!

【问题讨论】:

    标签: database-design spring-roo foreign-key-relationship


    【解决方案1】:

    您面临的问题称为多租户。您可以在此处详细了解这些选项的优缺点:

    http://msdn.microsoft.com/en-us/library/aa479086.aspx

    我更喜欢按租户模式的方法。

    您可以使用 JBoss Hibernate 的多租户功能自动执行此操作:

    http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch16.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2021-09-05
      • 2018-11-08
      • 2014-10-22
      相关资源
      最近更新 更多