[英]mysql - add columns to a table or create new table and join
我有以下設置:
一個包含n列的表,包含讓我們說...披薩的詳細信息。 此時有4種比薩餅直到現在所有的比薩餅都有相同的細節,每個細節都保存在一列中。
但是現在出現了一種叫做超級披薩的新披薩,它還有兩種需要保存的細節。
有兩種方法可以做到這一點(我可以考慮):
添加到現有表的列,並將其留空/ null /其余4種比薩餅類型
創建一個包含3列的新表(idPizza,newDetail1和newDetail2),將比薩保存為其余的比薩餅,當我獲取數據時加入2個表
第一個選項的缺點是我為所有比薩保留了無用的數據,除了新類型(平均比薩餅分布的80%表)。
第二種選擇的缺點是每次我得到新的比薩餅我都需要加入。 此外,數據庫將是一種“混亂”......將比薩元素的一部分存儲在表中,而將其他部分存儲在另一個中。
我知道最終是一個品味問題,但您認為我應該怎么做? 我傾向於第一選擇,但歡迎第二意見。
注意:表格中有很多條目(如數萬條)。
第二個注釋(基於答案):無法重構“披薩”表,只需添加即可。
而不是這個你可以使用如下的平台概念,以便將來添加沒有特色的新的比薩餅有更多的細節
CREATE TABLE pizza
(
id int auto_increment primary key,
name varchar(20),
details varchar(30)
);
INSERT INTO pizza
(name, details)
VALUES
('pizza1', 'nice pizaa'),
('pizza2', 'nice pizza@sqlfiddle');
CREATE TABLE details
(
id int auto_increment primary key,
name varchar(20)
);
INSERT INTO details
(name)
VALUES
('pizza_size'),
('price');
CREATE TABLE pizza_details
(
id int auto_increment primary key,
pizza_id int(10) ,
details_id int(10) ,
details_value varchar(20)
);
INSERT INTO pizza_details
(pizza_id,details_id,details_value)
VALUES
(1,1,'small'),
(1,2,'Rs 20'),
(1,1,'big'),
(1,2,'Rs 50');
並解雇查詢
select pizza.name as pizza_name,details.name as detail,pizza_details.details_value from pizza_details left join details ON pizza_details.details_id = details.id
left join pizza On pizza_details.pizza_id = pizza.id;
我建議使用第一個選項。 因為第二個選項比第一個選項保留更多的資源,所以需要更多的時間過程。
由於您提到的第一個選項的缺點非常明顯,但是當您需要更多列時,則將新內容添加到該現有表中。
好吧,我建議只創建一個包含屬性的表(idPizza,newDetail)並保存數據,如下所示
idPizza,newDetail1 1 1細節2 2細節3超細節3超細節第二
MAke idPizza,newDetail1為主要版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.