我对如何在数据库中设计几个表有疑问。我有一个表来跟踪类别,一个用于子类别:
TABLE Category
CategoryID INT
Description NVARCHAR(500)
TABLE Subcategory
SubcategoryID INT
CategoryID INT
Description NVARCHAR(500)
类别可能类似于电子产品,其子类别可能是DVD播放器,电视等。
我有另一个表将引用Category / Subcategory。是否需要引用SubcategoryID?
TABLE Product
SubcategoryID INT -- should this be subcategory?
有更好的方法可以做到这一点还是这是正确的方法?我不是一个数据库设计人员。如果重要的话,我正在使用SQL Server 2008 R2。
答案 0 :(得分:10)
您的设计是合适的。我是一个数据库人员变成了开发人员,所以我可以理解在一个表中有类别和子类别的倾向,但是KISS永远不会出错。
除非要求极端性能或无限等级(我猜不是),否则你很高兴。
如果能够将多个子类别与产品相关联是一项要求,那么对于@ Mikael来说,您需要这样的设置,通过连接/交叉表创建多对多关系,Product_SubCategory:< / p>
CREATE TABLE Product (ProductID int, Description nvarchar(100))
CREATE TABLE Product_SubCategory (ProductID int, SubCategoryID int)
CREATE TABLE SubCategory (SubCategoryID int, CategoryID int, Description nvarchar(100))
CREATE TABLE Category (CategoryID int, Description nvarchar(100))
希望有帮助...
Eric Tarasoff
答案 1 :(得分:3)
为Categories
和SubCategories
设置两个单独的表格取决于您的情况。
如果按照原样保留,则仅限于类别&gt;子类别场景,如您不能拥有SubCategories的SubCategories。
如果您将它们放入一个表格中,则需要ParentID
列。如果某个类别是最重要的,则其ParentID
为0.如果您想允许子类别的无限子类别,例如Electronics > Recordable Media, Blueray, 4gb
您将需要使用递归编程来显示它们。
答案 2 :(得分:3)
将标签附加到产品而不是类别层次结构。它更加灵活。
create table product (id, name,...)
create table tag (id, name, description)
create table product_tag (product_id, tag_id)
答案 3 :(得分:2)
如果类别和子类别具有相同的属性,则将它们折叠到一个表中。
如果一个'sub'类别可以属于多个'parent'类别,则添加一个链接类,否则添加一个列以指向父类。
e.g。如果你有电子产品&gt;电视,你还可以娱乐&gt;电视?等
您的其他表应仅引用category_id(注意 - 不是parent_category_id)
HTH
答案 4 :(得分:1)
这取决于您的要求。如果每个产品都链接到不超过一个SubCategory,那么您应该在Products中拥有SubCategoryID。也不需要添加CategoryID。
需要不同模型的其他方案可能是产品可以直接链接到Category而不是SubCategory,或者一个Product可以链接到多个SubCategory,或者SubCategory链接到多个Category。 / p>
答案 5 :(得分:0)
只要Sub-Categories永远不会在不同的类别中重复,特别是如果它们具有不同的属性,那么您提出的方法就是好的。
当您添加/编辑产品时,可能会出现一个问题,即使您可能想要一个用户可以编辑类别的控件,您也没有类别字段。