在mySql中存储数组

时间:2015-08-04 20:02:28

标签: python mysql

我在餐馆的mysql中有一个表,我想为餐馆所属的类别存储一个数组。我应该怎么做,因为mysql没有数组部分。所以我想要的是这样的:

id|name    |categories         |
 1|chipotle|[mexican,fast_food]|

我该怎么做?

2 个答案:

答案 0 :(得分:1)

好的,给我一两分钟来添加样本数据和FK

create table food
(
    id int auto_increment primary key,
    name varchar(100) not null
);

create table category
(
    id int auto_increment primary key,
    name varchar(100) not null
);

create table fc_junction
(   -- Food/Category junction table
    -- if a row exists here, then the food and category intersect
    id int auto_increment primary key,
    foodId int not null,
    catId int not null,

    -- the below unique key makes certain no duplicates for the combo
    -- duplicates = trash
    unique key uk_blahblah (foodId,catId),

    -- Below are the foreign key (FK) constraints. A part of Referential Integrity (RI).
    -- So a row cannot exist with faulty foodId or catId. That would mean insert/update here.
    -- It also means the parents (food and category) row(s) cannot be deleted and thus 
    -- orphaning the children (the children are these rows in fc_junction)
    CONSTRAINT fc_food FOREIGN KEY (foodId) REFERENCES food(id),
    CONSTRAINT fc_cat FOREIGN KEY (catId) REFERENCES category(id)
);

所以你可以自由添加食物和类别,然后通过联结表将它们连接起来。你可以创建chipotle,墨西哥卷饼,热狗,柠檬水等。在这个模型中(普遍接受的方式=“不要做任何其他方式),你不需要知道食物的类别,直到你感觉到喜欢它。

以逗号分隔的原始方式(a.k.a.错误的方式),你有零 RI ,你可以打赌不会使用快速索引。再加上你的数据,修改,删除一个类别,添加一个,所有这些都是一个kludge,并且有很多咆哮和咬牙切齿。

答案 1 :(得分:0)

请参阅How to store arrays in MySQL?,您需要创建一个单独的表并使用join

或者你可以使用Postgres,http://www.postgresql.org/docs/9.4/static/arrays.html