我正在构建一个数据库来管理 POS 系统(菜单项、收银员等)的定义。它将包括许多商店和许多版本。
因此,典型的表格将如下所示(MenuItems 表格)...
StoreID PK
VersionID PK
MenuItemID PK
MenuItemName
但我想将 StoreID 和 VersionID 合并为一个表示商店和版本的 ID(因此,商店 101 的版本 5)。所以,我简化了每个表的主键(因为每个表都需要这个)
然后让我的桌子看起来像这样......
SomethingID PK
MenuItemID PK
MenuItemName
请帮我命名 StoreIDAndVersionID 字段。我不知道该怎么称呼它。
您不应在同一列中保留两个(或更多)不同的值,每个值都来自不同的域,因为该过程只会给限制、操作(插入、修改、删除和检索)、一般维护和解释带来不必要的复杂性的数据。有关某些相关方面的信息,请参阅@PerformanceDBA发布的相关 Stack Overflow 帖子。
我绝对会将每个上下文相关的单独数据保留在其相应的、专用的、受约束的和有意义的列中。因此,在您的场景中,我会设置(a)一个特定的列来保存
StoreId
和(b)一个单独的列来保存VersionId
所有相关表中的,例如您在第一个示例中提供的。这种方法避免了手动提取和验证包含在组合列中的每个单独值,这是非常重要的,因为所述操作会破坏系统速度,并且很可能最终还会损害数据完整性。如果您想合并这些列以满足某些特定的信息显示要求,您可以通过 SELECT 语句或可能借助您的应用程序代码动态连接它们的值,然后将它们显示在一个单一的列给您的数据用户。例如,此计算列或派生列的一些可行名称可以是
StoreId and VersionId
、StoreId & VersionId
、或,因为这些名称将表达两个不同数据点的“纯粹说明性”混合。StoreId – VersionId
StoreId / VersionId
VersionId for StoreId