如何实现查找表?

时间:2017-05-24 06:42:42

标签: java mysql sql-server lookup-tables

我无法掌握查找表的概念。 我目前正在开展一个项目,其中我使用两个表。

  1. 第一个表由两列组成 - 名称(varchar)和值(varchar)。
  2. 第二个表还有两行 - Result(varchar)和value(varchar)。
  3. 结果用于存储从Java代码获取的值。只要Java代码的结果与第一个表中的名称匹配,我就需要使用第一个表中的相应值更新第二个表。 使用查找表是否有帮助?如果是,可以用一个例子来解释吗?如果没有,还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

想象一下包含person列的表GenderIsMale BIT。您可以将此值设置为1(是的,它是男孩)或0(不,是女孩)。这在早些时候很容易。

现在我们有更多类别。根据{{​​3}} facebook 提供超过50个不同的类别......

查找表发挥作用:您创建一个表 - 作为minium - 一个唯一键和一个值。在大多数情况下,这是ID INT IDENTITYContent VARCHAR(100) NOT NULL。您可以添加更多列,例如Abbreviation或直接绑定到此值的任何其他内容(例如,其他语言或外部代码系统代码this link)。

下一步是,取消GenderIsMale - 列并将其替换为

GenderID INT NOT NULL 
    CONSTRAINT FK_Person_GenderID FOREIGN KEY REFERENCES GenderLookUpTable(GenderID)

人员表仅存储GenderID,相关值存储在旁边表中,可以查找

简单的查找表如何在min中创建关系数据库模型的基本结构。 3.NF或BCNF (这应该是专业数据库设计的最低要求)。

答案 1 :(得分:0)

  

只要Java代码的结果与第一个中的名称匹配   表,我需要用相应的值更新第二个表   在第一个表格中。

这是database trigger的完美用例,可用于在表格中发生更改(插入,更新,删除)时执行各种操作。

假设您正在将Java计算的值插入(result, value)表(让我们称之为foo,而另一个表是bar),您可以编写一个触发器,用另一个表中的值替换正在写入的值。给Postgres的示例,如果使用另一个db,请参阅您的特定RDBMS手册以查看语法。

CREATE FUNCTION get_value_from_lookup_table() RETURNS trigger AS $$
    BEGIN
        IF EXISTS (SELECT 1 FROM bar WHERE name = NEW.result) THEN
            RETURN SELECT name, value FROM bar WHERE name = NEW.result;
        END IF;
        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER lookup_value
INSTEAD OF INSERT ON foo
FOR EACH ROW
EXECUTE PROCEDURE get_value_from_lookup_table();

每次在INSERT上完成foo时,都会检查bar name=result中是否存在行。如果是,则插入该行,否则插入正常。这是它的基本要点。实际的解决方案取决于表约束,是否需要处理插入和更新等。