0

我有两张表,ACTIVITY 和 EVENT。ACTIVITY 在一列中列出了所有可能的代码(如 INT),在另外两列(REASON 和 CATEGORY)中列出了它们的描述。我希望用户只在应用程序前端的 EVENT 表中输入代码,然后执行查找以将匹配的描述列插入到同一个(EVENT)表中。

CREATE TABLE EX.ACTIVITY
(
  CODE        INTEGER                           NOT NULL,
  REASON      VARCHAR2(40 BYTE)                 NOT NULL,
  CATEGORY    VARCHAR2(30 BYTE)                 NOT NULL,

)

CREATE TABLE EX.EVENTS
(
  ID          INTEGER                           NOT NULL,
  CODE        INTEGER                           NOT NULL,
  REASON      VARCHAR2(40 BYTE)                 NOT NULL,
  CATEGORY    VARCHAR2(30 BYTE)                 NOT NULL,

)

谢谢。(顺便说一句,我有点像新手,所以如果这是初级的,请原谅我)

4

1 回答 1

0

您有一个存储 ACTIVITY 属性的 ACTIVITY 表。为什么将这些属性存储在另一个表 (EVENTS) 中?这违反了所谓的规范化(第二和第三范式)。如果您将 ACTIVITY 的属性存储在 EVENTS 表中,那么您已经为自己制造了许多问题,例如冗余数据(原因和类别在 events 表中不必要地重复)。只需将活动代码存储在事件表中!这样,如果您以后必须更改活动的类别,您只需更改与该代码对应的 ACTIVITY 表记录。

要显示这些值,请在 SELECT 语句中使用 JOIN:

SELECT e.id, e.code, a.reason, a.category
  FROM events e JOIN activity a ON e.code = a.code
 WHERE ...

JOIN 就像它听起来的那样:它将满足 ON 子句中的条件的两个表的记录连接起来。因此,在此示例中,您将为事件和活动表中具有匹配代码值的每一对记录返回一行。您可能有许多具有相同代码的事件;这不是问题 - 具有该代码的每个事件行都将从该代码的活动表中获得相同的值。这样可以保持数据完整性,同时允许您在一个 select 语句中显示两个表中的值。

于 2013-02-23T07:39:25.243 回答