单个单元格中的多个输入

时间:2017-08-17 03:27:12

标签: mysql

我已经看到这个问题得到了回答,但是在另一个例子中,它得到了一些建议以及必要的信息。我相信,我和其他人的背景完全不同。

我的目标是制作一种包含3种表类型的词典:

表1 :包含所有参赛作品的主词典

包含主键整数;英文单词;中文字;主题(即动物,食物等 - 这就是我想要为单个细胞提供多个条目的地方,因为有些单词对于多个主题是可行的);词性(动词,名词等); determininer boolean; determininer(如果boolean为true,它将包含一个字符串,如果为false,则它将具有null值);添加日期;难度等级

表2(组):根据主题,每个主题都有自己的表:动物,食物,测量等。

此表包含计数整数或表键;英文单词;中文字;它所属的词性;一个计数器(在我的申请中使用了多少次)。

表3(组):语音表的各个部分。每个表都将以其特定的语音分支命名。 nounProper,nounCommon,actionVerb等。

将包含整数键;英文单词;中文字

此数据库的目的是提供一个句子生成程序,该程序可以随着我的进展添加词汇表和主题表。在表1中,当我们跨越多个主题时,我是否应该在单元格中创建多个条目,或者我应该完全忽略它并简单地在查询中而不是在db表本身中组装表格?

1 个答案:

答案 0 :(得分:0)

尝试一下这样的架构:

CREATE TABLE `words` (
  `id`         serial PRIMARY KEY,
  `english`    varchar(255) NOT NULL,
  `chinese`    varchar(255) NOT NULL CHARACTER SET utf8mb4,
  `determiner` varchar(255),
  `added`      date NOT NULL,
  `difficulty` tinyint unsigned NOT NULL DEFAULT 1
);

CREATE TABLE `topics` (
  `id`    serial PRIMARY KEY,
  `topic` varchar(255) NOT NULL
);

CREATE TABLE `word_topics` (
  `word_id`  integer,
  `topic_id` integer,
  PRIMARY KEY (`word_id`, `topic_id`),
  FOREIGN KEY (`word_id`) REFERENCES `words`(`id`),
  FOREIGN KEY (`topics_id`) REFERENCES `topics`(`id`)
);

CREATE TABLE `parts_of_speech` (
  `id`             serial PRIMARY KEY,
  `part_of_speech` varchar(255) NOT NULL
);

CREATE TABLE `word_pos` (
  `word_id` integer,
  `pos_id`  integer,
  PRIMARY KEY (`word_id`, `pos_id`),
  FOREIGN KEY (`word_id`) REFERENCES `words`(`id`),
  FOREIGN KEY (`pos_id`) REFERENCES `parts_of_speech`(`id`)
);

这样的查询:

SELECT `w`.*, `topic`, `part_of_speech`
FROM `words` AS `w`
LEFT JOIN `word_topics` AS `wt` ON `w`.`id` = `wt`.`word_id`
LEFT JOIN `topics` AS `t` ON `t`.`id` = `wt`.`topic_id`
LEFT JOIN `word_pos` AS `wp` ON `w`.`id` = `wp`.`word_id`
LEFT JOIN `parts_of_speech` AS `p` ON `t`.`id` = `wp`.`pos_id`

以上编辑......

按主题获取随机词:

SELECT `w`.*, `topic`, `part_of_speech`
FROM `words` AS `w`
LEFT JOIN `word_topics` AS `wt` ON `w`.`id` = `wt`.`word_id`
LEFT JOIN `topics` AS `t` ON `t`.`id` = `wt`.`topic_id`
LEFT JOIN `word_pos` AS `wp` ON `w`.`id` = `wp`.`word_id`
LEFT JOIN `parts_of_speech` AS `p` ON `t`.`id` = `wp`.`pos_id`
WHERE `wt`.`topic_id` = ?
ORDER BY random()
LIMIT 1

您还可以使用WHERE / AND关键字(替换或)为OR子句添加其他条件...