SQL结构,唯一列的动态两列

时间:2015-02-15 00:06:13

标签: sql sql-server database database-design mysqli

我不确定哪个更快。我需要存储可能的数据列表。

目前我有一个SQL表,其中使用php访问以下结构。

boxID
place
name  -- (serialNum, itemNum, idlock, etc, etc)
data
--(Note: The Primary Key here would be boxId, place, name, and data, to prevent duplicate data.)

我这样设置的原因是为了防止为每个命名数据创建列。它有可能在将来拥有5-10个不同的命名数据或更多。还可以在一周内为一个命名数据存储1,000-10,000个数据条目。它也会被搜索,就像我从特定的serialNum中获取位置,然后获取与该位置相关的所有数据。 (特定的serialNum,itemNum,idLock等等)

但我担心的是我的结构可能比为每个命名数据创建一个命名列要慢。例如:

boxID
place
serialNum
itemNum
idLock
etc
etc
--(Note: Not even sure how to add keys to this if i would do it this way)

总结一下:哪种做法更快更好?(请记住,我仍然是SQL的新手)

1 个答案:

答案 0 :(得分:2)

最佳做法是将数据建模为具有特定属性的实体。通常,实体最多只有几十个属性。实体通常会变成表格,而属性通常会变成列。也就是说,物理模型和逻辑模型通常非常相似。

可能还有其他一些考虑因素。例如,行可以拥有的列数有限制 - 如果您有更多列,则需要另一个解决方案。类似地,如果数据是稀疏的(即,大多数值为NULL),则具有大量未使用的列可能是浪费空间。也就是说,以另一种格式存储它更有效。由于这个原因,SQL Server提供了稀疏列。

我的建议是,您可以使用命名列以直观的方式设计表格。每周1,000到10,000行的数据量并不是那么多。每年变成50,000到500,000行,SQL Server应该能够轻松处理该卷。你不会说你有多少个命名实体,但是对于现代数据库来说,包含数百万或数千万行的表是非常合理的。