我正在寻找最佳实践方法。我有一个网页,有几个下拉选项。下降与无关,它们是misc。价值(地点,建筑规范等)。数据库现在有一组用于每组选项的表(例如,建筑代码表,位置表等)。我想知道我是否可以将它们全部组合到表(称为listOptions)上,然后只查询一个表。
Location Table
LocationID (int)
LocatValue (nvarchar(25))
LocatDescription (nvarchar(25))
BuildingCode Table
BCID (int)
BCValue (nvarchar(25))
BCDescription (nvarchar(25))
而不是上述内容,我有什么理由不这样做吗?
ListOptions Table
ID (int)
listValue (nvarchar(25))
listDescription (nvarchar(25))
groupID (int) //where groupid corresponds to Location, Building Code, etc
现在,当我查询表时,我可以将查询传递给groupID以拉回我需要的其他值。
答案 0 :(得分:5)
放入一个表是一个反模式。这些是不同的查找,您不能在数据库中强制执行参照完整性(这是强制执行它的正确位置,因为应用程序通常不是数据更改的唯一方式),除非它们位于单独的表中。如果您需要额外的查找,数据完整性比保存几分钟的开发时间更重要。
答案 1 :(得分:1)
如果您计划稍后在某些引用FKeys中使用这些值 - 最好使用单独的表。
但为什么你需要“一体化”表?它解决了哪个问题?
答案 2 :(得分:1)
你可以这样做。 我相信这是你的主数据,它不会有任何可能产生的大量行和性能问题。 其次,为什么一旦你的应用程序启动并运行,你想要这样做。它应该早点考虑过。这些表可能会在很多地方使用,它可能是很多编码,最重要的是测试。 你能否进一步了解你的要求。
答案 3 :(得分:1)
您可以将它们保存在单独的表中,并使您的存储过程返回一组数据,其中包含“数据类型”键,表示哪组值与哪个选项一致。
但是,我建议你考虑采用一种截然不同的方法。此建议基于多年构建数据驱动的网站。如果这些下拉选项不经常更改,那么为什么不构建服务器端包含文件而不是查询数据库。我们在大多数网站上都这样做了。想一想,每次出现页面时,您都会在数据库中查询相同的值列表......数据几乎不会发生变化。
如果数据确实有改变的趋势,我们只需向后端管理员添加一个例程,只要对其中一个查找值进行添加,更改或删除,就会重建服务器端包含文件。这减少了数据库I / O并加快了我们所有网站的加载时间。
我们在同一台服务器上有大约600个网站,所有网站都使用相同的SQL Server实例(单独的数据库),我们的服务器数据库I / O大幅减少。
修改强>
我们只是建立了这样的SSI ......
< option value =“1'> Blue< / option>
< option value =“2'> Red< / option>
< option value =“3'> Green< / option>
答案 4 :(得分:0)
使用单表可以很容易地添加新组以支持创建新表,但是对于最佳实践问题,您还应该有一个组表,以便您可以在数据库中命名这些组以供将来维护
答案 5 :(得分:0)
最佳做法取决于您的要求。 位置和建筑的价值经常变化吗?这些价值来自哪里?它们是从外部数据导入的吗?其他表是否引用了唯一的表(因此我需要一个双字段键来预先连接表)? 例如,我使用带有heorogeneus数据的唯一表来获取常量或配置值。 但是,如果数据经常变化或从外部源导入,我更喜欢使用单独的表。