数据库设计查询:组合表还是保持单独?

时间:2011-05-19 18:12:36

标签: database-design

我开始设计一个数据库驱动的网站。

我有两个类似的表,GPU vendorCPU vendor。两者都有相同的列:id, vendor_name, vendor_url, vendor_bio

您可以制作单独的表格或将它们合并,也许添加类型column

我不希望自己的经验不足以阻碍我的设计。先想想,以后做! :)

2 个答案:

答案 0 :(得分:3)

如果他们实际上是问题域中的“供应商”。我将创建一个表'VENDOR'并添加列'VENDOR_TYPE'以及其他列。

Table Vendor{
    id, 
    vendor_type,
    vendor_name, 
    vendor_url, 
    vendor_bio    
}

但如果它们是两个逻辑上不同的实体类型,我会倾向于创建两个单独的表。在你的情况下它似乎是'VENDOR'而不是'GPUVendor'和'CPUVendor'

答案 1 :(得分:0)

YAU概述了答案。在大多数情况下,像我一样,我将两个表合并为一个,使用一个类型列来指示每个条目属于哪个类型。

这取决于您将如何使用数据。如果您的许多查询将GPU类型中的行与来自CPU类型的行组合在一起,那么单个表表将产生更好的结果。如果您的几乎所有查询都是关于GPU类型或专门关于CPU类型的,那么您将从两个表设计中获得更好的结果。

归根结底,这归结为YAU所说的:它们是两个实体还是一个实体。

我要补充一点,无论哪种方式,您都可以构建一个或两个视图,使数据看起来相反。如果创建单个VENDORS表,则可以创建仅选择CPU类型的CPU_VENDORS视图和仅选择GPU类型的GPU_VENDORS视图。然后,您可以在方便时访问这些视图。

如果采用双表设计,则可以创建单个VENDORS视图,该视图是GPU_VENDORS和CPU_VENDORS的UNION,并在需要时使用它。

除了效果效果之外,您还可以从视图中获得两全其美的效果。