我在ServerFault上发布了这个,并被告知这将是一个更好的地方。
我有一些开发人员的经验,但在SQL管理和数据库设计方面我是一个完整的新手。
我正在使用带有SQL后端的ASP.NET应用程序将我公司的订购和报价流程从excel电子表格转换为更强大的功能。
目前我们的零件数据库只是一个excel电子表格。我们的很多产品都是OEM的路由器,服务器等现成的硬件。我们主要是一个软件商店,所以我们在设备上安装我们的应用程序,配置网络设备并发布我们安装的完整解决方案。科技股。
在我的架构中,我有5个表
OEMProdcuts包含来自Cisco等设备制造商,网络设备或服务器设备戴尔的信息。
SupplierProducts包含有关我们从OEM获得的供应商的信息(因为很多OEM使用经销商)
companyProducts包含特定于我们公司的产品ID。
以下是SQL Server Management Studio的快照:
alt text http://i102.photobucket.com/albums/m108/ArkhamFreak/schema2.jpg
我的问题是:
为这个简单的架构设置主键的最佳方法是什么?我应该使用自动增量字段作为GUID,如图所示,还是OEMProductID,以便在所有表中引用主键?
供应商产品供应商和原始设备制造商的OEM产品对我来说是显而易见的,但其他关系我不太确定。我有点担心,当我将数据添加到引用它的表时,我将不得不通过一个模糊的自动生成ID来引用OEMProducts。由于我们有许多相同设备的供应商,我不确定如何建立这种关系。
感谢您的时间。
答案 0 :(得分:1)
嗯,一些想法:
我肯定不使用SupplierName
作为您的Suppliers表的主键。使用其他东西 - 要么你有一些给定的项目(例如来自其他系统的“供应商编号”)你可以使用,或者如果没有,他们只需使用一个简单的INT(可能带有IDENTITY)来唯一地限定每个供应商
同样适用于Product
(使用ProductID,如果这是唯一且稳定的)和OEM
(再次:使用某种给定的,唯一的信息项,但不是名称,或创建自己的“OEM ID”()
为什么在SupplierProducts
表上有一个SupplierProductID 和一个OEMProductID?可能有一个很好的理由 - 乍一看对我来说并不明显。
我个人不喜欢过度使用GUID - 它们很麻烦,它们又大又胖(与INT相比),它们在SQL Server索引中有各种令人讨厌的后果(索引和表碎片) - 除非你有一个非常合理的GUID理由(比如几个物理位置之间的复制),我通常更喜欢使用INT - 我自己生成的ID,或者我留给数据库来处理(INT IDENTITY)。