我有一个问题,如何更改数据库的模式:数据库体系结构多到多到很多
现在我们已经预定义的表格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操作。) –