【发布时间】:2014-01-23 19:45:48
【问题描述】:
我遇到了如何更改数据库模型的问题:
现在我们已经预定义了表Categories
假设表 Places 和 People 可以分配给类别,所以看起来像这样:
People <=> PeopleCategories <=> Categories <=> PlaceCategories <=> Places
(人可以有很多类别,类别可以有很多人,地方可以有很多类别,类别可以有很多地方)
但现在有一个新的要求:
在个人资料上根据类别显示所有相应的地方(到目前为止没问题)并添加一个对某些属性建模的复选框(例如在前端显示为最喜欢的地方)。地点个人资料的另一侧相同,用复选框标记分配到至少一个相同类别的人员。
我想知道是否有一些很好的方法来对此进行建模 - 我唯一想到的是添加一个新的 PeoplePlaces 表,但是我必须手动控制人员或地点是否没有改变他们的类别并且他们仍然被分配等等 - 我必须在应用层管理的数据的一致性会有很大的问题。
我可能做的第二件事是完全删除类别并仅在PeoplePlaces 级别设置它,但我会为用户失去一些简单性:用户可以选择大约 10 个预定义类别,因此人员和地点之间的链接在前端是非常自动的,只有管理员应该看到哪些地方分配给了哪些人并管理我正在谈论的那个复选框
您对这种架构有何建议?提前致谢! (如果它对某种解决方案很重要,那么它是一个 MySQL 数据库,但这更像是一种通用架构)
【问题讨论】:
-
这和 DBA.SE 的这个问题类似:Are there DBMS that allow a Foreign Key that References a View (and not only base tables)? 请阅读所有答案和 cmets 中的讨论,实现起来并非易事。
-
@ypercube:是的,这正是我所面临的,我看到你提出了这个问题。你最后用了什么?我可能会尝试约束解决方案,因为我的表可能不会经常更改。谢谢你的链接!
-
这对我来说更像是一个理论问题,而不是一个实际问题。对于 MySQL,我想我会使用约束解决方案(它还需要对
PeopleCategories和PlaceCategories表使用 DELETE 触发器,或者使用其他方式来自定义这两个表上的 DELETE 操作。)
标签: mysql database database-design architecture data-modeling