【问题标题】:Database design advice数据库设计建议
【发布时间】:2011-05-19 08:14:52
【问题描述】:

我有一个有效的 SQLite 数据库,其中包含有关视频文件的信息。目前的设计如下图所示。但是,老板决定做出一些改变。

FileProperties 表当前使用文件名作为主键。但是,现在 PK 必须是 fileName 和 (file) location 的复合键,无论如何这更有意义。

如果这样做,在其他表中将此复合键作为外键引用的最佳方法是什么?我正在考虑创建一个单独的表来保存自动递增的主键、fileNamelocation。然后 PK 可以用作所有其他表的外键引用。

或者,将 fileNamelocation 设为当前 FileProperties 表中的复合键,并添加一个可用作参考的新字段并且该字段必须是自动递增的并且在表中是唯一的。

我在设计数据库方面没有太多实践经验,因此非常欢迎对我的问题或我当前的设计提出任何建议。

【问题讨论】:

  • 确保您的文件名和位置足够大。如果“位置”是路径,那么它很可能大于 50。此外,NVARCHAR 可能是文件名的更好选择。
  • +1 大火。 NVARCHAR 应该是默认值,除非很有可能需要更大的空间。尤其是 Oracle - 文本字段存储为大对象,使用起来很痛苦。

标签: sql database-design


【解决方案1】:

绝对使用自动递增的主键。为确保数据完整性,请在(文件名、位置)列中创建唯一索引。

following wiki article 简要介绍了自然键的优缺点。自然键是直接取自数据的键。在您的情况下,这将是(文件名,位置)的复合键。简而言之,自然键减少了数据所需的物理空间,代价是在所有关系中传播对键的更改。

我(几乎)在表上总是有一个自动递增的 id,即使有可用的自然键。

【讨论】:

    【解决方案2】:

    添加自动递增的 FileId 主键。
    为 Location + FileName 添加唯一约束。
    避免使用复合主键。

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 2011-08-05
      • 2014-10-22
      相关资源
      最近更新 更多