我如何为给定的多个相关类创建表?

时间:2013-12-03 09:32:00

标签: sql database sqlite

我有一个三个类的场景。我打算为它建立数据库。它们之间的关系是:

  • 1个客户与许多物品和许多dv-vouchers相关。
  • 1项与许多客户和许多dv-vouchers相关。
  • 1个dv-vouchers与1个客户和许多项目有关。
public Customer
 {
   int cust_id;
   list<items> items;
   list<dvouchers> dvouchers;
 }
public items
 {
   int itm_id;
   list<Customer>  customers;
   list<dvouchers>  dvouchers;
 }
public dvouchers
 {
   int dv_id;
   Customer customer;
   list<items> items;
 }

首先,上述类,fk_constraints和关系表的数据库表的设计是什么?

第二我是否需要在db表的两个关系表上执行Insert和Update操作?请帮忙 。

2 个答案:

答案 0 :(得分:1)

1。 表中的关系多对多和字段 cust_id 需要两个表 Customer_Item Item_Dvoucher Dvoucher 用于一对一关系。

2。 您需要在基表客户 Dvoucher 中插入或更新数据。然后,您需要在表 Customer_Item Items_Dvoucher 中添加或删除关系。同时在表格 Dvoucher 中填写 cust_id 字段。

在mysql中生成:

CREATE TABLE `Customer` (
  `cust_id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`cust_id`)
)

CREATE TABLE `Dvoucher` (
  `dv_id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) DEFAULT NULL,
  `cust_id` INT(11) DEFAULT NULL,
  PRIMARY KEY (`dv_id`),
  KEY `cust_id` (`cust_id`),
  CONSTRAINT `Dvoucher_ibfk_1` FOREIGN KEY (`cust_id`) REFERENCES `Customer` (`cust_id`)
)

CREATE TABLE `Item` (
  `item_id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`item_id`)
)

CREATE TABLE `Customer_Item` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `cust_id` INT(11) DEFAULT NULL,
  `item_id` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `cust_id` (`cust_id`),
  KEY `item_id` (`item_id`),
  CONSTRAINT `Customer_Item_ibfk_1` FOREIGN KEY (`cust_id`) REFERENCES `Customer` (`cust_id`),
  CONSTRAINT `Customer_Item_ibfk_2` FOREIGN KEY (`item_id`) REFERENCES `Item` (`item_id`)
)

CREATE TABLE `Item_Dvoucher` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `item_id` INT(11) DEFAULT NULL,
  `dv_id` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `item_id` (`item_id`),
  KEY `dv_id` (`dv_id`),
  CONSTRAINT `Item_Dvoucher_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `Item` (`item_id`),
  CONSTRAINT `Item_Dvoucher_ibfk_2` FOREIGN KEY (`dv_id`) REFERENCES `Dvoucher` (`dv_id`)
)

答案 1 :(得分:0)

在SQLite中:

CREATE TABLE customer(cust_id INTEGER PRIMARY KEY, ...);
CREATE TABLE item(itm_id INTEGER PRIMARY KEY, ...);
CREATE TABLE dvoucher(dv_id INTEGER PRIMARY KEY, cust_id REFERENCES customer(cust_id), ...);
CREATE TABLE dvoucher_item(dv_id REFERENCES dvoucher(dv_id), itm_id REFERENCES item(itm_id));
CREATE TABLE customer_item(cust_id INTEGER PRIMARY KEY, itm_id REFERENCES item(itm_id));

作为@Andrei解决MySQL的解决方案,使用dvoucher.cust_iddvouchercostumer相关联,将dvoucher_itemcustomer_item表链接到多对多链接。< / p>