2011-05-19 150 views
3

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

enter image description here

FileProperties表目前使用的文件名作为主键。然而,PK现在必须是文件名称和(文件)位置的复合关键字,无论如何,这更有意义。

如果这样做了,将这个复合键作为外键引用到其他表中的最佳方法是什么?我想创建一个单独的表,其中包含一个自动递增的主键,文件名位置。然后PK可以用作所有其他表的外键引用。

或者,让文件名位置组合键在当前FileProperties表并添加可以作为参考,这个字段必须是自动递增的和独特的表中的一个新的领域。

我还没有太多的设计数据库实践经验,所以任何与我的问题或我目前的设计意见将非常受欢迎。

+1

确保您的文件名和位置足够大。如果“位置”是一个路径,那么它可能会比50大。另外,对于文件名,NVARCHAR可能是更好的选择。 – Blazes 2011-05-19 08:23:09

+0

+1布拉斯。 NVARCHAR应该是默认的,除非很有可能需要更大的空间。特别是对于Oracle--文本字段以大型对象的形式存储,这是一个很难使用的问题。 – 2011-05-19 08:28:55

回答

3

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

following wiki article简要介绍了自然钥匙的优缺点。自然键是直接从数据中获得的关键。在你的情况下,这将是(文件名,位置)的组合键。简而言之,一个自然的密钥减少了数据所需的物理空间,代价是在所有关系中传播密钥的变化。

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

3

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