0

我需要创建一个跟踪项目的应用程序。所以我有许多项目,每个项目都有 ID、名称和所有者等属性。每个项目下都会有很多任务。每个任务都将具有 ID、名称、完成状态、优先级和所有者等属性。

现在,当我为这个应用程序设计一个数据库时,我想到了两种可能的设计。我不知道哪个是更好的设计。如果您能告诉我以下设计中更好的设计,那就太好了,请不要忘记提及为什么其中一个得分高于另一个。

以下是方法。

方法 1. 在数据库中有 2 个表。一个是项目表,另一个是任务表。任务表将具有项目 ID 的外键,它将特定任务链接到它所属的项目。这种方法相对于下面另一种方法的基本区别因素是,所有任务,无论它属于哪个项目,都将存储在一个且只有一个表中,其长度可以无限增长。

方法 2. 有一个 Project 表,并为每个项目动态创建一个表,其中仅包含该项目的任务。因此,任务表的数量与项目表中的行数一样多。可能存在一种算法,我们可以通过该算法得出动态创建的表的名称。然后,当我们想要查询特定表时,可以使用此逻辑来获取特定表的名称。尽管看起来很麻烦,但我在这种方法中看到的优势是,特定项目的所有任务都将仅在一个表中,其长度不会失控(至少不会像上述情况那样多)。但是表的数量可能会无限增长。

4

1 回答 1

3

方法1更好。您不想为每个项目创建一个表。这是反规范化。您的表格如下所示:

(伪代码)

CREATE TABLE project (
  projectId int NOT NULL PRIMARY KEY
  name varchar,
  owner varchar);

CREATE TABLE task (
  taskId int AUTO_INCREMENT PRIMARY KEY,
  projectId int NOT NULL,
  name varchar,
  completionStatus varchar,
  priority int,
  owner varchar,
  FOREIGN KEY projectId
    REFERENCES project.projectId)
于 2013-05-15T15:45:03.903 回答