-1

我有一个“文本”表,文本表可能来自不同的来源,如 Tweet、SMS、电子邮件等,每个来源都有自己的日志,文本来自来源。所以我提出了一些解决方案,但我不知道哪个是最好的。

解决方案 1:

Text(
text_id PK
content
source_type (tweet, sms, email, etc)
source_id (can't be FK since it may contain sms_id, tweet_id, or email_id)
)

Tweet(
tweet_id PK
tweet_text
tweet_username
etc...
)

Sms(
sms_id PK
sms_text
sender_number
etc...
)

Email(
email_id PK
email_text
email_sender
etc...
)

解决方案 2:

Text(
text_id PK
content
sms_id FK
tweet_id FK
email_id FK
)

Tweet(
tweet_id PK
tweet_text
tweet_username
etc...
)

Sms(
sms_id PK
sms_text
sender_number
etc...
)

Email(
email_id PK
email_text
email_sender
etc...
)

请注意,一个“文本”仅来自一个来源。

所以如果我使用解决方案 2,假设来源来自短信,那么数据将如下所示

Text(
12
'the text'
333
null
null
)

Sms(
333
'the text'
0818833733664
etc...
)

那么哪个是最好的方法?

更新 :

我错过了我的问题的很大一部分,这可能是错的,对此感到抱歉。在我的情况下,文本也可能来自 csv(excell) 文件。这意味着一个文件可能有很多文本,因为该文件是许多文本(逗号或行分隔)的转储。SMS、Tweet 和 Email 与 Text 的关系是一对一的,但 File with Text 是一对多的,所以我的问题中最大的缺失部分是 File Table

File(
file_id PK
file_name
etc..
)
4

1 回答 1

1

尝试创建一个名为的附加表text_source,然后让每个源(即 SMS、电子邮件等)通过 FK 引用它text_source_id。这样,你可以让你的text桌子只有一个text_source_id.

IE

Text表 --FK-->text_source表 <--FK-- SMS, Email,Tweet

于 2013-01-03T17:48:41.847 回答