mysql - 向表中添加列或创建新表并加入

时间:2013-05-10 07:08:34

标签: mysql database

我有以下设置:

包含n列的表格,其中包含...披萨详细信息。此时有4种比萨饼 到目前为止,所有披萨都有相同的细节,每个细节都保存在一列中。

但是现在出现了一种叫做超级披萨的新披萨,还有另外两种需要保存的细节。

有两种方法可以做到这一点(我可以考虑):

  1. 添加到现有表的列,并将其留空/ null /其余4种披萨类型

  2. 创建一个包含3列的新表(idPizza,newDetail1和newDetail2),将比萨保存为其余的比萨饼,当我获取数据时加入2个表

  3. 第一个选项的缺点是我为所有比萨保留了无用的数据,除了新类型(平均比萨分布的80%表)。

    第二种选择的缺点是,每次我得到新的披萨,我都需要加入。 db也会有点“混乱”......将披萨元素的一部分存储在表格中,将其他部分存储在另一个表格中。

    我知道最终是一个品味问题,但您认为我应该怎么做?我倾向于第一选择,但欢迎第二种意见。

    作为注释:表格中有很多条目(如数万条)。

    第二个音符(基于答案):无法重构“披萨”表,只需添加即可。

3 个答案:

答案 0 :(得分:1)

而不是这个你可以使用如下的平面表概念,以便在将来为具有更多细节的新比萨添加没有特征

 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 Fiddle

答案 1 :(得分:0)

我建议使用第一个选项。因为第二个选项比第一个选项保留更多的资源,所以需要更多的时间过程。

由于您提到的第一个选项的缺点非常明显,但是当您需要更多列时,请将新内容添加到该现有表中。

答案 2 :(得分:0)

我建议只创建一个包含属性的表(idPizza,newDetail)并保存数据如下

idPizza,newDetail1 1 1细节 2 2细节 3个超级细节 3超级细节第二

MAke idPizza,newDetail1为主要