Database design 数据库:外键强制

Database design 数据库:外键强制,database-design,spring-roo,foreign-key-relationship,Database Design,Spring Roo,Foreign Key Relationship,我相信这是可以回答的,但不知道具体在哪里 前言: 我们的是计费解决方案。应用程序设计非常简单,我们为企业创建web应用商店,并向企业所有者提供凭据 企业主可以登录并创建相关产品、类别等。他们还可以注册他们可能想要用于计费的设备 主实体可以使用web界面创建,而计费则在设备的本机应用程序上进行 数据库表: BUSINESS: id, name etc. - Business Info Table CATEGORY: id, business_id, name etc. - Product Cate

我相信这是可以回答的,但不知道具体在哪里

前言:

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

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

主实体可以使用web界面创建,而计费则在设备的本机应用程序上进行

数据库表:

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

BUSINESS: id, name etc. - Business Info Table
CATEGORY: id, business_id, name etc. - Product Categories
PRODUCT: id, category_id, name etc. - Products
基于SpringRoo的web应用程序。springmvc作为GUI技术

问题:

BUSINESS: id, name etc. - Business Info Table
CATEGORY: id, business_id, name etc. - Product Categories
PRODUCT: id, category_id, name etc. - Products
如前所述,所有者必须使用其凭据登录到web应用商店。因此,当他们开始创建实体时,webapp知道相关的业务id,该id被透明地存储在所有类别、产品等中

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

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

正如你们中的一些人可能知道的,ROO采用为每个CRUD操作创建服务的方法。因此,如果我们决定不将业务id与产品一起存储,那么如果有人试图使用不属于相关业务的类别id调用服务,则可以绕过业务规则。或者,让数据库设计保持原样,集中精力保护服务是一个好主意

如果你有任何相关的优点和缺点,请张贴在这里了


提前感谢:)

您面临的问题称为多租户。您可以在此处阅读更多有关选项利弊的信息:

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

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