【发布时间】:2019-01-06 21:59:58
【问题描述】:
我的数据库中有三个表:
COMPANY(ID, NAME)
COUPON(ID, TITLE)
COMPANY_COUPON(COMPANY_ID, COUPON_ID)
公司可以创建优惠券,因此在创建优惠券时,会将优惠券的ID和公司ID添加到COMPANY_COUPON表中。当公司删除优惠券时,由于FOREIGN KEY,它也会从COUPON 和COMPANY_COUPON 中删除。当我删除公司时,由于FOREIGN KEY,它也从COMPANY和COMPANY_COUPON中删除,但它的所有优惠券都留在COUPON表中,我试图添加到COUPON表FOREIGN KEY(ID) REFERENCES COMPANY_COUPON(COUPON_ID),但因为它我无法将新优惠券插入COUPON 表中。
很高兴回答如何创建正确的表格以及如何添加有助于现有表格的内容。 也许一些join可以帮助它,我真的不擅长sql命令,对不起......
另外,我正在使用这种方法将COMPANY_ID 和COUPON_ID 加入COMPANY_COUPON 表中,也许有更好的方法。
@Override
public void linkCompanyCoupon(long companyID, long couponID) throws CouponSystemException {
Connection connection = pool.getConnection();
String CREATE_COUPON = "INSERT INTO COMPANY_COUPON (COMPANY_ID, COUPON_ID) VALUES (?,?)";
try (PreparedStatement pstmt = connection.prepareStatement(CREATE_COUPON)) {
pstmt.setLong(1, companyID);
pstmt.setLong(2, couponID);
pstmt.executeUpdate();
} catch (SQLException e) {
throw new CouponSystemException("Linking company to the coupon is failed. ", e);
} finally {
pool.returnConnection(connection);
}
}
这个是创建优惠券,里面我用linkCompanyCoupon();
public void createCoupon(Coupon coupon) throws CouponSystemException {
// Checking if name of the new coupon is not duplicate
Optional<Coupon> isCouponTitleDuplicate = Optional.ofNullable(couponDBDAO.getCouponByTitle(coupon.getTitle()));
if (!isCouponTitleDuplicate.isPresent()) {
couponDBDAO.createCoupon(coupon);
companyDBDAO.linkCompanyCoupon(loggedCompany, couponDBDAO.getCouponByTitle(coupon.getTitle()).getId());
} else {
throw new CouponSystemException("Coupon title: " + coupon.getTitle()
+ " already exists in database, titles and IDs of the coupons must be unique.");
}
}
【问题讨论】:
-
COMPANY_COUPON表有什么意义?如果每张优惠券属于一家公司,只需在表COUPON中存储对COMPANY.ID的引用。 -
是的,每张优惠券都属于一个公司,你能解释一下怎么做吗?或者您的意思只是向包含 COMPANY_ID 的 COUPON 表添加新字段?
标签: sql join jdbc foreign-keys derby