我有一個問題,如何更改數據庫的模式:數據庫體系結構多到多到很多
現在我們已經預定義的表格Categories
和假設表Places
和People
可分配以類別,所以它看起來是這樣的:
People <=> PeopleCategories <=> Categories <=> PlaceCategories <=> Places
(人們可以有很多種類,類別可以有很多的人,地方可以有很多種類,類別可以有很多地方)
但現在有一個新的要求:
在個人資料顯示基於類別(迄今沒有問題)的所有相應的地方,並添加一個建模某些屬性(例如在前端顯示爲最喜歡的地方)的勾選框。另一方面,Place profile個人用同一個勾號框標記至少一個同一類別的人。
我不知道是否有一些不錯的方式來模擬這個 - 我唯一想到的是添加一個新的PeoplePlaces
表,但是我必須手動控制人或地點是否沒有改變他們的類別,他們是仍然分配等等 - 我將不得不在應用程序層上管理數據的一致性,這會帶來相當大的問題。
我可能做的第二件事就是完全刪除類別並僅在PeoplePlaces
級別上使用,但我將失去用戶的一些簡單性:有10個預定義的類別供用戶選擇,以便People和Places之間的鏈接是相當自動的前端,只有管理員應該看到哪些地方分配給哪些人,並管理我正在談論的那個複選框
你對這個架構有何建議?提前致謝! (這是一個MySQL數據庫,如果它對某種解決方案很重要,但這是更通用的架構的東西)
這與DBA.SE上的這個問題類似:[是否有DBMS允許引用視圖的外鍵(而不僅僅是基表)?](http://dba.stackexchange.com/questions/17853/are-there-dbms-that-allow-a-foreign-key-that-references-a-view-and-not-only-bas)請閱讀所有答案和評論中的討論,這不是微不足道的實現。 –
@ypercube:是的,正是我所面對的,我看到你提出了這個問題。最後你用了什麼?我可能會嘗試約束解決方案,因爲我的表格可能不會經常更改。謝謝你的鏈接! – kuncajs
這對我來說更是一個理論問題,而非實際問題。對於MySQL,我想我會使用約束解決方案(這也將需要'PeopleCategories'和'PlaceCategories'表的DELETE觸發器或其他方式來定製這兩個表上的DELETE操作。) –