繁体   English   中英

我们何时应该采用一对一的关系模型,而不是将属性添加到同一个表中?

[英]When should we go for one-to-one relation model vs adding attributes to same table?

我正在使用sails框架来构建一个网站和MySQL作为我的数据库。 我有一个名为“Property”的表。 还有其他细节,如“总预算”,“保留期”,“可租赁区域”,“投资者份额”,“公司份额”,“销售价格”以及更多与此属性相关的属性一对一的时尚。

我无法决定是否为这些细节创建单独的小表(通过将它们分组在“Equity”,“Funding”,......等小表下),将“Property ID”作为每个小主键的主键表(在sails上创建一对一关联)或简单地将所有这些作为属性在“Property”表下。 将它们作为属性添加到“Property”表会使表格太大而大约有40列(这是一个问题吗?)。

注意:所有这些属性都是强制性细节,而不是任何时候的“NULL”。

如果所有字段都是强制性的,我会只选择一个表格。

离MySQL限制 ,这不会有问题。

您的代码将更易于编写和阅读。

对MySQL性能来说也会更好,因为在检索数据时不需要JOIN表。


编辑 在其他用例中可以使用one-to-one关系。 例如,假设您有一个表“animal” ,其中包含“varchar name”“integer age”“decimal weight”列

但是存储的动物可以根据其家庭将一些特定属性存储在另一个表中。

  • “integer owner_id”“enum breed”“dog”
  • “boolean can_fly”“整数number_of_eggs”“鸟”
  • “整数number_of_gils”“boolean live_in_freshwater”“fish”

Rantanplan the dog, Donald the duck and Nemo the fish都可以存储在“animal”表中,并将它们的特定属性存储在另一个具有one-to-one关系的表中。

这是一个愚蠢的例子,但它提供了一个用例的概念。

正如亚历克西斯·诺指出的那样,你将通过一张桌来获得成绩。 40个属性并不是很多,特别是对于业务逻辑。

但是,我想指出何时有单独的表是有意义的。 这主要归结为您的领域是保持静态还是可能发生变化。

例如,如果您确定该物业中唯一的股份将是公司份额和投资者份额,那么只需要两个字段。 如果您认为可能需要添加其他持有者,如果稍后再包含它们将会有点混乱(因为这些值都是强制性的)。

如果你使用mongodb,你可以使用arrayjson类型来支持这种动态。 因为它们在mysql中并不是固有的支持,所以最好为不同类型的共享创建表,并根据需要将每个Property与多个Share (一个Share大致看起来像[propertyId,shareType / shareTypeId,shareValue] )。

因此,尝试将属性划分为不同的类别,并查看每个类别中的成员是否将保持不变。 如果您认为将来可能会附加任何类别,请将其作为单独的表格包含在内。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM