如何从多个表中的一个中自动选择?

时间:2015-10-19 18:24:20

标签: php sql-server

如果我接近这个错误,我对我的整体逻辑和设计的建议非常开放。我将首先解释问题和我的解决方案。

我必须收集几种类型的数据(varchar,money,real,bit),但每条记录可以收集0-1000 +的每种类型。例如,记录1可能有40个varchar字段和500个货币字段,需要存储。

所以我想我会制作4个表,每个数据类型一个,如下所示。理论记录1的数据如下所示:

    -----------------------------------------------
    |record(int)|fieldname(varchar)|value(varchar)|
    |-----------|------------------|--------------|
    |1          |field1            |test a        |
    |1          |field2            |test b        |
    -----------------------------------------------
    (imagine 40 rows here total)

    -----------------------------------------------
    |record(int)|fieldname(varchar)|value(money)  |
    |-----------|------------------|--------------|
    |1          |field3            |111           |
    |1          |field4            |222           |
    -----------------------------------------------
    (imagine 500 rows here total)

    -----------------------------------------------
    |record(int)|fieldname(varchar)|value(real)   |
    |-----------|------------------|--------------|
    (no real data to store for record 1)

    -----------------------------------------------
    |record(int)|fieldname(varchar)|value(bit)    |
    |-----------|------------------|--------------|
    (no bit data to store for record 1)

我正在考虑制作一个包含4列varchar,money,real和bit的表。但是那时我只会使用每行4列中的1列而且它看起来不是最佳方式。

这是一个愚蠢的设计吗?现在是下一个问题:如何从正确的表中选择变量名而不必指定数据类型?除了做4个单独的查询,直到我得到结果。我在考虑使用3个工会,为每个工作台制作3个缺失的列。这是最好的方式吗?

1 个答案:

答案 0 :(得分:1)

如评论中所述,对于行中的列,SQL Server不会为每个记录占用额外的存储空间,这些列对于可变长度字段为空。

  

每行对于允许空值的列都有一个空位图。如果排在   那列是null然后位图中的一位是1,否则它是0。

     

对于可变大小的数据类型,实际大小为0字节。

     

对于固定大小的数据类型,acctual大小是默认的数据类型大小   以字节为单位设置为默认值(0表示数字,''表示字符)。

进一步阅读:http://weblogs.sqlteam.com/mladenp/archive/2007/09/06/How_does_SQL_Server_really_store_NULL-s.aspx