0

我正在设计一个实验室数据库。多个产品、样品等由具有多个部分的复合数字标识,这些部分表示不同的值,例如:产地、日期、类型、今天的 ID 等。复合数字的示例可能包括驾驶执照号码 (X44-555-3434) , 批号 (XBR-A26-500-2)。

复合数应该如何存储在数据库中?它们应该存储为字符串还是应该单独存储(或派生)合数的每个分量?

注意:如果不能普遍回答问题,请使用 Oracle。

4

5 回答 5

8

根据我的经验,如果字符串中的元素有意义,最好将它们放在自己的字段中。我们试图梳理出含义的体操是复杂且容易出错的;当我们明确处理每个字段时,也更容易进行数据验证。构造复合字符串很容易,很容易在构造的字符串上搜索(尽管有时很难索引)。细粒度的存储一直对我最有效。

于 2009-07-15T23:01:13.243 回答
3

这取决于您最终要查询的内容。如果要单独查找字符串的某些部分,请单独保存。如果您想查找整个代码(有或没有破折号,可以处理),请将其存储为单个字符串。

于 2009-07-15T22:29:16.147 回答
1

这些数字的推导可能会改变吗?预计这会如何影响应用程序?

例如,多年前英国的汽车牌照以三个字母开头(我认为它表示一个地区),然后是三个数字,然后是另一个表示注册年份的字母。

最终,他们用完了后缀的字母,并改变了订购顺序,因此您可能拥有“A 123 ABC”,而不是“ABC 123 A”,并且有可能同时注册两辆汽车,一个带有“ABC 123 A”,另一个带有“A 123 ABC”。哦,然后他们“加快”了单字母年份指示器的使用(因为很多人在购买汽车之前一直等到新字母生效),所以它不再表示年份。

如果您只对车牌感兴趣,那么最好将车牌存储为一个值。然而,负责发布数字的应用程序可能需要将它们分解为它们的组件。

于 2009-07-16T05:36:55.913 回答
1

此外,如果您决定将它们存储在单独的列中,最好从它们中创建一个唯一键(包含所有列的唯一键)。

于 2009-07-15T22:31:39.853 回答
1

我将分别存储复合数的每个编码部分,可能作为代码要表示的实际值(即,而不是将“XBR”存储“2007 年 1 月 12 日”作为时间戳存储)。但这取决于您是否希望更频繁地通过编码复合数字或通过它们的实际语义来查找项目。

然后,我也会将代码和实际值之间的映射保留在数据库中的某个位置。所以我有几个小表,每个表存储两列,一列代表代码,另一列代表例如时间戳。

于 2009-07-15T22:41:47.040 回答