请原谅我可能是一个愚蠢或明显的问题-我是数据库新手。
我正计划从Java将文件路径链接存储到磁盘上的Derby数据库中,但我对设置表的最佳方法感到好奇。
仅说明一下,我不打算将实际媒体存储在数据库中,仅存储文件路径。
该表将包含约1万至10万行。
我相信文件路径应该是主键,因为它唯一地标识了每个媒体文件。
设置带有文件路径的表并能够有效搜索(最主要的是查找文件名中的子串,还可以查找媒体属性)的最佳选择是什么?
我计划使用VARCHAR(4096)
,因为最大Linux路径长度为4096个字符。
以这种方式创建表是否有优点或缺点,并且在很长的VARCHAR列上有索引?您如何建议我设计桌子?
谢谢!
请勿将长字符串用作主键。
使用合成主键。
这里是一些原因:
1
与l
或O
与0
的情况。定义自动递增/识别/串行主键。您始终可以将URL声明为unique
,因此它不会重复(尽管某些数据库可能不允许索引中使用如此长的键)。
免责声明:这是一个非常个人的看法,可能很多人会不同意。
您正在考虑使用“自然键”,我反对使用它们。自然键是对象的现有属性,可以唯一地标识它,直到不能识别为止。
就像我的全名,我在我的国家的身份证号码。这些属性似乎是唯一的,但是问题在于它们不是stable。它们是可见的现有已知属性;这种可见性使他们容易改变。这意味着它们会及时[[将改变。如果我改名字,我会是同一个人吗?
也通常将键与其他表进行链接。大PK并不适合这样做。但这更多是一个实际问题。
我建议您使用简单的INT或BIGINT作为主键,并向path属性添加UNIQUE约束。这样,您的模型将更加灵活。如果将介质移动到另一个路径,则只需要更新表中的单个值即可。如果路径是PK,则您需要更新与其相关的所有外键。