我在餐馆的mysql中有一个表,我想为餐馆所属的类别存储一个数组。我应该怎么做,因为mysql没有数组部分。所以我想要的是这样的:
id|name |categories |
1|chipotle|[mexican,fast_food]|
我该怎么做?
答案 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。