Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数据库设计的最佳方法_Java_Database_Database Design_Jpa 2.0 - Fatal编程技术网

Java 数据库设计的最佳方法

Java 数据库设计的最佳方法,java,database,database-design,jpa-2.0,Java,Database,Database Design,Jpa 2.0,我们有一个用于电子商务应用程序的数据库,我们正在使用JPA2.0 我们有三个表:产品(id、代码、名称、说明、价格);soldproducts(id、数量、产品id);订单(id、日期、状态、备注) 这是我们的问题:当我们从products表中删除一个产品时,soldproducts中有一个约束问题,因为product_id列引用了一个产品。我们想删除该产品,但我们想访问该产品的详细信息 我们想在products表中添加一个传统的列,比如availability,它告诉我们产品是否可用。使用这种

我们有一个用于电子商务应用程序的数据库,我们正在使用JPA2.0

我们有三个表:产品(id、代码、名称、说明、价格);soldproducts(id、数量、产品id);订单(id、日期、状态、备注)

这是我们的问题:当我们从products表中删除一个产品时,soldproducts中有一个约束问题,因为product_id列引用了一个产品。我们想删除该产品,但我们想访问该产品的详细信息

我们想在products表中添加一个传统的列,比如availability,它告诉我们产品是否可用。使用这种方法,如果我们从应用程序中删除一个产品,而该产品没有从soldproducts中引用,我们只是将这个额外的列更新为不可用,我们不会删除它。否则,我们将从表中删除产品。但我们不确定这是否是最好的办法


您认为,对于这种情况,最好的设计方法是什么?

在我看来,最好的设计方法是不删除产品行,而是将其标记为已删除。您需要在表中添加一个
deleted
active
布尔列


在这种情况下,我看到/使用过的大多数系统通常都会这样做。当然,您每次都需要按
活动的
(而不是
已删除的
)产品筛选
产品
查询。但这是不丢失历史数据引用的唯一方法。

同意。同样,你的销售报告不会被弄糟。有一个额外的列(Active)有标志y/n是否考虑报告行或不+ 1。