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