你能在Access 2007中拥有神奇的数字吗?

时间:2009-10-15 13:34:56

标签: sql ms-access magic-numbers

如何在Access列中存储数字,然后将一些有意义的字符串与每个值相关联?

因为当我可以一次性定义每个值的含义时,我不想看原始数字,并且在数据表视图中显示这些含义,例如:

ID  Name      Type

1   Jack      1 (Friend)
2   Jill      1 (Friend)
3   Diago     2 (Enemy)
4   Sally     3 (Colleague)

6 个答案:

答案 0 :(得分:3)

您可能至少需要两个不同的表格。一个具有人员的ID和名称,另一个表格具有与该人员相关的类型和描述。

如果一个人可以拥有多个关系(例如,朋友和同事),那么您将拥有第三个表,该表具有一列用于该人的ID,另一列用于关系类型的ID。如果一个人只能拥有一种类型的关系,那么你可以简单地在你的Person表中添加第三列,其中包含他们所处个人类型的ID。

要从表中获取数据,可以在SQL语句中使用JOIN,通过为每个表指定的ID将所有表的行连接在一起。

通常,here's a link描述了关系数据库的全部内容。这是一个Microsoft Office link,它讨论了如何使用Access中的主键和外键约束来创建表之间的关系,这可能对您有帮助。 Here's another一步一步的说明和一个相当相关的例子(学生和成绩)。

答案 1 :(得分:2)

为什么要使用魔术数字?为什么不直接使用?

解决方案1 ​​ - 只需使用单词,绝不使用幻数。

解决方案2 - 提供一个表格,将幻数映射到单词并使用连接。

答案 2 :(得分:1)

好吧,在你的查询中,你需要一个与另一个表的连接,为你定义魔术数字的字符串值:

SELECT ID, Name, Type_Text AS Type
FROM MyTable
INNER JOIN MyLookupTable
ON MyTable.Type = MyLookupTable.Type

答案 3 :(得分:1)

我认为您正在寻找SWITCH功能......

SELECT Name,
       SWITCH(Type=1, "Friend", Type=2, "Enemy", Type=3, "Colleague") as Expr1
FROM MyTable

More info

答案 4 :(得分:0)

听起来像你需要创建另一个表

  • 表格:类型
  • :类型ID,说明

答案 5 :(得分:0)

示例1

ISO 5218 sex codes

数量少(只有四个可能的值)。被认为是稳定的(发现新性别的机会不大,为什么要改变标准?)因此,SWITCH()陈述是合适的:

SELECT SWITCH(
              C1.sex_code = 9, 'corporate body', 
              C1.sex_code = 1, 'male', 
              C1.sex_code = 2, 'female', 
              TRUE, '(not known)'
             ) AS customer_person_type, ...
  FROM Customers AS C1 ...

示例2

ISO 4217 currency codes

数量相对较大(约175)。被认为是不断变化的(一个线索是它有一个负责维护的官方机构)。因此,这些在基表中最合适:

CREATE TABLE Currencies
(
 currency_code CHAR(3) NOT NULL, 
    CHECK (currency_code NOT ALIKE '%[!A-Z]%'), 
 currency_name VARCHAR(30) NOT NULL
);

INSERT INTO Currencies VALUES ('AED', 'United Arab Emirates dirham');
INSERT INTO Currencies VALUES ('AFN', 'Afghani');
INSERT INTO Currencies VALUES ('ALL', 'Lek');
INSERT INTO Currencies VALUES ...

哪个最适合你:性别或货币? ;)