我该如何解决求职面试中提出的SQL查询

时间:2019-02-26 11:07:30

标签: mysql sql sqlite

我正在努力解决最近求职面试中提出的一个问题 但是我只是跳过了这个问题。 谁能帮我解决SQL查询。

用于发送SMS消息的服务在下表中包含已发送消息的日志:

TABLE smsMessage

    messageId INTEGER PRIMARY KEY NOT NULL,
    src VARCHAR(30) NOT NULL,
    dest VARCHAR(30) NOT NULL,
    status INTEGER NOT NULL

消息文本存储在表smsMessageText中。修改提供的SQLite create table语句,以便:

  • 一条短信只能有一条短信。
  • smsMessageText的messageId必须存在于smsMessage表中。

1 个答案:

答案 0 :(得分:0)

这有点奇怪。这是0 / 1-1的关系,通常是通过将消息文本放在smsMessage表中来实现的。通常不会使用第二张表。

create table smsMessage (
    messageId INTEGER PRIMARY KEY,  -- not null is redundant
    src VARCHAR(30) NOT NULL,
    dest VARCHAR(30) NOT NULL,
    status INTEGER NOT NULL,
    messageTextId int,
    constraint fk_smsMessage_messageTextId foreign key (messageTextId) references smsMessageText(messageTextId)
);

create table smsMessageText (
    messageTextId integer primary key,  -- NOT NULL is redundant
    messageText text,
    constraint unq_messageText unique (messageText)
);

如果您只想存储消息的一个副本,即使它们有很多副本,也将使用第二张表 。在某些情况下,这可能会更有效(在空间方面)。