我有一个有效的SQLite数据库,其中包含有关视频文件的信息。目前的设计如下图所示。但是,老板决定做出一些改变。
FileProperties 表目前使用文件名作为主键。但是,PK现在必须是 fileName 和(文件)位置的复合键,这无论如何都更有意义。
如果这样做了,那么将这个复合键作为外键引用到其他表中的最佳方法是什么?我想要创建一个包含自动递增主键的单独表, fileName 和位置。然后PK可以用作所有其他表的外键引用。
或者,将 fileName 和位置设置为当前 FileProperties 表中的复合键,并添加一个可用作参考的新字段并且该字段必须在表中自动递增和唯一。
我在设计数据库方面没有太多实际经验,所以对我的问题或我目前的设计提出任何建议都是非常受欢迎的。
答案 0 :(得分:3)
添加自动递增的FileId主键 为Location + FileName添加唯一约束 避免使用复合主键。
答案 1 :(得分:3)
绝对使用自动递增主键。要确保数据完整性,请在(文件名,位置)列之间创建唯一索引。
following wiki article简要介绍了自然键的优缺点。自然键是直接从数据中获取的键。在您的情况下,这将是(文件名,位置)的复合键。简而言之,自然密钥减少了数据所需的物理空间,代价是在所有关系中传播对密钥的更改。
我(几乎)总是在表上有一个自动递增的id,即使有一个可用的自然键。