【发布时间】:2012-02-18 03:26:53
【问题描述】:
我需要为以下问题设计一个数据库模式。考虑一下对一些示例短语的简化语法“分析”:
- '非常不称职的出租车司机'
- Extra-₁ ordinari₂ -ly₃
- in-₁ 胜任 2
- taxi-₁ drive₂ -er₃
在这个模型中,一个句子由一组单词组成,一个单词由一组单词部分/词素组成.众所周知,关系数据库对数组数组不太满意。
我看到了两种解决方案,但不确定如何做出正确的决定。 第一个,“脏”解决方案:将句子与词素联系起来并存储数组索引的单个中间表。列中有很多相同的条目。
CREATE TABLE word ( -- pseudo-SQL
sentence_id FOREIGN KEY,
sentence_order INTEGER,
morpheme_id FOREIGN KEY,
morpheme_order INTEGER );
第二种,“干净”的解决方案:三个(!)中间表,使用起来可能很慢且不舒服?请注意 word 表是如何只为两个要使用的外键表提供 ID 的。
CREATE TABLE sentence_word (
sentence_id FOREIGN KEY,
word_id FOREIGN KEY,
order INTEGER );
CREATE TABLE word ( id );
CREATE TABLE morpheme_word (
morpheme_id INTEGER FOREIGN KEY,
word_id INTEGER FOREIGN KEY
order INTEGER );
我通常更喜欢干净的解决方案,但这里的干净解决方案给人一种笨拙的感觉。顺便说一下(Django),我正在尝试使用 Web 框架 ORM 来做到这一点。
【问题讨论】:
-
老实说,我的 2cts 是关系数据库对于 NLP(自然语言处理)来说是一个糟糕的起点。否则你的第二个设计是有意义的(不知何故)。
-
一些关系型数据库(如Oracle)有嵌套表的概念(orafaq.com/wiki/NESTED_TABLE),可以用来实现数组的数组。
-
是的,有些数据库支持数组类型; MongoDB 允许类似的东西。但考虑到我正在使用的框架,我正在寻找一种技术含量更低/真正的关系解决方案(MySQL 或 PostgreSQL 可以)。
标签: django database database-design relational-database