数据库设计;动态创建表

时间:2013-05-15 15:43:41

标签: database-design database-schema

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

现在,当我为此应用程序设计数据库时,会想到两种可能的设计。我不知道哪一个是更好的设计。如果你能让我知道下面的设计中更好的设计,那就太棒了,请不要忘记提到为什么一个得分超过另一个。

以下是方法。

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

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

1 个答案:

答案 0 :(得分: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)