我尝试创建一个满足我需求的数据库设计。
我非常感谢您对我的下表设计的任何建议:
我有两个组成部分:类别和内容。
每当我为这两个组件中的任何一个创建一个新项目时,也应该创建一个新的路径项,其关系如图所示。
红色和蓝色高光与其颜色相同。
在ci_routes.refid
,ci_categories.slug
和ci_content.slug
等表中添加以下列是一种好习惯吗?
====更新====
我的应用程序的业务逻辑是这样的:
ci_routes.id
ci_categories.rid
。 ci_routes
,其中包含ci_routes.slug
与ci_categories.slug
相同的所有信息,而ci_routes.route
将基于配置的设置{{1}其中$path/$category_id
每当我决定将$path = 'category'
更改为$path
之类的内容时,我的所有路由都应根据新设置进行清除和重新创建。
请纠正我如果我在逻辑中某处犯了一些逻辑错误
答案 0 :(得分:1)
在这些表中包含以下列是一种好习惯 的 ci_routes.refid 强>
没有。在当前的设计中,ci_routes.refid将是一个引用两个表的列,你不能拥有一个外键而不是RDBMS中一个列的表,所以你必须在你的应用程序逻辑中处理它,这将是一个错误,努力工作。此外,您将在数据库级别中丢失数据完整性,这是不受欢迎的。
解决方案1 :
在ci_routes
中有两个单独的列引用ci_categories
和ci_content
,如ci_routes.content_id
和ci_routes.categories_id
解决方案2 :
使用inheritance通过拥有组件和类别的基表,包含这两个实体的共享属性,具有基表,您可以在ci_routes中将其作为外键引用。
在这些表中包含以下列是不错的做法 ci_categories.slug和ci_content.slug?
回答这个问题需要有关您的业务逻辑的更多信息
顺便提一下,您将通过冗余的slug
列对模型进行去标准化。如果您出于性能原因而打算这样做,那么考虑组件slug列何时更新,您将需要更新相关的rout行。在得到具体证据之前我不会这样做。