设计表数据库,重复注册或创建另一个表?

时间:2015-12-05 02:46:56

标签: database entity-relationship

我想让你知道你对这种情况的看法: 我有一张名为"电影"用这个colums

  • movie_id
  • 名称
  • 价 ......等等。

可以租借,购买电影或两者兼而有之。 如果我想租一部电影并购买价格变动,例如:

出租价格:2.50美元

购买价格:15.45美元

问题是:

最好在表格电影中制作副本吗?

mongoose.connection.close()

或者制作另一张表添加价格和available_for的信息?像这样:

表格电影

movie_id     name     price     available_for  ......    ........
    1        300      $2.50         rent
    2        300      $15.45        purchase

表Movie_available_for

movie_id     name   ......     ..........     ..........
    1        300
    2        300

我想知道哪个是最佳解决方案 谢谢!

3 个答案:

答案 0 :(得分:1)

您的关系方法可能取决于您希望实现的标准化程度。你的问题让我想起了很多Boyce-Codd普通形式(BCNF)和第3范式(3NF)。

事实上,在此维基页面上有一个类似于您的问题的示例:Boyce–Codd normal form (Wikipedia)

这里有很多理论,但它可以多次归结为您感觉最舒适的或者您能够最准确地执行哪种技术。

就个人而言,在这个特定的情况下,我会选择稍微规范化的形式(你的第二个例子)。这是因为“available_for”和“price”是相关的变量。如果您最终添加有关电影的更多信息,则该信息可能会多次重复。如果您添加第三个“availible_for”或不同的定价方案(1天1.50美元,5天4美元),您将有非常重要的数据重复。

此外,当涉及到代码时,如果有一个具有嵌套“availible_for”数组的电影对象(可能将其他名称称为“提供”或其他东西)对象,那将会很不错。

答案 1 :(得分:0)

我建议您将 available_for 列标准化,因为它重复并且仅包含少量字段。在另一个表中存储并在两个表之间创建关系。

Movie_Available_type

id int,available_for varchar(50)

然后你可以使用上面帖子中的thoughtarray指出的两种中的任何一种。

答案 2 :(得分:0)

我会选择:

Movie (movie_id PK, name, purchase_price, rent_price)

并使定价列可以为空。如果您不喜欢空值,可以将其分解为:

Movie (movie_id PK, name)
PurchasePrice (movie_id PK/FK, price)
RentPrice (movie_id PK/FK, price)