来自许多来源的一张表(一对一) - 数据库设计

时间:2013-01-03 17:34:22

标签: sql database postgresql database-design

我有一个'文本'表,文本表可能来自不同的来源,如推文,短信,电子邮件等,每个来源都有自己的日志,文字来自源。所以我带来了一些解决方案,但我不知道哪个是最好的。

解决方案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...
)

那么哪种方法最好?

更新:

我很想念我的问题,这可能是错的,对不起。在我的情况下,Text也可能来自csv(excell)文件。这意味着一个文件可能有很多文本,因为该文件是许多文本的转储(逗号或行分隔)。与文本的SMS,推文和电子邮件关系是一对一的,但文本与文本是一对多的 所以我的问题中最大的缺失部分是文件表

File(
file_id PK
file_name
etc..
)

1 个答案:

答案 0 :(得分:1)

尝试创建一个名为text_source的附加表格,然后让每个来源(即短信,电子邮件等)通过FK text_source_id引用它。这样,您就可以让text表格拥有text_source_id

Text表--FK - > text_source表< - FK-- SMSEmailTweet