在我的数据库中,我得到了包含CompanyId和Name列的公司列表。 此外,还有用户和那些用户可以添加产品。 表:user和user_products 没有产品表定义产品,因此每个用户都是唯一的“user_product”
当用户添加产品时,他键入公司名称。如果公司表中存在该公司名称,我想建立与公司表的连接,而不是仅保存user_product上的名称。到目前为止一切都很好..我只是将CompanyId存储在user_product表中。
问题是当用户输入公司表中不存在的名称时。我想在名为user_company的表中创建一个新记录,而不是将名称保存为varchar。 该表有列:UserCompanyId(PK),UserId,Name。如果组合Name和UserId已经存在,我当然不会创建新行,只需引用此ID。
我应该怎么做才能在这里维护一个好的数据库设计..我应该在user_product中添加这条记录以及一个名为UserCompanyId的新列。因此,在添加新行时始终设置CompanyId或UserCompanyId。感觉这可以以更好的方式完成。有人有任何想法吗?
我当然只有一个表“company”并且有一个UserId列,当它是由系统添加的全局公司时为null,或者当用户添加了没有公司名称时实际设置UserId全球存在。这也感觉不好......
答案 0 :(得分:2)
实际上,我认为你在最后一段中钉了它。公司既可以由用户定义,也可以不定义,因此userId作为可空列有意义。这还允许您在公司名称上拥有唯一键,这允许您使用数据库来强制执行公司名称无法复制的事实。
您的公司表存在以定义公司 - 哪个用户(或用户)创建公司只是关于公司的信息。