正确的FK PK关系

时间:2009-09-01 18:57:11

标签: database-design

我有一个新的布局,以确定它有3个表

  

UnfiledFiles
SortedFiles
FileVersion

该过程将从UnfiledFile Record和FileVersion开始,并且可以添加多个版本,所有版本都加入到同一个UnfiledFile中 从那里开始,我需要将特定UnfiledFile记录的所有版本与SortedFile记录联系起来。

您认为哪种组织最适合?

2 个答案:

答案 0 :(得分:1)

为什么将UnfiledFilesSortedFiles存储为单独的表?看来,未归档与排序只是文件的属性。

所以你需要两个表:FilesVersionsVersions包含Files的外键。 Files包含属性列is_sorted

CREATE TABLE Files (
  file_id   INT PRIMARY KEY,
  is_sorted INT NOT NULL DEFAULT 0
);

CREATE TABLE Versions (
  file_id    INT NOT NULL,
  version    INT NOT NULL,
  PRIMARY KEY (file_id, version),
  FOREIGN KEY (file_id) REFERENCES Files (file_id)
);

如果您想清楚查询哪些文件,可以创建视图:

CREATE VIEW UnfiledFiles AS SELECT * FROM Files WHERE is_sorted = 0;

CREATE VIEW SortedFiles AS SELECT * FROM Files WHERE is_sorted <> 0;

答案 1 :(得分:0)

UnfiledFiles表中的外键,即SortedFiles表中的主键。

UnfiledFiles表中的外键,即FileVersion表中的主键(假设这也是一对多关系)。