product
表有分类,media
表有分类,ticket
表有分类。
其中每一个都与category
表有 HasMany 关系。有两种方法:
- 有一个可能带有类型列的通用类别表,并有像 MediaCategory 等中间表。
- 拥有像 MediaCategory 这样的单独表格,每个表格都具有与类别相同的结构
第一个更好,我认为就完整性而言。
如果类别不共享,那么最好(在大多数情况下)为每个类别类型提供单独的表。
理由如下:
数据库是数据关系完整性的看门人。在编写良好的程序中不应该有任何外键违规异常,即代码不依赖数据库来保持数据的关系完整性。但是,如果出现错误,数据库中的关系会使错误不太可能导致数据损坏。
当对媒体、产品等及其有效类别使用单独的表时,可以通过外键关系轻松维护关系完整性;基本上媒体表中的任何记录都可以属于媒体类别表中的任何类别。确保关系:
"Records in media table can belong to any category of type 'media' in
the categories table"
在数据库级别不太直接。
话虽如此,解决数据结构重复的问题会使整个底层结构变得可疑。在您的情况下可能并非如此,但您应该查看需要引入类别的基础用例,并查看它们是否以不同的方式更好地服务(例如自由文本搜索索引关键字。)