在建模 "Many To One" 关系时,如何处理 "Many" 侧的记录不属于 "One" 侧的任何记录?
When modeling "Many To One" relation, how can I deal with record from "Many" side not belonging to any of the records on "One" side?
我有一个 产品 的列表,每个产品都可以属于一个产品 类别。
我可以做两张表:
product(id, product_name, category_id);
category(id, category_name);
有些产品尚未定义类别或不属于任何定义的类别。我该如何处理?
我可以使 category_id
可为空,或 category_name
可为空,或两者兼而有之。或者我可以创建一个 "not_yet_assigned" 值作为 category_name.
的一部分
有什么好的解决办法吗?
制作 Product.Category_id nullable
将强制使用 outer joins
来查看您的所有产品及其 Category.Category_Name,所以我会避免这种情况,并且我会创建一个名为未分类或类似的类别。
或者可能是一个 Uncategorized(这将是默认设置)和一个 Other 用于那些不属于任何其他类别的产品。
基本上,我认为你的问题的答案取决于你是否想要区分这两种情况:
- 产品属于杂类,或者
- 商品尚未分类。
如果区别对您的应用程序很重要,那么我的建议是创建一个类别“杂项”(或类似类别),并将其 id
作为外键分配给第一组产品,然后离开对于仍必须分类的产品,null。
如果区别不大,你可以将类别留空,或者定义一个"null"类别,我认为这两种方法之间没有太大区别。
我有一个 产品 的列表,每个产品都可以属于一个产品 类别。
我可以做两张表:
product(id, product_name, category_id);
category(id, category_name);
有些产品尚未定义类别或不属于任何定义的类别。我该如何处理?
我可以使 category_id
可为空,或 category_name
可为空,或两者兼而有之。或者我可以创建一个 "not_yet_assigned" 值作为 category_name.
有什么好的解决办法吗?
制作 Product.Category_id nullable
将强制使用 outer joins
来查看您的所有产品及其 Category.Category_Name,所以我会避免这种情况,并且我会创建一个名为未分类或类似的类别。
或者可能是一个 Uncategorized(这将是默认设置)和一个 Other 用于那些不属于任何其他类别的产品。
基本上,我认为你的问题的答案取决于你是否想要区分这两种情况:
- 产品属于杂类,或者
- 商品尚未分类。
如果区别对您的应用程序很重要,那么我的建议是创建一个类别“杂项”(或类似类别),并将其 id
作为外键分配给第一组产品,然后离开对于仍必须分类的产品,null。
如果区别不大,你可以将类别留空,或者定义一个"null"类别,我认为这两种方法之间没有太大区别。