Database design 具有动态列和动态行的关系数据库系统

Database design 具有动态列和动态行的关系数据库系统,database-design,matrix,relational-database,Database Design,Matrix,Relational Database,ppl, 我必须开发一个这样的数据库 CREATE TABLE tbl_Words ( [WordID] BIGINT NOT NULL IDENTITY(1,1), // This s Primary Key [Word] VARCHAR(250) NOT NULL, // This s Unique.. ) CREATE TABLE tbl_WordRelevancy (

ppl, 我必须开发一个这样的数据库

CREATE TABLE tbl_Words
(
      [WordID]      BIGINT          NOT NULL   IDENTITY(1,1),  // This s Primary Key
      [Word]        VARCHAR(250)    NOT NULL,                  // This s Unique..
)


CREATE TABLE tbl_WordRelevancy
(
      [RelID]       BIGINT          NOT NULL   IDENTITY(1,1),   // Primary Key
      [Word1]       VARCHAR(250)    NOT NULL,
      [Word2]       VARCHAR(250)    NOT NULL,
      [Relevancy]   DECIMAL         NOT NULL,
)

这里,我有一个单词列表。我需要保持数据库中每个单词的相关性。当添加新词时,我需要能够添加行和列

我的一个想法是这样的

CREATE TABLE tbl_Words
(
      [WordID]      BIGINT          NOT NULL   IDENTITY(1,1),  // This s Primary Key
      [Word]        VARCHAR(250)    NOT NULL,                  // This s Unique..
)


CREATE TABLE tbl_WordRelevancy
(
      [RelID]       BIGINT          NOT NULL   IDENTITY(1,1),   // Primary Key
      [Word1]       VARCHAR(250)    NOT NULL,
      [Word2]       VARCHAR(250)    NOT NULL,
      [Relevancy]   DECIMAL         NOT NULL,
)
但在这种结构下,如果有100000个单词,在tbl_单词关联表中会有100000*100000个单词。我认为这不好。(该数据库一天最多可增长100万字)
是否可以使用关系数据库结构来维护这个东西?或者,还有什么其他方法可以维持这种结构

你真正想要的是词与词之间的多对多关系

CREATE TABLE words (
  word VARCHAR(250) PRIMARY KEY
);

CREATE TABLE word_relevancies (
  leftword  VARCHAR(250) REFERENCES words,
  rightword VARCHAR(250) REFERENCES words,
  relevance DECIMAL NOT NULL,
  PRIMARY KEY (leftword, rightword)
);
在最初的公式中,您将关系误认为是表。这是学习如何在集合中思考的常见步骤

我强烈建议你读一本关于关系数据库设计的书,比如Joe Celko的SQL for Smarties或Thinking in Set,并熟悉正确的数据库设计。你会省去很多痛苦。

你很接近了

CREATE TABLE tbl_Words
(
      [WordID]      BIGINT          NOT NULL   IDENTITY(1,1),  // This s Primary Key
      [Word]        VARCHAR(250)    NOT NULL,                  // This s Unique..
)
注释不会使WordID成为主键或单词唯一

CREATE TABLE tbl_Words
(
      [WordID] BIGINT  IDENTITY(1,1) PRIMARY KEY,
      [Word]   VARCHAR(250) NOT NULL UNIQUE
);
但我认为你真的在寻找更多类似的东西

create table words (
   word varchar(250) primary key
);

create table word_relevance (
    word_a varchar(250) not null references words (word),
    word_b varchar(250) not null references words (word),
      primary key (word_a, word_b),
      constraint ordered_words check (word_a <= word_b),
    relevance integer not null check (relevance between 0 and 100)
);
创建表格单词(
word varchar(250)主键
);
创建表格词(
word_a varchar(250)非空引用word,
word_b varchar(250)非空引用字(word),
主键(单词a,单词b),

约束有序的单词检查(单词a不是你的表“单词相关性”与OP的“tbl\U单词相关性”本质上相同吗?我承认他有一个错误的M:N关系实现(除其他外),但在我看来,他似乎正在与那张桌子建立M:N关系。你每天从哪里得到一百万个独特的单词?什么语言?