2013-01-03 47 views
-1

我有一个“文本”表中,可能来自不同的来源,像鸣叫短信,电子邮件等文字表格和每个源有自己的日志,并且文本来自源代码。所以我带了一些解决方案,但我不知道哪个是最好的。一个表从许多源(一对一) - 数据库设计

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

所以这是最好的方法?

UPDATE:

我想念我的问题的重要组成部分,而这可能是故障,遗憾的是。在我的情况下,文本也可能来自csv(excell)文件。这意味着一个文件可能有许多文本,因为该文件是许多文本的转储(昏迷或行分隔)。短信,鸣叫,并用文本电子邮件的关系是一对一的,但文本文件是一对多 所以我的问题大缺失的部分是文件表

File(
file_id PK 
file_name 
etc.. 
) 

回答

1

尝试创建一个额外的表称为text_source和然后让每个来源(即短信,电子邮件等)通过FK text_source_id引用它。这样,你可以让你的text表只有一个text_source_id

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

+0

你的意思是这样,文本(text_id,内容,SOURCE_ID(FK)) ,Text_Source(source_id(PK),sms_id(FK),tweet_id(FK),email_id(FK))? – Ahmad

+0

不完全。 Text_Source(source_id(PK)),Tweet(tweet_id(PK),source_id(FK),other_columns ...),SMS(sms_id(PK),source_id(FK))等等。它在Text表格和三个源表格之间添加了一个表格,因此您只需引用一个Text_Source表格。 – jchapa

+0

感谢您的回答,我真的很感激。但我认为,我错过了我的问题的一大部分,这可能是错误的,对不起。在我的情况下,文本也可能来自csv(excell)文件。这意味着一个文件可能有许多文本,因为该文件是许多文本的转储(昏迷或行分隔)。短信,Tweet和电子邮件与文本的关系是一对一的,但带文本的文件是一对多。以前感谢 – Ahmad

相关问题