2

我有數據庫表與領域contenttype_id的content_id。我想一個頁面通過contenttype_id通過的content_id鏈接到的contentType,並參考實際內容。問題是內容取決於contenttype_id並且建模方式不同,因此content_id參考不同的表,具體取決於contenttype_id如何建模一個頁面可以有不同內容類型的數據庫?

CREATE TABLE "page" 
("id" "INT", 
"author" "VARCHAR(45)", 
"created" "DATE", 
"content_type" "INT", 
"content_id" "INT") 

CREATE TABLE "contenttype" 
("id" "INT", 
"name" "VARCHAR(45)") 

CREATE TABLE "content_redirect" 
("id" "INT", 
"url" "VARCHAR(45)") 

CREATE TABLE "content_script" 
("id" "INT", 
"url" "VARCHAR(45)", 
"params", "VARCHAR(45)") 

CREATE TABLE "content_text" 
("id" "INT", 
"text" "TEXT") 

CREATE TABLE "content_process" 
("id" "INT", 
"step1" "TEXT", 
"step2" "TEXT", 
"step3" "TEXT") 

CREATE TABLE "content_extprocess" 
("id" "INT", 
"system_id" "INT", 
"process_id" "INT") 

如何做到這一點?還是它在理論上已經錯了?

+1

爲什麼被存儲在不同的表中的內容?需要更多的信息,否則我會用實際內容替換'content_id',因爲它看起來像是一對一的關係。 – 2010-09-07 19:47:34

+0

可能的內容從「簡單文本」到「外部腳本」到「包含多個步驟的過程」有所不同,因此內容結構需要不同的表格 – timpeti 2010-09-07 19:52:35

+0

我認爲沒有理由將不同的表格與您的解釋結合起來。爲什麼我們不能同時使用簡單文本和腳本鏈接? – 2010-09-07 19:54:53

回答

0

假設頁面的內容具有不同的數據結構,並且內容不適合存儲爲簡單的blob。

具有page_id和content_type_id的頁表。您可以在不同的表中有不同的內容(每個content_type_id一個),每個內容表提供指向頁表的外鍵列page_id。缺點是你不能讓一個連接返回所有類型頁面的內容,但是你必須根據page.content_type_id字段的不同值創建SQL查詢。

1

這個怎麼樣,開始。

alt text

編輯

create table Content (
     ContentID integer primary key 
    , ContentType char(2) 
    , ContentText text 
) engine=InnoDb; 

create table ScriptContent (
     ContentID integer primary key 
    , URL  varchar(45) 
    , Params varchar(45) 
) engine=InnoDb; 
alter table ScriptContent add constraint fk1_ScriptContent foreign key (ContentID) references Content (ContentID); 

create table ExternalProcess (
     ContentID integer primary key 
    , SystemID integer 
    , ProcessID integer 
) engine=InnoDb; 
alter table ExternalProcess add constraint fk1_ExternalProcess foreign key (ContentID) references Content (ContentID); 
+0

如何將符號與X轉換爲SQL。最後,我將不得不使用像CakePHP這樣的MVC框架來創建一個模型。 – timpeti 2010-09-07 20:31:25

+0

@timpeti - 請參閱編輯 – 2010-09-07 21:36:27

+0

@timpeti。你沒有SQL,你有MyNonSQL。只需實施表格。達米爾的模型是正確的。 – PerformanceDBA 2011-01-26 01:14:40

相關問題