Java 数据库表设计-使用长列作为主键是否存在任何问题?
请原谅我可能是一个愚蠢或明显的问题-我对数据库是新手 我计划从java将磁盘上媒体文件的文件路径链接存储在Derby数据库中,但我想知道设置表的最佳方法 只是澄清一下,我不打算在数据库中存储实际的媒体,只存储文件路径 该表将包含10k-100k行 我认为文件路径应该是主键,因为它唯一地标识每个媒体文件 设置带有文件路径的表并能够高效搜索(主要搜索文件名中的子字符串,但也搜索媒体属性)的最佳选项是什么 我计划使用Java 数据库表设计-使用长列作为主键是否存在任何问题?,java,sql,database,database-design,derby,Java,Sql,Database,Database Design,Derby,请原谅我可能是一个愚蠢或明显的问题-我对数据库是新手 我计划从java将磁盘上媒体文件的文件路径链接存储在Derby数据库中,但我想知道设置表的最佳方法 只是澄清一下,我不打算在数据库中存储实际的媒体,只存储文件路径 该表将包含10k-100k行 我认为文件路径应该是主键,因为它唯一地标识每个媒体文件 设置带有文件路径的表并能够高效搜索(主要搜索文件名中的子字符串,但也搜索媒体属性)的最佳选项是什么 我计划使用VARCHAR(4096),因为最大linux路径长度是4096个字符 以这种方式创建
VARCHAR(4096)
,因为最大linux路径长度是4096个字符
以这种方式创建一个表,在相当长的VARCHAR列上创建一个索引,有什么优点或缺点?你建议我如何设计这些桌子
谢谢 免责声明:这是一个非常个人的观点,可能很多人会不同意 你正在考虑使用“自然钥匙”,我反对使用。自然键是唯一标识它的对象的现有属性。。。直到它没有
这就像我的全名,我的身份证号码在我的国家。这些属性似乎是独一无二的,但问题是它们并不稳定。它们是可见的现有已知属性;这种可见性使它们容易受到更改的影响。这意味着,它们将随着时间而改变。如果我改名,我会是同一个人吗 此外,键通常用于与其他表进行某种程度的链接。一个大PK并不是很好。但这更像是一个实际问题
我建议您使用简单的INT或BIGINT作为主键,并向path属性添加唯一约束。这样,您的模型将更加灵活。如果将介质移动到另一个路径,则只需更新表中的单个值;如果路径是PK,那么您需要更新与之相关的所有外键。免责声明:这是一个非常个人的观点,可能很多人会不同意 你正在考虑使用“自然钥匙”,我反对使用。自然键是唯一标识它的对象的现有属性。。。直到它没有
这就像我的全名,我的身份证号码在我的国家。这些属性似乎是独一无二的,但问题是它们并不稳定。它们是可见的现有已知属性;这种可见性使它们容易受到更改的影响。这意味着,它们将随着时间而改变。如果我改名,我会是同一个人吗 此外,键通常用于与其他表进行某种程度的链接。一个大PK并不是很好。但这更像是一个实际问题
我建议您使用简单的INT或BIGINT作为主键,并向path属性添加唯一约束。这样,您的模型将更加灵活。如果将介质移动到另一个路径,则只需更新表中的单个值;如果路径是PK,则需要更新与之相关的所有外键。不要将长字符串用作主键 使用合成主键 以下是一些原因:
- 主键的一个重要用途是支持外键。您不希望数据库中到处都是4k字符串,而您可以只使用一个4字节的整数
- 主键的另一个重要原因是唯一地查找每一行。我认识的大多数人不希望必须键入4k字符才能识别行。我打字很快,这对我来说需要时间。我肯定我会在路上的某个地方打字
- 两个字符串可能仅在2017字符上有所不同。我不想知道它们是不同的,特别是当字符是a
与1
或l
与O
时0
定义自动递增/标识/串行主键。您可以始终将URL声明为唯一的,这样它就不会重复(尽管某些数据库可能不允许在索引中使用这样长的键)。不要将长字符串用作主键 使用合成主键 以下是一些原因:
- 主键的一个重要用途是支持外键。您不希望数据库中到处都是4k字符串,而您可以只使用一个4字节的整数
- 主键的另一个重要原因是唯一地查找每一行。我认识的大多数人不希望必须键入4k字符才能识别行。我打字很快,这对我来说需要时间。我肯定我会在路上的某个地方打字
- 两个字符串可能仅在2017字符上有所不同。我不想知道它们是不同的,特别是当字符是a
与1
或l
与O
时0
定义自动递增/标识/串行主键。您可以始终将URL声明为
唯一
,这样它就不会重复(尽管某些数据库可能不允许在索引中使用如此长的键)。非常感谢。对于我的媒体索引数据库,我会不时地重新扫描驱动器以查找新文件。每次要重新扫描时,必须在整个数据库中搜索每个文件的文件路径似乎效率低下,但我认为这是不可避免的。我应该做些什么来加快检查现有文件的速度?我想我只需要选择整个文件表并从中搜索内存,现在对于100k文件来说应该没有问题,但我想知道对于数百万或数十亿个文件来说什么是最佳做法。@localhost。你可以