簡體   English   中英

mysql - 向表中添加列或創建新表並加入

[英]mysql - add columns to a table or create new table and join

我有以下設置:

一個包含n列的表,包含讓我們說...披薩的詳細信息。 此時有4種比薩餅直到現在所有的比薩餅都有相同的細節,每個細節都保存在一列中。

但是現在出現了一種叫做超級披薩的新披薩,它還有兩種需要保存的細節。

有兩種方法可以做到這一點(我可以考慮):

  1. 添加到現有表的列,並將其留空/ null /其余4種比薩餅類型

  2. 創建一個包含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;

SQL小提琴

我建議使用第一個選項。 因為第二個選項比第一個選項保留更多的資源,所以需要更多的時間過程。

由於您提到的第一個選項的缺點非常明顯,但是當您需要更多列時,則將新內容添加到該現有表中。

好吧,我建議只創建一個包含屬性的表(idPizza,newDetail)並保存數據,如下所示

idPizza,newDetail1 1 1細節2 2細節3超細節3超細節第二

MAke idPizza,newDetail1為主要版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM