2013-01-03 64 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

相關問題