2011-10-29 21 views
0

列下面的模式:引用的2頁不同的表

archivebox (id, mediatype_id) 
mediatype (id, name) 
archivebox_records (id, archiveboxId, recordId) 
picture (id,name) 
print (id,name) 

的recordId應參考是否pictureId或printId。怎麼可能解決這個問題?我使用mysql工作。

謝謝!

回答

1

在你的設計中總是最好的。這將涉及創建兩個表archive_picturesarchive_prints以及與各個表的外鍵關係。

如果你真的不願意走這條路線,嘗試加入某種記錄指標的archive_records表,例如

ALTER TABLE `archive_records` ADD `record_type` ENUM('picture', 'print') NOT NULL; 

然後,您可以根據這個指標創建查詢

SELECT p.name FROM picture p 
INNER JOIN archive_records ar 
    ON ar.record_type = 'picture' AND p.id = ar.recordId 
+2

如果拆分'archivebox_records'表不是選項,我寧願將'recordId'列拆分爲'pictureId'&'printId'而不是添加'record_type'。這樣我可以定義引用相應表的外鍵。 –

+0

我會將記錄表分成arcivebox_prints和arcivebox_films。像record_type這樣的指標不能解決從recordId到printId和filmId的forein關鍵引用的問題。 – Anatoliy

1

另一個清潔溶液是合併pictureprint

medium(id, name, type) 

其中type可以"print""picture"或當數據模型生長的外鍵引用包含所允許的值的表。

+0

它不會工作,因爲兩個表都有許多特定的屬性,所以將它們放在一個表中(例如,中等)是不好的 – Anatoliy

+0

那麼,在這種情況下,我會推薦Andriy M昨天提出的建議。 – JimmyB