Java 数据库设计的最佳方法
我们有一个用于电子商务应用程序的数据库,我们正在使用JPA2.0 我们有三个表:产品(id、代码、名称、说明、价格);soldproducts(id、数量、产品id);订单(id、日期、状态、备注) 这是我们的问题:当我们从products表中删除一个产品时,soldproducts中有一个约束问题,因为product_id列引用了一个产品。我们想删除该产品,但我们想访问该产品的详细信息 我们想在products表中添加一个传统的列,比如availability,它告诉我们产品是否可用。使用这种方法,如果我们从应用程序中删除一个产品,而该产品没有从soldproducts中引用,我们只是将这个额外的列更新为不可用,我们不会删除它。否则,我们将从表中删除产品。但我们不确定这是否是最好的办法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,它告诉我们产品是否可用。使用这种
您认为,对于这种情况,最好的设计方法是什么?在我看来,最好的设计方法是不删除产品行,而是将其标记为已删除。您需要在表中添加一个
deleted
或active
布尔列
在这种情况下,我看到/使用过的大多数系统通常都会这样做。当然,您每次都需要按
活动的(而不是已删除的)产品筛选产品
查询。但这是不丢失历史数据引用的唯一方法。同意。同样,你的销售报告不会被弄糟。有一个额外的列(Active)有标志y/n是否考虑报告行或不+ 1。