2015-06-02 114 views
1

我遇到了一個問題,試圖瞭解我的表應該如何與我的數據庫相關聯。我是一個初學者,並試圖自己研究。該表是低於外鍵關係沒有意義,有沒有更好的方法?

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表中的記錄也讓我們說兩個不同的比薩餅,這意味着兩個不同的pizza_ids?我正在考慮讓PIZZA_ORDER的主鍵不是唯一的,並且每個實際訂單都有x個記錄。但我不確定這是如何工作的。再次感謝你們在這方面的任何亮光。

+0

你的比薩表需要一個外鍵Pizza_Order表,你有它向後 – reggaeguitar

+0

你,先生,有許多一對多的關係存在。見http://stackoverflow.com/questions/1273715/many-to-many-relationship-in-database-design – kittykittybangbang

+0

@kittykittybangbang謝謝,是的,我有一個多對多的比薩餅和比薩餅。我想在將來,如果可能的話,我應該儘量避免多對多。謝謝你的幫助。 – Rusty

回答

1

銷售訂單的hasMany銷售訂單行項目

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節省時間:)

+0

這正是我最終做的,我消除了我的多對多關係,並創建了引用訂單和產品的額外LINE_ITEMS表。然後我只在表格之間建立了一對多的關係。謝謝你的幫助 – Rusty

0

你還是有pizza_order之間的關係,以pizza表和pizza_orderCustomer之間。這就像說,每個披薩都與一個/多個比薩餅訂單有關;而每個披薩訂單都與一個/更多客戶有關。

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) 
); 
相關問題