我正在创建一个数据库来存储从多个来源恢复的移动应用程序的事件。问题是事件表中的行对用户没有多大意义,因为它主要是一连串整数。强制他们进行多次连接或多次查询。
CREATE TABLE source (
id serial PRIMARY KEY,
value string NOT NULL
);
CREATE TABLE application (
id serial PRIMARY KEY,
value string NOT NULL
);
CREATE TABLE platform (
id serial PRIMARY KEY,
value string NOT NULL
);
CREATE TABLE country (
id serial PRIMARY KEY,
value string NOT NULL
);
CREATE TABLE event (
id serial PRIMARY KEY,
source_id integer REFERENCES source(id),
application_id integer REFERENCES application(id),
platform_id integer REFERENCES platform(id),
country_id integer REFERENCES country(id),
...
updated_at date NOT NULL,
value decimal(100, 2) NOT NULL
);
我想直接使用“辅助”表的值作为我将在事件表中引用的主键(因为它是唯一的而不是空的)。它看起来像这样:
CREATE TABLE source (
value string PRIMARY KEY
);
CREATE TABLE application (
value string PRIMARY KEY
);
CREATE TABLE platform (
value string PRIMARY KEY
);
CREATE TABLE country (
value string PRIMARY KEY
);
CREATE TABLE event (
id serial PRIMARY KEY,
source string REFERENCES source(value),
application string REFERENCES application(value),
platform string REFERENCES platform(value),
country string REFERENCES country(value),
...
updated_at date NOT NULL,
value decimal(100, 2) NOT NULL
);
我认为这种方式也可能很好,因为在这种情况下我并没有真正看到使用代理键的附加值。还阻止我使用性能可能较慢的视图,因为每次我在查询中使用视图时它都会执行查询。
你觉得这个选项怎么样?