PHPMyAdmin 如何建立关系的数据类型集

PHPMyAdmin How to do datatype set of relationships

今天我决定在 PHPMyAdmin 中实现一点点自动化,因此我创建了很多关系,但有一个问题。例如,我有两个 tables:foodRaws 和过敏原。在 foodRaws table 中,我有名称、标签等列和过敏原。所以我在 foodRaws.allergens 和 allergens.ID 之间创建了关系。现在,当我编辑或插入 foodRaws 时,我可以直接将过敏原的 select ID 放入 foodRws.allergens 字段。但只有一个?例如,当我有 selected 过敏原 ID 6 并且我想添加 ID 7 时,它会替换 ID 6。但我需要创建类似“6;7”的内容。所以我为这个字段创建数据类型 SET ('1','2',...,'14'),但它以同样的方式工作,我不能为这个字段 select 超过 1 个 ID。你有什么解决办法吗?

表格:

CREATE TABLE IF NOT EXISTS `raws` (
  `id` int(10) unsigned NOT NULL,
  `nameCzech` varchar(50) COLLATE utf8_czech_ci NOT NULL,
  `nameEng` varchar(50) COLLATE utf8_czech_ci NOT NULL,
  `tags` varchar(100) COLLATE utf8_czech_ci NOT NULL,
  `allergens` set('','1','2','3','4','5','6','7','8','9','10','11','12','13','14') COLLATE utf8_czech_ci DEFAULT NULL
) ENGINE=MyISAM AUTO_INCREMENT=78 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

CREATE TABLE IF NOT EXISTS `allergens` (
  `id` enum('1','2','3','4','5','6','7','8','9','10','11','12','13','14') COLLATE utf8_czech_ci NOT NULL,
  `nameCzech` varchar(50) COLLATE utf8_czech_ci NOT NULL,
  `nameEng` varchar(50) COLLATE utf8_czech_ci NOT NULL,
  `detailCzech` varchar(150) COLLATE utf8_czech_ci NOT NULL,
  `detailEng` varchar(150) COLLATE utf8_czech_ci NOT NULL,
  `img` varchar(15) COLLATE utf8_czech_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

和数据:

INSERT INTO `allergens` (`id`, `nameCzech`, `nameEng`, `detailCzech`, `detailEng`, `img`) VALUES
('1', 'Obiloviny obsahující lepek', 'Cereals containing gluten', 'pšenice, žito, ječmen, oves, špalda, kamut nebo jejich hybridní odrůdy', 'wheat, rye, barley, oats, spelled, kamut or their hybrids', 'cerreals'),
('2', 'Korýši', 'Crustaceans', 'a výrobky z nich', 'and products made from them', 'crustaceans'),
('3', 'Vejce', 'Eggs', 'a výrobky z nich', 'and products made from them', 'eggs'),
('4', 'Ryby', 'Fishs', 'a výrobky z nich', 'and products made from them', 'fish'),
('5', 'Arašídy', 'Peanuts', 'a výrobky z nich', 'and products made from them', 'peanuts'),
('6', 'Sójové boby', 'Soya beans', 's výjimkou zcela rafinovaného sójového oleje a tuků', 'except for fully refined soybean oil and fats', 'soya'),
('7', 'Mléko', 'Milk', 'a mléčné výrobky', 'and products made from milk', 'milk'),
('8', 'Suché skořápkové plody', 'Dry nuts', 'mandle, lískové ořechy, vlašské ořechy, kešu ořechy, pekanové ořechy, para ořechy, pistácie, ořechy makadamie a queensland', 'almonds, hazelnuts, walnuts, cashews, pecans, Brazil nuts, pistachios, macadamia nuts and Queensland', 'nuts'),
('9', 'Celer', 'Celery', 'a výrobky z celeru', 'and products made from celery', 'celery'),
('10', 'Hořčice', 'Mustard', 'a výrobky z hořčice', 'and products made from mustard', 'mustard'),
('11', 'Sezamová semena', 'Sesame seeds', 'a výrobky z nich', 'and products made from them', 'sesame'),
('12', 'Oxid siřičitý', 'Sulphur dioxide', 'a siřičitany v koncentracích vyšších než 10mg/kg nebo 10mg/l', 'and sulphites at concentrations greater than 10mg/kg or 10mg/l', 'sulphurs'),
('13', 'Vlčí bob', 'Big-leaved Lupine', 'a výrobky z vlčího bobu', 'and products made from lupine', 'lupine'),
('14', 'Měkkýši', 'Molluscs', 'a výrobky z nich', 'and products made from them', 'molluscs');

INSERT INTO `raws` (`id`, `nameCzech`, `nameEng`, `tags`, `allergens`) VALUES
(1, 'Vepřová plec bez kosti', 'Pork shoulder, boneless', '2', ''),
(2, 'Olej rostlinný', 'Vegetable oil', '', ''),
(3, 'Cibule loupaná', 'Peeled onion', '', ''),
(4, 'Paprika mletá', 'Paprika powder', '', ''),
.
.
.
(29, 'Majonéza', 'Mayonnaise', '', ''),
.
.
.

在 ID 29 中,我需要有过敏原 3,6 和 7。如果 PHPMYAdmin 只允许我添加一个,尽管我有数据类型 SET,该怎么做?

将其建模为 many-to-many relationship 会更好。

您需要添加包含列(例如)allergen_idraw_id 的 link table。然后,您可以在 raws 中的每个条目中拥有多个记录,并将每个记录附加到 allergens 中的多个记录,而根本不使用 SET 数据类型