我无法掌握查找表的概念。 我目前正在开展一个项目,其中我使用两个表。
结果用于存储从Java代码获取的值。只要Java代码的结果与第一个表中的名称匹配,我就需要使用第一个表中的相应值更新第二个表。 使用查找表是否有帮助?如果是,可以用一个例子来解释吗?如果没有,还有其他方法吗?
答案 0 :(得分:0)
想象一下包含person
列的表GenderIsMale BIT
。您可以将此值设置为1
(是的,它是男孩)或0
(不,是女孩)。这在早些时候很容易。
现在我们有更多类别。根据{{3}} facebook 提供超过50个不同的类别......
查找表发挥作用:您创建一个表 - 作为minium - 一个唯一键和一个值。在大多数情况下,这是ID INT IDENTITY
和Content 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
中是否存在行。如果是,则插入该行,否则插入正常。这是它的基本要点。实际的解决方案取决于表约束,是否需要处理插入和更新等。