Mysql 单单元多输入
我看到这个问题已经得到了回答,但在另一个例子中,我得到了一些建议和必要的信息。我相信,我和其他人的背景是完全不同的 我的目标是制作一种包含3种表格类型的词典: 表1:包含我所有条目的主词典 包含主键整数;英语单词;汉语词;主题(例如,动物、食物等——这就是我想要为一个单元格设置多个条目的地方,因为一些单词可以用于多个主题);词性(动词、名词等);限定布尔;限定符(如果布尔值为true,则它将包含字符串,如果为false,则它将具有空值);添加日期;难度评定 表2(组):根据主题,每个主题都有自己的表格:动物、食物、测量等 该表将包括一个计数整数或表键;英语单词;汉语词;它所属的词类;计数器(在我的应用程序中使用了多少次) 表3(组):词类表。每个表都将以其特定的分支命名。专有名词、普通名词、动作动词等 将包含一个整数键;英语单词;汉语词Mysql 单单元多输入,mysql,Mysql,我看到这个问题已经得到了回答,但在另一个例子中,我得到了一些建议和必要的信息。我相信,我和其他人的背景是完全不同的 我的目标是制作一种包含3种表格类型的词典: 表1:包含我所有条目的主词典 包含主键整数;英语单词;汉语词;主题(例如,动物、食物等——这就是我想要为一个单元格设置多个条目的地方,因为一些单词可以用于多个主题);词性(动词、名词等);限定布尔;限定符(如果布尔值为true,则它将包含字符串,如果为false,则它将具有空值);添加日期;难度评定 表2(组):根据主题,每个主题都有自己
这个数据库的目的是提供一个句子生成程序,该程序可以随着我的进度添加词汇表和主题表。在表1中,当单元格跨越多个主题时,我是否应该在单元格中创建多个条目,或者我是否应该完全忽略这些条目,而只是在查询中而不是在db表本身中组装该表?尝试一种模式,类似这样:
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
子句添加其他条件…了解数据库规范化。单个单元格中的多个条目违反了规范化规则。好的,所以您编写的部分内容看起来确实可用。我正在使用SQLiteStudio,我寻找了一种将“字符集utf8mb4”添加到模式中的方法,但没有找到一种方法。我应该在文本编辑器中编辑模式吗?我是否缺少SQLiteStudio客户端中的某些内容?另一个问题是,我需要为每个主题设置一个表。原因是我需要创建一个随机方法,该方法将获得一个介于1~.length()之间的数字。因此,键(在给定的主题表中)将包含允许我这样做的整数。您将问题标记为MySQL
,现在您编写了您使用SQLite
。。。我的答案是使用MySQL
语法,特别是字符集
部分。。。