外键关系没有意义,有没有更好的方法?
Foreign Key relationships are not making sense, is there a better way?
我在尝试了解我的 table 应该如何与我的数据库相关时遇到了问题。我是初学者,并尝试自己研究。 table 如下
CREATE TABLE PIZZA
(
pizza_id INT AUTO_INCREMENT PRIMARY KEY,
pizza_name VARCHAR (255),
pizza_desc VARCHAR (255),
pizza_price DOUBLE
);
CREATE TABLE CUSTOMER
(
cust_id INT AUTO_INCREMENT PRIMARY KEY,
cust_first_name VARCHAR (255),
cust_last_name VARCHAR (255),
cust_street VARCHAR (255),
cust_apt VARCHAR (255),
cust_city VARCHAR (255),
cust_state CHAR(2),
cust_zip CHAR(5),
cust_home_phone CHAR(10),
cust_mobile_phone CHAR(10),
cust_other_phone CHAR(10)
);
CREATE TABLE PIZZA_ORDER
(
pizza_order_id INT AUTO_INCREMENT PRIMARY KEY,
pizza_id INT,
cust_id INT,
order_date TIMESTAMP,
order_quantity INT,
order_notes VARCHAR (255),
FOREIGN KEY (pizza_id) REFERENCES PIZZA(pizza_id),
FOREIGN KEY (cust_id) REFERENCES CUSTOMER(cust_id)
);
我的问题是,如果 PIZZA_ORDER table 中的记录有两个不同的比萨饼,这意味着两个不同的 pizza_ids,这将如何工作?我正在考虑让 PIZZA_ORDER 的主键不是唯一的,并且每个实际订单都有 x 条记录。但我不确定那将如何工作。再次感谢你们对此的任何启发。
一个销售订单有多个销售订单行项目
create table orders (
id int primary key,
...
);
create table order_items (
order_id int references orders(id),
line int,
pizza_id int references pizza(id),
...
primary key (order_id, line)
);
请参阅https://dba.stackexchange.com/questions/12991/ready-to-use-database-models-example/23831#23831以节省时间:)
你应该在 pizza_order
到 pizza
table 和 Customer
到 pizza_order
table 之间建立关系。就像说,每个披萨都与 one/more 披萨订单相关;而每个披萨订单都与 one/more 位顾客有关。
CREATE TABLE PIZZA_ORDER
(
pizza_order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date TIMESTAMP,
order_quantity INT,
order_notes VARCHAR (255),
cust_id int,
FOREIGN KEY (cust_id) REFERENCES CUSTOMER(cust_id)
);
CREATE TABLE PIZZA
(
pizza_id INT AUTO_INCREMENT PRIMARY KEY,
pizza_name VARCHAR (255),
pizza_desc VARCHAR (255),
pizza_price DOUBLE,
pizza_order_id INT,
FOREIGN KEY (pizza_order_id) REFERENCES PIZZA_Order(pizza_order_id)
);
我在尝试了解我的 table 应该如何与我的数据库相关时遇到了问题。我是初学者,并尝试自己研究。 table 如下
CREATE TABLE PIZZA
(
pizza_id INT AUTO_INCREMENT PRIMARY KEY,
pizza_name VARCHAR (255),
pizza_desc VARCHAR (255),
pizza_price DOUBLE
);
CREATE TABLE CUSTOMER
(
cust_id INT AUTO_INCREMENT PRIMARY KEY,
cust_first_name VARCHAR (255),
cust_last_name VARCHAR (255),
cust_street VARCHAR (255),
cust_apt VARCHAR (255),
cust_city VARCHAR (255),
cust_state CHAR(2),
cust_zip CHAR(5),
cust_home_phone CHAR(10),
cust_mobile_phone CHAR(10),
cust_other_phone CHAR(10)
);
CREATE TABLE PIZZA_ORDER
(
pizza_order_id INT AUTO_INCREMENT PRIMARY KEY,
pizza_id INT,
cust_id INT,
order_date TIMESTAMP,
order_quantity INT,
order_notes VARCHAR (255),
FOREIGN KEY (pizza_id) REFERENCES PIZZA(pizza_id),
FOREIGN KEY (cust_id) REFERENCES CUSTOMER(cust_id)
);
我的问题是,如果 PIZZA_ORDER table 中的记录有两个不同的比萨饼,这意味着两个不同的 pizza_ids,这将如何工作?我正在考虑让 PIZZA_ORDER 的主键不是唯一的,并且每个实际订单都有 x 条记录。但我不确定那将如何工作。再次感谢你们对此的任何启发。
一个销售订单有多个销售订单行项目
create table orders (
id int primary key,
...
);
create table order_items (
order_id int references orders(id),
line int,
pizza_id int references pizza(id),
...
primary key (order_id, line)
);
请参阅https://dba.stackexchange.com/questions/12991/ready-to-use-database-models-example/23831#23831以节省时间:)
你应该在 pizza_order
到 pizza
table 和 Customer
到 pizza_order
table 之间建立关系。就像说,每个披萨都与 one/more 披萨订单相关;而每个披萨订单都与 one/more 位顾客有关。
CREATE TABLE PIZZA_ORDER
(
pizza_order_id INT AUTO_INCREMENT PRIMARY KEY,
order_date TIMESTAMP,
order_quantity INT,
order_notes VARCHAR (255),
cust_id int,
FOREIGN KEY (cust_id) REFERENCES CUSTOMER(cust_id)
);
CREATE TABLE PIZZA
(
pizza_id INT AUTO_INCREMENT PRIMARY KEY,
pizza_name VARCHAR (255),
pizza_desc VARCHAR (255),
pizza_price DOUBLE,
pizza_order_id INT,
FOREIGN KEY (pizza_order_id) REFERENCES PIZZA_Order(pizza_order_id)
);