在代码中,可以指定全局可访问的常量/枚举/ etc,然后可以在整个应用程序中重用它们。这使得能够使用有意义的名称,如'Mazda',而不是像'2'这样的数字。
我们希望在SQL Server存储过程中执行相同操作,但不确定实现此方法的最佳方法。
以下表格(众所周知的汽车模式):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
所以不要写
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
我们想写类似
的内容SELECT * FROM Car WHERE ManufacturerId = @Nissan
我们的一个限制是我们不能依赖于制造商。名称在应用程序的生命周期中保持不变。我们确实考虑过一个永远不会改变的“Code”列,并且这样的联接被查找起来:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
我对此有点犹豫,因为它使用了一个额外的连接和字符串比较,可以拼写错误。
在不必在每个存储过程中声明变量的情况下,完成此操作的最佳方法是什么?
答案 0 :(得分:4)
我们已经做了几个方法:
答案 1 :(得分:1)
您无需在数据库中存储号码。有DB管理员仍然喜欢'自然键'的想法。他们只使用唯一定义制造商的自然键,而不是使用ID。通常这会导致多个主键。您可能必须将“马自达”“加拿大”作为制造商的唯一标识符。
就个人而言,我不喜欢这种方法,并且更喜欢为我的表中存储的每个可识别对象都有一个唯一的ID。这意味着创建一个新表,这是一个查找。 2,'马扎达'。然后,您可以创建一个视图,将“Mazda”拉入数据库中的2,然后针对视图运行查询。 SELECT *来自v_cars,其中maker ='Mazda'